高級程序員成長一般來說需要這么幾個階段
軟件開發(fā)是一個奇怪的行業(yè),市場遠(yuǎn)遠(yuǎn)供不應(yīng)求。這是一個已經(jīng)存在多年的問題,而且隨著時間的流逝,愈演愈烈。
我們嚴(yán)重缺乏能夠滿足需求的人才。這個行業(yè)相當(dāng)年輕。大多數(shù)軟件項目是失敗的。幾乎所有的項目都會超出預(yù)算。我們解決問題的***指導(dǎo)方針可以歸結(jié)為——“用一些通用方法去解決問題,當(dāng)然這些方法常常不管用,于是,唯一能做的就是不斷地嘗試,逐個看看是否奏效”。
現(xiàn)在我們把淫浸代碼時間超過3年的開發(fā)人員稱為“高級開發(fā)人員”。這些人通常把持領(lǐng)導(dǎo)崗位,最終做出來的東西,你懂的——非常糟糕。
軟件開發(fā)人員的成長階段
作為程序員,我們生活在復(fù)雜的系統(tǒng)和變量世界中??梢赃@么說,即使是執(zhí)行一個簡單的,定義明確的,重點突出的任務(wù),都令人難以置信的難,尤其是如果你對你手頭的工具,或者是你正在工作的代碼庫不是那么有經(jīng)驗的話。
初級程序員
初級開發(fā)人員是這樣的,剛從學(xué)校出來,就像坐井觀天中的青蛙一樣,自認(rèn)為什么都會。突然間,你發(fā)現(xiàn)自己面對的問題,靠學(xué)校中的那點知識是遠(yuǎn)遠(yuǎn)不夠的。問題要更復(fù)雜,更凌亂,沒有理論上說的那么純粹。你正處于放棄還是堅持的分叉路口,你不知道該怎么辦。
對策就是專心致志,專心致志地竭盡全力學(xué)習(xí)。初級開發(fā)人員需要大量的指導(dǎo)、監(jiān)督和輔導(dǎo),否則他們將會在這一階段呆上很長一段時間。因此,實際上你也可以將這一階段視為策略和日常技術(shù)的吸收消化時期。
初級開發(fā)人員關(guān)注代碼,而不注重開發(fā),他們不明白兩者之間的區(qū)別。如果一個程序員表示“要是代碼不需要面向所有用戶,那他們會更喜歡編碼”,那么我可以判斷這是一個初級開發(fā)人員。
一個優(yōu)秀的初級開發(fā)人員給定一個已知任務(wù)之后,就能夠迅速良好地執(zhí)行。
中級開發(fā)人員逐漸能夠意識到失?。ㄍǔJ撬麄冏约旱氖。┠J剑⒄J(rèn)識到比起實際構(gòu)建匆匆忙忙去做重點任務(wù)其實所需要的時間和精力更多,并且也不會因為有人說要改一改而一下子垂頭喪氣。他們也經(jīng)歷過自以為寫出了引以為豪的內(nèi)容,實際上證明是垃圾的悲慘遭遇。
中級程序員
中級開發(fā)人員尋尋覓覓于用正確的方法去構(gòu)建,去解決問題,他們會通過實驗、文獻(xiàn)和與其他程序員的討論去發(fā)現(xiàn)這些正確的方法。這實際上已經(jīng)是學(xué)習(xí)軟件架構(gòu)的水準(zhǔn),而不再是構(gòu)建代碼(我們在學(xué)校里學(xué)的就是這個)水平。
沒有受到監(jiān)督的中級開發(fā)人員構(gòu)建的系統(tǒng)之所以失敗的原因和初級開發(fā)人員的失敗原因截然不同。初級開發(fā)人員會構(gòu)建一堆稍微有點用的算法。而優(yōu)秀的中級 開發(fā)人員會跳出《Design Patterns》和《Domain Driven Design》的禁錮。雖然這些都是學(xué)習(xí)構(gòu)建大型OO系統(tǒng)的好書,但是直接應(yīng)用理論只會導(dǎo)致死板的設(shè)計結(jié)果,不重要的地方靈活多變,重要的地方卻又死板無 法更改。
你可以信任中級開發(fā)人員構(gòu)建的系統(tǒng),他們的系統(tǒng)毫無疑問比初級開發(fā)人員做的要好,但是時間久了,依然會有各種問題出現(xiàn),成為攔路虎。一個可悲的事實 是,絕大多數(shù)高級開發(fā)人員,甚至團(tuán)隊***其實都還只是——中級開發(fā)人員。當(dāng)然,大多數(shù)人都沒有這樣的自我覺悟,原因是他們根本沒有和更高水平的人一起工 作過。
一個優(yōu)秀的中級開發(fā)人員應(yīng)該懂得使用代碼來解決問題只是一種手段而不是目的。然而,他們?nèi)匀簧類壑兇獾脑O(shè)計,仍然渴望尋求所謂“正確的方式”來構(gòu)建軟件。
優(yōu)秀的中級開發(fā)人員依然需要少量的監(jiān)管。毫無疑問,他們能夠提升代碼設(shè)計,并在設(shè)計討論中發(fā)揮重要作用。他們是開發(fā)團(tuán)隊中的主力。但是,對于他們,進(jìn)一步的指導(dǎo)和更高層次的監(jiān)管依然至關(guān)重要。
高級程序員
高級開發(fā)人員熟悉失敗。他們已經(jīng)經(jīng)歷過編寫的代碼在低于設(shè)計和超越設(shè)計的情況下都失敗的情況。他們深思熟慮,在面對問題時,能夠心智成熟地評估成功與失敗。高級開發(fā)人員已經(jīng)跳出了中級開發(fā)人員深愛的復(fù)雜性,開始沉迷于簡單。
高級開發(fā)人員悉知自己的長處和短處,力爭盡可能地?fù)P長避短。
高級開發(fā)人員深知理論聯(lián)系實際的重要。他們明白,世上沒有所謂的構(gòu)建軟件的“正確方式”,建立良好軟件的唯一途徑是要將理論適應(yīng)客戶、代碼庫、團(tuán)隊、工具和組織的需求。
高級開發(fā)人員理解并權(quán)衡領(lǐng)域涉及的一切,同時會思考如何去支持設(shè)計模式、庫、框架和流程。
高級開發(fā)人員不僅僅了解自我,還知曉組織和客戶的工作方式和價值觀,以及對于組織和客戶而言成功相關(guān)的重要和不重要的因素。一旦出現(xiàn)問題,高級開發(fā)人員會想方設(shè)法地去解決。“這不是我的工作”——他們永遠(yuǎn),永遠(yuǎn)也不會說這樣的話語。
高級開發(fā)人員心里明白,他們的工作應(yīng)該是提供解決問題的辦法,而不是寫代碼。
不像中級開發(fā)人員辛苦耕耘于枯燥的日常工作,高級開發(fā)人員會退一步,去思考是什么導(dǎo)致了這些無聊的工作。他們會評估修復(fù)根本問題的成本,要么直接解決這些問題,要么研究起來以便于最終徹底解決。
高級開發(fā)人員明白,單槍匹馬是搞不定項目的。他們的主要作用是幫助團(tuán)隊變得更好,同時爭取個人共同進(jìn)步。
高級開發(fā)人員深刻理解,領(lǐng)導(dǎo)一職代表的不是權(quán)力,而是授權(quán),不是方向,而是服務(wù)。
如果你的團(tuán)隊中一個高級開發(fā)人員都沒有起到領(lǐng)導(dǎo)作用,那么你的項目是注定要失敗的。一隊偉大的中級開發(fā)人員固然能讓你走得很遠(yuǎn),但是他們構(gòu)建的軟件 的好日子卻是***的,其最終結(jié)果要么是關(guān)門大吉,要么是高風(fēng)險高成本的重寫。高級開發(fā)人員才是唯一能勝任選擇技術(shù)和平臺的人。
簡單粗暴的分類方法
我非常討厭現(xiàn)在流行的根據(jù)工作經(jīng)驗?zāi)晗迊斫o程序員劃分檔次的方法。多年的經(jīng)驗的確能讓你增加見識,但這都是一些幾乎毫無意義的背景信息。
更重要的是,我們的行業(yè)需要剛從大學(xué)畢業(yè)活力四射的年輕人,也需要那些有著15—20年工作經(jīng)驗的老程序員。我們應(yīng)該從團(tuán)隊和企業(yè)的角度來思考人才組成。
希望本文能對你有用,謝謝。