一個大神開發(fā)者的使命感究竟應(yīng)該是什么
“工作了五年的工程師,算不算高級開發(fā)者?歸類開發(fā)者不是簡單地看工作年限,因為經(jīng)驗這種東西千金難換但又一文不值。”
我們現(xiàn)在工作的行業(yè)很奇怪。明明每年都有新的從業(yè)人員涌入人才市場,但企業(yè)依舊訴苦自己迫切需要大量的開發(fā)。這種問題存在已久,而且已經(jīng)越發(fā)嚴峻。
開發(fā)者這個行業(yè)非常年輕,也面臨著很嚴重的人才短缺問題。大部分的軟件開發(fā)項目無疾而終,原因是后期開支過于龐大。那些行業(yè)里的大佬是怎么建議我們的,他們說「世界上永遠存在解決問題的辦法,但我們還是會遇到各種難題。因為除非我們真正去嘗試解決,否則永遠不知道哪種方法奏效。」
認識一個現(xiàn)實吧,當(dāng)你從事開發(fā)工作三年以上,就可以稱呼自己為「高級開發(fā)者」。但實際上,有些人只是在這個位置上混三年,而他們只是虛有其表,水平嚴重不符合職位。
這確實是我對同行的評語。
首先,根據(jù)知識和經(jīng)驗把人分為初級開發(fā)者、中級開發(fā)者,和高級開發(fā)者,這是非常一刀切地分類。有些人可能只是在一個位置上混了十年,然而他的成長甚至沒有另一個人一年所學(xué)到和經(jīng)驗多。
開發(fā)者的高速成長期:
身為一個程序員,我們生活在一個 IT 系統(tǒng)越發(fā)復(fù)雜且多變化的時代。有時候執(zhí)行一個簡單的開源項目,都需要精準定義并耗費大量時間專注任務(wù)。尤其是當(dāng)你身為一個新晉程序員,或者對手下的數(shù)據(jù)庫還很陌生的時候。
菜鳥程序員很難當(dāng)。你可能剛從一個還不錯的大學(xué)畢業(yè),你覺得你已經(jīng)掌握了基本的常識。但突然間,你在工作上面臨的是另一套嶄新的知識。在很長時間內(nèi),你都對自己所要做的工作沒有任何頭緒。而對于上司提出的要求,你似乎只能妥協(xié),而且沒辦法作出有效質(zhì)疑。
在這個階段,你必須要做的是專注。而且盡可能地放開心胸,去努力學(xué)習(xí)。初級開發(fā)者在工作之初,需要大量的練習(xí),指導(dǎo)、監(jiān)管,以及需要一個能幫助他們的老師。缺乏以上的任何條件,初級開發(fā)者都很難很難邁過這個初學(xué)者門檻。
我最近遇到一個家伙,他已經(jīng)有十年的軟件構(gòu)造經(jīng)驗,但是我很遺憾地發(fā)現(xiàn),他的真實水平依舊只是初級開發(fā)者。你可以說這個階段,是戰(zhàn)略上的積累狀態(tài),但就是要學(xué)習(xí)加積累,積累再學(xué)習(xí),缺一不可。
初級開發(fā)者必須要專注代碼本身,在這個階段,不要分心想任何其他亂七八糟的事情。在開發(fā)一個項目時,如果身為程序員想的是「我想讓自己的代碼在別人眼里看起來漂漂亮亮的」,而不是「我做的東西應(yīng)該以用戶感受***」,那么他本身就是一個初級開發(fā)。
一個好的開發(fā)者可以出色地完成任務(wù),而且不僅如此,他們能以較短時間出色完成任何,后期也會維護好。
中級開發(fā)者的瓶頸期間
當(dāng)一個開發(fā)者脫離菜鳥階段成長為中級開發(fā)者時,他們能夠在項目失敗時反省整個過程(通常,他們會看自己所做工作部分)。而且會意識到,比起匆匆忙忙埋頭苦干完成任務(wù),應(yīng)該在項目最初就建立起一些規(guī)矩。甚至于如果最開始有人指正他們,整個項目就能在最初避免走向失敗。
而中級開發(fā)者還會體驗另一個獨特心理過程,那就是當(dāng)他們回首一年前的工作。發(fā)現(xiàn)盡管當(dāng)時認為「哎呦,自己做的還不錯」,但現(xiàn)在會發(fā)現(xiàn)「這都什么玩意」啊。
一個中級開發(fā)者是有能力通過以往經(jīng)驗、文本資料、項目團隊討論等方式,摸索出「正確方法」做事的人。在這個階段,學(xué)習(xí)構(gòu)建軟件的理論比學(xué)習(xí)構(gòu)建代碼更重要(后者應(yīng)該在學(xué)校就掌握了)。
另一方面,中級開發(fā)者假如自作主張起來,造成的危害比初級開發(fā)者更大。初級開發(fā)者只會堆砌算法,一個好的中級開發(fā)者努力方向是「模式設(shè)計」和「范疇驅(qū)動設(shè)計」。這些技能是他們搭造 OO 系統(tǒng)的必備過程,學(xué)習(xí)完這些理論知識如果靈活運用,可以讓他們更好地構(gòu)造項目。但如果僵硬使用,也會危害整個項目。
有的時候,讓一名中級開發(fā)者搭造系統(tǒng),他耗費的時間可能比初級開發(fā)者更長,而且更糟的情況是他可能帶整個團隊走向迷途。很可悲的是,很多項目開發(fā)之所以走向失敗,因為領(lǐng)隊者自己只是一個中級開發(fā)者,他們?nèi)狈透呒夐_發(fā)者工作的珍貴經(jīng)驗。團隊領(lǐng)導(dǎo)自己,而且團隊里其他人都沒有意識到這點。
中級開發(fā)者很清楚自己在團隊中起到的角色,能認識到他們給團隊工作帶來的價值。一個好的中級開發(fā)者知道代碼是用來解決問題的,而不是用來終結(jié)問題的。然而,中級開發(fā)者總?cè)菀紫萑胍环N認知上的金字塔,那就是他們會遵循一些「正確的方式」去解決問題。
一個好的中級開發(fā)者需要少而精的監(jiān)管。他們在代碼構(gòu)造方向非??煽浚視谟懻撛O(shè)計的過程中發(fā)揮重要作用。中級開發(fā)者是團隊中的「發(fā)動機」。但是,如果進一步的指導(dǎo)和更高級別的監(jiān)管仍然是必不可少。
高級,甚至是大神開發(fā)者需要滿足的條件
一個高級開發(fā)者,不夸張地說,他能記住自己每次的錯誤。他們甚至能在設(shè)計或者編寫代碼的時候,就能預(yù)見到很多失敗。他們會對錯誤進行非常敏銳地反饋,用一種誠實的方法去評估自己的成功和失敗。身為高級開發(fā)者,他會更傾向于熱愛復(fù)雜問題,但會癡迷于簡潔地解決它。
高級開發(fā)者不會給其他開發(fā)者劃分等級。與之相比,他更多的是懂得。因為懂得,所以理解每個人在每個階段都有長處和短處。而他們也比別人更了解自己的長處和短處,力求把自己的優(yōu)勢***化。
一個高級開發(fā)者會懂得,所有理論基礎(chǔ)都有背景支持。他們不會執(zhí)著于「對的方式」去搭造軟件,而是把理論靈活運用于實際,理論可以變通用于為客戶、團隊和組織需要服務(wù)的工具。
高級開發(fā)者會在項目過程中,設(shè)身處地了解客戶想要什么樣的工作結(jié)果,以及他們的喜好。畢竟這些東西,比開發(fā)者個人的偏好和成功更重要。他們永遠不會說「那不是我的工作」,也永遠不會推搡任務(wù)和責(zé)任。
資深開發(fā)者會懂得一件事,那就是他們的工作是為了客戶提供解決方案,而不是埋頭寫代碼。而一位資深開發(fā)者永遠會把自己團隊能給顧客帶來多少價值,放在考核標準。而不是把自己的努力和客戶需求放在對等的 PK 賽場里。
誠然,因為這是一份工作,所以中間的過程總會非??菰锖蜔o聊。但資深開發(fā)者會退一步,思考怎么能解決和打破這些無聊的問題。他們會評估本源問題,直接解決它?;蛘咚麄儠芽菰锴榫w放在旁邊,修復(fù)日常必須要面對的問題。
資深開發(fā)者也會懂得團隊工作的高效。沒有人能自己做一切工作,他們會致力于提升自己團隊的效率。他們把提高團隊效率所做的行為,視為提高自己軟實力的一部分。
資深開發(fā)者懂得,領(lǐng)導(dǎo)力不僅僅只是權(quán)力,也不僅僅只是控制力。權(quán)力不是交通棒,而是一種服務(wù)意識。
如果你的團隊中缺乏高級開發(fā)者,那這個項目基本都無一例外走向失敗。擁有中級開發(fā)者能讓你做事情非???,但是在工作中你會發(fā)現(xiàn),項目不僅僅只是搭造和維護程序。最終你只能關(guān)閉網(wǎng)站,或者用比預(yù)期中更高昂的價格維護它。只有高級開發(fā)者能選擇技術(shù)和網(wǎng)站,而不是任由他們來傷害你。
很多需求很簡單,但大多數(shù)簡單需求后面,隱藏更復(fù)雜的需求。
而現(xiàn)實情況是,我自己很厭倦以工作時限來分類開發(fā)者。是的,工作經(jīng)驗?zāi)芨嬖V你很多事情,但通常提供的都是無意義的信息。甚至于這些信息,也必須要結(jié)合很多背景來判斷。
更重要的是,我們行業(yè)里需要新鮮的血液,需要招收那些剛從大學(xué)畢業(yè)充滿激情的年輕人。而即使給程序員劃分種類,也不可僅僅只看工作經(jīng)驗。實際上我們招收程序員前,應(yīng)該先思考團隊都需要那些人才。畢竟,我們招收的人才是為團隊服務(wù)。當(dāng)你招聘到錯誤的人選,不過是給團隊和項目幫倒忙。
本文來源:mattbriggs 譯文創(chuàng)見首發(fā) 由TECH2IPO/創(chuàng)見 假冒愛麗絲編譯