軟件開(kāi)發(fā)是一個(gè)奇怪的行業(yè)枷恕,市場(chǎng)遠(yuǎn)遠(yuǎn)供不應(yīng)求党晋。這是一個(gè)已經(jīng)存在多年的問(wèn)題,而且隨著時(shí)間的流逝徐块,愈演愈烈未玻。
我們嚴(yán)重缺乏能夠滿足需求的人才。這個(gè)行業(yè)相當(dāng)年輕胡控。大多數(shù)軟件項(xiàng)目是失敗的扳剿。幾乎所有的項(xiàng)目都會(huì)超出預(yù)算。我們解決問(wèn)題的最佳指導(dǎo)方針可以歸結(jié)為——“用一些通用方法去解決問(wèn)題昼激,當(dāng)然這些方法常常不管用庇绽,于是,唯一能做的就是不斷地嘗試橙困,逐個(gè)看看是否奏效”瞧掺。
現(xiàn)在我們把淫浸代碼時(shí)間超過(guò)3年的開(kāi)發(fā)人員稱為“高級(jí)開(kāi)發(fā)人員”。這些人通常把持領(lǐng)導(dǎo)崗位凡傅,最終做出來(lái)的東西辟狈,你懂的——非常糟糕。
軟件開(kāi)發(fā)人員的成長(zhǎng)階段
作為程序員,我們生活在復(fù)雜的系統(tǒng)和變量世界中哼转∶魑矗可以這么說(shuō),即使是執(zhí)行一個(gè)簡(jiǎn)單的壹蔓,定義明確的亚隅,重點(diǎn)突出的任務(wù),都令人難以置信的難庶溶,尤其是如果你對(duì)你手頭的工具,或者是你正在工作的代碼庫(kù)不是那么有經(jīng)驗(yàn)的話懂鸵。
初級(jí)程序員
初級(jí)開(kāi)發(fā)人員是這樣的偏螺,剛從學(xué)校出來(lái),就像坐井觀天中的青蛙一樣匆光,自認(rèn)為什么都會(huì)套像。突然間,你發(fā)現(xiàn)自己面對(duì)的問(wèn)題终息,靠學(xué)校中的那點(diǎn)知識(shí)是遠(yuǎn)遠(yuǎn)不夠的夺巩。問(wèn)題要更復(fù)雜,更凌亂周崭,沒(méi)有理論上說(shuō)的那么純粹柳譬。你正處于放棄還是堅(jiān)持的分叉路口,你不知道該怎么辦续镇。
剛出入社會(huì)迷茫美澳。
對(duì)策就是專心致志,專心致志地竭盡全力學(xué)習(xí)摸航。初級(jí)開(kāi)發(fā)人員需要大量的指導(dǎo)制跟、監(jiān)督和輔導(dǎo),否則他們將會(huì)在這一階段呆上很長(zhǎng)一段時(shí)間酱虎。因此雨膨,實(shí)際上你也可以將這一階段視為策略和日常技術(shù)的吸收消化時(shí)期。
初級(jí)開(kāi)發(fā)人員關(guān)注代碼读串,而不注重開(kāi)發(fā)聊记,他們不明白兩者之間的區(qū)別。如果一個(gè)程序員表示“要是代碼不需要面向所有用戶爹土,那他們會(huì)更喜歡編碼”甥雕,那么我可以判斷這是一個(gè)初級(jí)開(kāi)發(fā)人員。
一個(gè)優(yōu)秀的初級(jí)開(kāi)發(fā)人員給定一個(gè)已知任務(wù)之后胀茵,就能夠迅速良好地執(zhí)行社露。
中級(jí)開(kāi)發(fā)人員逐漸能夠意識(shí)到失敗(通常是他們自己的失斍砟铩)模式峭弟,并認(rèn)識(shí)到比起實(shí)際構(gòu)建匆匆忙忙去做重點(diǎn)任務(wù)其實(shí)所需要的時(shí)間和精力更多附鸽,并且也不會(huì)因?yàn)橛腥苏f(shuō)要改一改而一下子垂頭喪氣。他們也經(jīng)歷過(guò)自以為寫出了引以為豪的內(nèi)容瞒瘸,實(shí)際上證明是垃圾的悲慘遭遇坷备。
剛剛整理了初級(jí)程序員到高級(jí)程序員的學(xué)習(xí)資料,需要的可以佳我的摳摳裙:前面776中間506后面197情臭,希望大家關(guān)注小編省撑,給小編動(dòng)力。
中級(jí)程序員
中級(jí)開(kāi)發(fā)人員尋尋覓覓于用正確的方法去構(gòu)建俯在,去解決問(wèn)題竟秫,他們會(huì)通過(guò)實(shí)驗(yàn)、文獻(xiàn)和與其他程序員的討論去發(fā)現(xiàn)這些正確的方法跷乐。這實(shí)際上已經(jīng)是學(xué)習(xí)軟件架構(gòu)的水準(zhǔn)肥败,而不再是構(gòu)建代碼(我們?cè)趯W(xué)校里學(xué)的就是這個(gè))水平。
沒(méi)有受到監(jiān)督的中級(jí)開(kāi)發(fā)人員構(gòu)建的系統(tǒng)之所以失敗的原因和初級(jí)開(kāi)發(fā)人員的失敗原因截然不同愕提。初級(jí)開(kāi)發(fā)人員會(huì)構(gòu)建一堆稍微有點(diǎn)用的算法馒稍。而優(yōu)秀的中級(jí)開(kāi)發(fā)人員會(huì)跳出《Design Patterns》和《Domain Driven Design》的禁錮。雖然這些都是學(xué)習(xí)構(gòu)建大型OO系統(tǒng)的好書浅侨,但是直接應(yīng)用理論只會(huì)導(dǎo)致死板的設(shè)計(jì)結(jié)果纽谒,不重要的地方靈活多變,重要的地方卻又死板無(wú)法更改仗颈。
你可以信任中級(jí)開(kāi)發(fā)人員構(gòu)建的系統(tǒng)佛舱,他們的系統(tǒng)毫無(wú)疑問(wèn)比初級(jí)開(kāi)發(fā)人員做的要好,但是時(shí)間久了挨决,依然會(huì)有各種問(wèn)題出現(xiàn)请祖,成為攔路虎。一個(gè)可悲的事實(shí)是脖祈,絕大多數(shù)高級(jí)開(kāi)發(fā)人員肆捕,甚至團(tuán)隊(duì)領(lǐng)導(dǎo)者其實(shí)都還只是——中級(jí)開(kāi)發(fā)人員。當(dāng)然盖高,大多數(shù)人都沒(méi)有這樣的自我覺(jué)悟慎陵,原因是他們根本沒(méi)有和更高水平的人一起工作過(guò)。
一個(gè)優(yōu)秀的中級(jí)開(kāi)發(fā)人員應(yīng)該懂得使用代碼來(lái)解決問(wèn)題只是一種手段而不是目的喻奥。然而席纽,他們?nèi)匀簧類?ài)著純粹的設(shè)計(jì),仍然渴望尋求所謂“正確的方式”來(lái)構(gòu)建軟件撞蚕。
有了一段經(jīng)歷润梯,就好知道怎么做了。
優(yōu)秀的中級(jí)開(kāi)發(fā)人員依然需要少量的監(jiān)管。毫無(wú)疑問(wèn)纺铭,他們能夠提升代碼設(shè)計(jì)寇钉,并在設(shè)計(jì)討論中發(fā)揮重要作用。他們是開(kāi)發(fā)團(tuán)隊(duì)中的主力舶赔。但是扫倡,對(duì)于他們,進(jìn)一步的指導(dǎo)和更高層次的監(jiān)管依然至關(guān)重要竟纳。
高級(jí)程序員
高級(jí)開(kāi)發(fā)人員熟悉失敗撵溃。他們已經(jīng)經(jīng)歷過(guò)編寫的代碼在低于設(shè)計(jì)和超越設(shè)計(jì)的情況下都失敗的情況。他們深思熟慮锥累,在面對(duì)問(wèn)題時(shí)征懈,能夠心智成熟地評(píng)估成功與失敗。高級(jí)開(kāi)發(fā)人員已經(jīng)跳出了中級(jí)開(kāi)發(fā)人員深愛(ài)的復(fù)雜性揩悄,開(kāi)始沉迷于簡(jiǎn)單。
高級(jí)開(kāi)發(fā)人員悉知自己的長(zhǎng)處和短處鬼悠,力爭(zhēng)盡可能地?fù)P長(zhǎng)避短删性。
高級(jí)開(kāi)發(fā)人員深知理論聯(lián)系實(shí)際的重要。他們明白焕窝,世上沒(méi)有所謂的構(gòu)建軟件的“正確方式”蹬挺,建立良好軟件的唯一途徑是要將理論適應(yīng)客戶、代碼庫(kù)它掂、團(tuán)隊(duì)巴帮、工具和組織的需求。
高級(jí)開(kāi)發(fā)人員理解并權(quán)衡領(lǐng)域涉及的一切虐秋,同時(shí)會(huì)思考如何去支持設(shè)計(jì)模式榕茧、庫(kù)、框架和流程客给。
高級(jí)開(kāi)發(fā)人員不僅僅了解自我用押,還知曉組織和客戶的工作方式和價(jià)值觀,以及對(duì)于組織和客戶而言成功相關(guān)的重要和不重要的因素靶剑。一旦出現(xiàn)問(wèn)題蜻拨,高級(jí)開(kāi)發(fā)人員會(huì)想方設(shè)法地去解決∽“這不是我的工作”——他們永遠(yuǎn)缎讼,永遠(yuǎn)也不會(huì)說(shuō)這樣的話語(yǔ)。
高級(jí)開(kāi)發(fā)人員心里明白坑匠,他們的工作應(yīng)該是提供解決問(wèn)題的辦法血崭,而不是寫代碼。
當(dāng)你變成老司機(jī)的時(shí)候,就沒(méi)有什么做不到的了功氨。
不像中級(jí)開(kāi)發(fā)人員辛苦耕耘于枯燥的日常工作序苏,高級(jí)開(kāi)發(fā)人員會(huì)退一步,去思考是什么導(dǎo)致了這些無(wú)聊的工作捷凄。他們會(huì)評(píng)估修復(fù)根本問(wèn)題的成本忱详,要么直接解決這些問(wèn)題,要么研究起來(lái)以便于最終徹底解決跺涤。
高級(jí)開(kāi)發(fā)人員明白匈睁,單槍匹馬是搞不定項(xiàng)目的。他們的主要作用是幫助團(tuán)隊(duì)變得更好桶错,同時(shí)爭(zhēng)取個(gè)人共同進(jìn)步航唆。
高級(jí)開(kāi)發(fā)人員深刻理解,領(lǐng)導(dǎo)一職代表的不是權(quán)力院刁,而是授權(quán)糯钙,不是方向,而是服務(wù)退腥。
如果你的團(tuán)隊(duì)中一個(gè)高級(jí)開(kāi)發(fā)人員都沒(méi)有起到領(lǐng)導(dǎo)作用任岸,那么你的項(xiàng)目是注定要失敗的。一隊(duì)偉大的中級(jí)開(kāi)發(fā)人員固然能讓你走得很遠(yuǎn)狡刘,但是他們構(gòu)建的軟件的好日子卻是屈指可數(shù)的享潜,其最終結(jié)果要么是關(guān)門大吉,要么是高風(fēng)險(xiǎn)高成本的重寫嗅蔬。高級(jí)開(kāi)發(fā)人員才是唯一能勝任選擇技術(shù)和平臺(tái)的人剑按。
簡(jiǎn)單粗暴的分類方法
我非常討厭現(xiàn)在流行的根據(jù)工作經(jīng)驗(yàn)?zāi)晗迊?lái)給程序員劃分檔次的方法。多年的經(jīng)驗(yàn)的確能讓你增加見(jiàn)識(shí)澜术,但這都是一些幾乎毫無(wú)意義的背景信息艺蝴。
更重要的是,我們的行業(yè)需要?jiǎng)倧拇髮W(xué)畢業(yè)活力四射的年輕人鸟废,也需要那些有著15—20年工作經(jīng)驗(yàn)的老程序員吴趴。我們應(yīng)該從團(tuán)隊(duì)和企業(yè)的角度來(lái)思考人才組成。
希望本文能對(duì)你有用侮攀,謝謝锣枝。