8年+的經歷or高學歷,都並非資深軟件工程師的定義……

全文共2703字,預計學習時長8分鐘

來源:Pexels

近幾年軟件行業日新月異,變化很多。

 

其中,我最喜歡看到的變化就是公司不再期待軟件開發人員有特定的學位,甚至沒有學位都可以。

 

不管對於個人還是企業,這都是一個很棒的消息。

 

因爲進入這個行業最重要的是這個人究竟能幹些什麼。如果申請人不能解決編程問題,那他是否有學士學位還是碩士學位並不重要。如果他們不理解MVC模式,那他們能否解釋大O符號是什麼也並不重要。

 

親身體驗:我有一個計算機科學學位,在我作爲軟件工程師的時候,除了面試,我從來不需要計算大O。如果你是一個網站可靠性工程師,每秒得處理成千上萬的請求,或許你需要計算它,但我猜我們大多數人從沒處理過大O。

 

人們進入這個行業和成長所需的信息,都可以通在線資源配以手寫軟件的經驗找到,這就產生了對學位期望的轉變。

 

但我認爲期望的轉變不能止步於此,尤其是尋找資深開發人員的時候。成爲一個團隊裏的資深軟件工程師的要求有很多,遠不止豐富的經驗……雖然經驗多是好事,但是一份工作描述不能把“8年以上的工作經驗”作爲衡量自身工程師的標準。

 

會有人工作了9年,但技能不達標,但與此同時也有人只工作了5年,卻能掌握所需的所有能力。

 

不妨把這種數字上的硬性條件替換成幾件對團隊更有價值的事情。除了成爲軟件工程師的必備條件之外,以下是我希望資深工程師有的特質:

 

良好的編程能力

 

希望這一點是所有人都能想得到的,最好是都不用出現在這裏,因爲這是一個“理所當然”的要求,但它往往是區分好工程師和優秀工程師的基本要素。

 

像給變量和方法命名這樣簡單的事情可以大大提高效率。牢記SOLID原則(注:S:單一職責原則;O:開發封閉原則;L:迪米特法則/里氏替換原則;I:接口隔離原則;D:依賴倒置原則),不斷尋找重構候選代碼和死代碼是必要的。確保測試和功能代碼一樣重要,這些事情都是十分有價值的。

 

資深工程師是團隊裏可以在代碼的易懂性和有效性上找到平衡的那個人,並且確保團隊能保持這種平衡水平。

 

來源:Pexels

堅持不懈

 

一個人成功與否最常提到的因素就是他有多少“毅力”。定義如下:

 

 “毅力是對長期成就的熱情和持久的堅持,與此同時對回報和別人的認可沒有過分關注“

 

這也是作爲軟件工程師最重要的品質之一。我們都遇到過這種情況……你發現代碼裏的漏洞,想要去解決它。你的第一次,第二次,甚至第五十次嘗試都失敗了……挫敗感席捲而來,沒過多久,你就開始問自己,到底還能幹這行多久。

 

某位技術領頭人曾經跟我說,他們把隊伍裏的資深人員視爲團隊中的“苦力”。

 

聽起來有點慘,但是重複嘗試一個步驟失敗50次後,仍然能深呼吸,吃點巧克力,終於在第五十一次嘗試成功,這是成爲資深工程師的必要素質。

 

資深工程師是那些能帶領團隊走過軟件開發的風風雨雨的人。

 

如果你還不是一名資深工程師,但那是你的目標,可以從這開始。

 

開放學習新事物

 

技術行業可以說是世界上革新最快的行業之一了,甚至就是最快的那個。每一兩年,就會有新技術、工具,或者是語言出現,它們會帶來新的問題,甚至是擴展那些本就存在的問題。

 

作爲開發人員,要跟得上瞬息萬變的軟件工程業,我們必須一直在學習新事物。

 

最讓人嘆息的莫過於一個人固步自封,堅持用同樣的方式,或同樣的技術工作多年,還覺得沒有必要學習新知識,或者嘗試新東西。

 

我經常聽到“我想使用A語言,因爲B語言我操作得不太溜”,我可以理解這一點,但或許B語言就是更適合這個問題的陳述呢?或者是其他隊友都擅長B語言,還可能瞭解一種語言的語法和技巧在軟件工程中並沒那麼重要,重要的是思維過程和對系統的理解,以及它各個部分是如何相互作用的……我們總是可以在StackOverflow上查找語法或技巧。

 

更不用說,學習新的東西也意味着新的體驗和新的思考方式。新的角度總是應該受到歡迎的。

 

來源:Pexels

有全局觀念

 

這有時直接關係到個人在公司能呆多久,我共事過的最好的資深工程師,都能夠在腦海中對整個系統有一個詳細的認知。因此他們能快速理解一個功能可不可以以及如何實現,甚至能更進一步,快速確定是什麼導致了缺陷。

 

我曾經的有個隊友,我們一起處理一個bug的時候,他看都不看代碼就能直接告訴我,可能是第二十五行的文件A或第四十七行的文件B有問題。太神奇了。

 

這個例子可遇不可求,但對系統有一個整體把控的好處不言自明。

 

分享知識

 

我始終相信資深工程師最重要的責任之一就是幫助團隊成員,讓他們儘可能快的提升自我。

 

這包括但不限於:

 

·       和隊內其他開發人員一起編寫程序,確保自己不只是團隊的能力儲備庫。

·       執行復雜的任務時,與團隊中的其他人分享解決方案,這個過程可能在單獨會議上進行。(許多團隊經常在電話會議結束時進行知識共享,以分享他們學到的或團隊需要知道的東西)

·       知道讓隊友在掙扎中學習和支持他們之間的區別,同時平衡好自己的態度,讓隊友感受到自信而不是不足。

其實我認爲資深工程師讓初級工程師獨立完成某項工作後,要儘可能少地通過非個人化的代碼審查進行教學。

 

有共情力

 

最後一點,也是個人認爲最重要的,就是一個資深工程師一定要有共情能力。

 

要理解隊友在盡他們的全力嘗試。每個人都還在學習,並且要一直學習下去,包括你自己。不要做一個沒有感情的代碼審查員,要看到隊友想法的相關性和潛力。這些行爲別人沒法教,想要建立一個充滿信任的團隊,讓每個人都感到安全,這還有很長的路要走。

 

彼此信任的團隊可以成就很多。

 

來源:Pexels

希望當我說“8年以上的工作經驗並不能讓一個資深人員變得資深”時,不會有人誤解。我確實相信經歷是十分重要且有價值的。但我也相信從資深工程師的位置開始,個人軟實力開始變得非常重要,我想在文章中傳達的是這一點。這些技能應該是我們這一行的每個人一直在努力學習的東西,也許有一天工作描述將不僅僅是白板面試和8年以上經驗,而是一些能夠對團隊產生更大影響的東西。

 

當然,這只是筆者個人的一點看法,如果你有什麼自己的建議,歡迎在評論區分享給大家喲~

推薦閱讀專題

留言點贊發個朋友圈

我們一起分享AI學習與發展的乾貨

編譯組:劉鑑楠、王品一

相關鏈接:

https://levelup.gitconnected.com/8-years-of-experience-isnt-the-definition-of-a-senior-software-engineer-f3ed904e3bc9

如轉載,請後臺留言,遵守轉載規範

推薦文章閱讀

ACL2018論文集50篇解讀

EMNLP2017論文集28篇論文解讀

2018年AI三大頂會中國學術成果全鏈接

ACL2017論文集:34篇解讀乾貨全在這裏

10篇AAAI2017經典論文回顧

長按識別二維碼可添加關注

讀芯君愛你

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章