從菜鳥工程師到大神,決不是光靠累積年資就能辦到的

8670196729_282416e67c_z

工作了五年的工程師,算不算高級開發者?歸類開發者是菜鳥、中堅或神人,不是以工作年資判別,因為經驗這種東西,其實千金難換,但又可能一文不值。

我們現在工作的行業很奇怪。明明每年都有新的從業人員湧入人力市場,但企業依舊訴苦自己迫切需要大量的開發。這種問題存在已久,而且已經越發嚴峻。

開發者這個行業非常年輕,也面臨著很嚴重的人才短缺問題。大部分的軟體發展項目無疾而終,原因是後期開支過於龐大。那些行業裡的大佬是怎麼建議我們的,他們說「世界上永遠存在解決問題的辦法,但我們還是會遇到各種難題。因為除非我們真正去嘗試解決,否則永遠不知道哪種方法奏效。」

認識一個現實吧,當你從事開發工作三年以上,就可以稱呼自己為「高級開發者」。但實際上,有些人只是在這個位置上混三年,而他們只是虛有其表,水準嚴重不符合職位。

這確實是我對同行的評語。

首先,根據知識和經驗把人分為初級開發者、中級開發者,和高級開發者,這是非常武斷的分類。有些人可能只是在一個位置上混了十年,然而他的成長甚至沒有另一個人一年所學到和經驗多。

  • 開發者的高速成長期:

身為一個工程師,我們生活在一個 IT 系統越發複雜且多變化的時代。有時候執行一個簡單的開源專案,都需要精準定義並耗費大量時間專注任務。尤其是當你身為一個新進工程師,或者對手下的資料庫還很陌生的時候。

菜鳥工程師很難當。你可能剛從一個還不錯的大學畢業,你覺得你已經掌握了基本的常識。但突然間,你在工作上面臨的是另一套嶄新的知識。在很長時間內,你都對自己所要做的工作沒有任何頭緒。而對於上司提出的要求,你似乎只能妥協,而且沒辦法作出有效質疑。

在這個階段,你必須要做的是專注。而且盡可能地放開心胸,去努力學習。初級開發者在工作之初,需要大量的練習,指導、監管,以及需要一個能説明他們的老師。缺乏以上的任何條件,初級開發者都很難很難邁過這個初學者門檻。

我最近遇到一個傢伙,他已經有十年的軟體構造經驗,但是我很遺憾地發現,他的真正水準依舊只是初級開發者。你可以說這個階段,是戰略上的積累狀態,但就是要學習加積累,積累再學習,缺一不可。

初級開發者必須要專注代碼本身,在這個階段,不要分心想任何其他亂七八糟的事情。在開發一個專案時,如果身為工程師想的是「我想讓自己的代碼在別人眼裡看起來漂漂亮亮的」,而不是「我做的東西應該以用戶感受第一」,那麼他本身就是一個初級開發。

一個好的開發者可以出色地完成任務,而且不僅如此,他們能以較短時間出色完成任何,後期也會維護好。

  • 中級開發者的瓶頸期間

當一個開發者脫離菜鳥階段成長為中級開發者時,他們能夠在專案失敗時反省整個過程(通常,他們會看自己所做工作部分)。而且會意識到,比起匆匆忙忙埋頭苦幹完成任務,應該在專案最初就建立起一些規矩。甚至於如果最開始有人指正他們,整個專案就能在最初避免走向失敗。

而中級開發者還會體驗另一個獨特心理過程,那就是當他們回首一年前的工作。發現儘管當時認為「哎呦,自己做的還不錯」,但現在會發現「這都什麼玩意」啊。

一個中級開發者是有能力通過以往經驗、文本資料、專案團隊討論等方式,摸索出「正確方法」做事的人。在這個階段,學習構建軟體的理論比學習構建代碼更重要(後者應該在學校就掌握了)。

另一方面,中級開發者假如自作主張起來,造成的危害比初級開發者更大。初級開發者只會堆砌演算法,一個好的中級開發者努力方向是「模式設計」和「領域驅動設計(Domain Driven Design)」。這些技能是他們搭造某個系統的必備過程,學習完這些理論知識如果靈活運用,可以讓他們更好地構造項目。但如果僵硬使用,也會危害整個項目。

有的時候,讓一名中級開發者搭造系統,他耗費的時間可能比初級開發者更長,而且更糟的情況是他可能帶整個團隊走向迷途。很可悲的是,很多專案開發之所以走向失敗,因為領隊者自己只是一個中級開發者,他們缺乏和高級開發者工作的珍貴經驗。團隊領導自己,而且團隊裡其他人都沒有意識到這點。

中級開發者很清楚自己在團隊中的角色,能認識到他們為團隊工作帶來的價值。一個好的中級開發者知道代碼是用來解決問題的,而不是用來終結問題的。然而,中級開發者總容易陷入一種認知上的金字塔,那就是他們會遵循一些「正確的方式」去解決問題。

一個好的中級開發者需要少而精的監管。他們在代碼構造方向非常可靠,而且會在討論設計的過程中發揮重要作用。中級開發者是團隊中的「發動機」。但是,如果進一步的指導和更高級別的監管仍然是必不可少。

  • 高級,甚至是大神開發者需要滿足的條件

一個高級開發者,不誇張地說,他能記住自己每次的錯誤。他們甚至能在設計或者編寫代碼的時候,就能預見到很多失敗。他們會對錯誤進行非常敏銳地回饋,用一種誠實的方法去評估自己的成功和失敗。身為高級開發者,他會更傾向於熱愛複雜問題,但會癡迷於簡潔地解決它。

高級開發者不會給其他開發者劃分等級。與之相比,他更多的是理解。因為理解,所以體會每個人在每個階段都有長處和短處。而他們也比別人更瞭解自己的長處和短處,力求把自己的優勢最大化。

一個高級開發者會懂得,所有理論基礎都有背景支持。他們不會執著於「對的方式」去搭造軟體,而是把理論靈活運用於實際,理論可以變通用於為客戶、團隊和組織需要服務的工具。

高級開發者會在專案過程中,設身處地瞭解客戶想要什麼樣的工作結果,以及他們的喜好。畢竟這些東西,比開發者個人的偏好和成功更重要。他們永遠不會說「那不是我的工作」,也永遠不會推卸任務和責任。

資深開發者很清楚,他們的工作是為了客戶提供解決方案,而不是埋頭寫代碼。一位資深開發者永遠會把自己團隊能給顧客帶來多少價值,放在考核標準。而不是把自己的努力和客戶需求放在對等的 PK 賽場裡。

誠然,因為這是一份工作,所以中間的過程總會非常枯燥和無聊。但資深開發者會退一步,思考怎麼能解決和打破這些無聊的問題。他們會評估本源問題,直接解決它。或者他們會把枯燥情緒放在旁邊,修復日常必須要面對的問題。

資深開發者也會懂得團隊工作的高效。沒有人能自己做一切工作,他們會致力於提升自己團隊的效率。他們把提高團隊效率所做的行為,視為提高自己軟實力的一部分。

資深開發者懂得,領導力不僅僅只是權力,也不僅僅只是控制力。權力不是控制,而是一種服務意識。

如果你的團隊中缺乏高級開發者,那這個專案基本都無一例外走向失敗。擁有中級開發者能讓你做事情非常快,但是在工作中你會發現,專案不僅僅只是搭造和維護程式。最終你只能關閉網站,或者用比預期中更高昂的價格維護它。只有高級開發者能選擇技術和網站,而不是任由他們來傷害你。

很多需求很簡單,但大多數簡單需求後面,隱藏更複雜的需求。而現實情況是,我自己很厭倦以工作時限來分類開發者。是的,工作經驗能告訴你很多事情,但通常提供的都是無意義的資訊。甚至於這些資訊,也必須要結合很多背景來判斷。

更重要的是,我們行業裡需要新鮮的血液,需要招收那些剛從大學畢業充滿激情的年輕人。而即使為工程師分類,也不可僅僅只以工作經驗判斷。實際上我們招收工程師前,應該先思考團隊都需要那些人才。畢竟,我們招收的人才是為團隊服務。當你招聘到錯誤的人選,不過是給團隊和專案幫倒忙。

(本文獲《TECH2IPO》授權刊登轉載,譯者/創見 假冒愛麗絲,圖片來源: GoToVan CC Licensed,未經授權請勿轉載。)