細說高級程序員的幾個成長階段
軟體開發是一個奇怪的行業,市場遠遠供不應求。這是一個已經存在多年的問題,而且隨著時間的流逝,愈演愈烈。
我們嚴重缺乏能夠滿足需求的人才。這個行業相當年輕。大多數軟體項目是失敗的。幾乎所有的項目都會超出預算。我們解決問題的最佳指導方針可以歸結為——「用一些通用方法去解決問題,當然這些方法常常不管用,於是,唯一能做的就是不斷地嘗試,逐個看看是否奏效」。
現在我們把淫浸代碼時間超過3年的開發人員稱為「高級開發人員」。這些人通常把持領導崗位,最終做出來的東西,你懂的——非常糟糕。
軟體開發人員的成長階段
作為程序員,我們生活在複雜的系統和變數世界中。可以這麼說,即使是執行一個簡單的,定義明確的,重點突出的任務,都令人難以置信的難,尤其是如果你對你手頭的工具,或者是你正在工作的代碼庫不是那麼有經驗的話。
初級程序員
初級開發人員是這樣的,剛從學校出來,就像坐井觀天中的青蛙一樣,自認為什麼都會。突然間,你發現自己面對的問題,靠學校中的那點知識是遠遠不夠的。問題要更複雜,更凌亂,沒有理論上說的那麼純粹。你正處於放棄還是堅持的分叉路口,你不知道該怎麼辦。
對策就是專心致志,專心致志地竭盡全力學習。初級開發人員需要大量的指導、監督和輔導,否則他們將會在這一階段呆上很長一段時間。因此,實際上你也可以將這一階段視為策略和日常技術的吸收消化時期。
初級開發人員關注代碼,而不注重開發,他們不明白兩者之間的區別。如果一個程序員表示「要是代碼不需要面向所有用戶,那他們會更喜歡編碼」,那麼我可以判斷這是一個初級開發人員。
一個優秀的初級開發人員給定一個已知任務之後,就能夠迅速良好地執行。
中級開發人員逐漸能夠意識到失敗(通常是他們自己的失敗)模式,並認識到比起實際構建匆匆忙忙去做重點任務其實所需要的時間和精力更多,並且也不會因為有人說要改一改而一下子垂頭喪氣。他們也經歷過自以為寫出了引以為豪的內容,實際上證明是垃圾的悲慘遭遇。
中級程序員
中級開發人員尋尋覓覓於用正確的方法去構建,去解決問題,他們會通過實驗、文獻和與其他程序員的討論去發現這些正確的方法。這實際上已經是學習軟體架構的水準,而不再是構建代碼(我們在學校里學的就是這個)水平。
沒有受到監督的中級開發人員構建的系統之所以失敗的原因和初級開發人員的失敗原因截然不同。初級開發人員會構建一堆稍微有點用的演算法。而優秀的中級開發人員會跳出《Design Patterns》和《Domain Driven Design》的禁錮。雖然這些都是學習構建大型OO系統的好書,但是直接應用理論只會導致死板的設計結果,不重要的地方靈活多變,重要的地方卻又死板無法更改。
你可以信任中級開發人員構建的系統,他們的系統毫無疑問比初級開發人員做的要好,但是時間久了,依然會有各種問題出現,成為攔路虎。一個可悲的事實是,絕大多數高級開發人員,甚至團隊領導者其實都還只是——中級開發人員。當然,大多數人都沒有這樣的自我覺悟,原因是他們根本沒有和更高水平的人一起工作過。
一個優秀的中級開發人員應該懂得使用代碼來解決問題只是一種手段而不是目的。然而,他們仍然深愛著純粹的設計,仍然渴望尋求所謂「正確的方式」來構建軟體。
優秀的中級開發人員依然需要少量的監管。毫無疑問,他們能夠提升代碼設計,並在設計討論中發揮重要作用。他們是開發團隊中的主力。但是,對於他們,進一步的指導和更高層次的監管依然至關重要。
高級程序員
高級開發人員熟悉失敗。他們已經經歷過編寫的代碼在低於設計和超越設計的情況下都失敗的情況。他們深思熟慮,在面對問題時,能夠心智成熟地評估成功與失敗。高級開發人員已經跳出了中級開發人員深愛的複雜性,開始沉迷於簡單。
高級開發人員悉知自己的長處和短處,力爭儘可能地揚長避短。
高級開發人員深知理論聯繫實際的重要。他們明白,世上沒有所謂的構建軟體的「正確方式」,建立良好軟體的唯一途徑是要將理論適應客戶、代碼庫、團隊、工具和組織的需求。
高級開發人員理解並權衡領域涉及的一切,同時會思考如何去支持設計模式、庫、框架和流程。
高級開發人員不僅僅了解自我,還知曉組織和客戶的工作方式和價值觀,以及對於組織和客戶而言成功相關的重要和不重要的因素。一旦出現問題,高級開發人員會想方設法地去解決。「這不是我的工作」——他們永遠,永遠也不會說這樣的話語。
高級開發人員心裡明白,他們的工作應該是提供解決問題的辦法,而不是寫代碼。
不像中級開發人員辛苦耕耘於枯燥的日常工作,高級開發人員會退一步,去思考是什麼導致了這些無聊的工作。他們會評估修復根本問題的成本,要麼直接解決這些問題,要麼研究起來以便於最終徹底解決。
高級開發人員明白,單槍匹馬是搞不定項目的。他們的主要作用是幫助團隊變得更好,同時爭取個人共同進步。
高級開發人員深刻理解,領導一職代表的不是權力,而是授權,不是方向,而是服務。
如果你的團隊中一個高級開發人員都沒有起到領導作用,那麼你的項目是註定要失敗的。一隊偉大的中級開發人員固然能讓你走得很遠,但是他們構建的軟體的好日子卻是屈指可數的,其最終結果要麼是關門大吉,要麼是高風險高成本的重寫。高級開發人員才是唯一能勝任選擇技術和平台的人。
簡單粗暴的分類方法
我非常討厭現在流行的根據工作經驗年限來給程序員劃分檔次的方法。多年的經驗的確能讓你增加見識,但這都是一些幾乎毫無意義的背景信息。
更重要的是,我們的行業需要剛從大學畢業活力四射的年輕人,也需要那些有著15—20年工作經驗的老程序員。我們應該從團隊和企業的角度來思考人才組成。
希望本文能對你有用,謝謝。
譯文鏈接:http://www.codeceo.com/article/the-role-of-a-senior-developer.html
英文原文:http://mattbriggs.net/blog/2015/06/01/the-role-of-a-senior-developer/
翻譯作者:碼農網 – 王國峰
點擊展開全文
※為了徹底理解深度學習,我們到底需要掌握哪些數學知識呢?答案在本文
※程序媛眼中的程序員,piupiu
※深度學習已成功應用於這三大領域
※敏捷測試中的Web測試優秀實踐
TAG:CSDN |
※男孩成長的三個重要階段。
※孩子的成長階段
※不同的成長階段
※程序員的成長焦慮
※一年級小虎哥的成長片段
※雷神成長的5個階段,第2個階段的他曾毀滅了復聯,統治了地球
※火影忍者雛田的八個成長階段,哪個階段才是雛田最美的年紀?
※三種人生的進階,五種成長的修鍊
※一拳:成長係數逆天的幾個角色,從打不過虎級到單挑龍級!
※成長的過程就是摔跤的過程
※七龍珠:角色成長史,每一個階段都是回憶,看到最後淚目了
※超級個體成長記
※12份進階成長疏導課程簡介……
※十二月底事業上聲勢高漲,快速成長的幾個星座!
※心理學:人類心理成長的4個階段,從人到神,你目前到哪一階段了?
※心理學:心理成長的4個階段,從人到神,你目前到哪一階段了?
※每一次歷練都是一種成長
※從程序員到架構師的成長錦囊
※成長的5個底層邏輯,這位北大教授講透了
※一個人真正成長的三種跡象