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