軟件開(kāi)發(fā)人員的5個(gè)能力:如何識(shí)別好的程序員
譯文在不同的時(shí)期,我都在努力地學(xué)習(xí)編程,但是我仍不認(rèn)為這是一個(gè)優(yōu)秀開(kāi)發(fā)者的標(biāo)志。一個(gè)有天賦的開(kāi)發(fā)人員,從9到5提供110%的清晰、精確、可維護(hù)的代碼,在休息時(shí)間享受午餐,回到家離開(kāi)鍵盤(pán)釋放自我,這會(huì)有什么問(wèn)題呢?
我認(rèn)為,開(kāi)發(fā)人員應(yīng)具備的五個(gè)關(guān)鍵能力。
要了解他們?yōu)槭裁催@么重要,想想軟件是什么:它不是一個(gè)無(wú)限的系列式陳述,也不是一個(gè)任意調(diào)用的API,更不僅僅是復(fù)制粘貼的產(chǎn)物。相反,它是一個(gè)由代碼層次結(jié)構(gòu)組成的網(wǎng)格,很少?gòu)?fù)制代碼,主要是復(fù)制格式(不一定是GOF模式,也可以是“延遲初始化”“模式驅(qū)動(dòng)代碼生成”或者“XML腳本”)。它只有在滿足業(yè)務(wù)需求和有足夠可操作性的情況下才能發(fā)揮作用。因此,我們需要評(píng)估能夠讓軟件開(kāi)發(fā)人員達(dá)到這些目標(biāo)的能力。
話不多說(shuō),開(kāi)始!
1、分析能力:結(jié)構(gòu)化、清晰、有批判思維的思考者和問(wèn)題解決者
很多人誤把鎮(zhèn)定、自信、流利的演說(shuō)能力歸結(jié)為智商。因此,我們需要對(duì)開(kāi)發(fā)者的智力特征非常清晰。軟件的一切都是關(guān)于功能和結(jié)構(gòu)分解,因此,我認(rèn)為智力的關(guān)鍵是天生的、后天培養(yǎng)的或者靠意志力進(jìn)行的分析能力。一個(gè)具有分析能力的人會(huì)多角度考慮問(wèn)題,選擇最好的方法,然后將大問(wèn)題分解成小問(wèn)題。
在面試中,你很容易就能檢查這個(gè)能力,因?yàn)楹蜻x人自然會(huì)澄清模糊的問(wèn)題,或者列出解決方案的部分和關(guān)系,或者在討論細(xì)節(jié)之前確認(rèn)問(wèn)題的大致情況。去考驗(yàn)這個(gè)能力,你不用提出一個(gè)新問(wèn)題,只需要讓他們描述任何一件事情:他們開(kāi)發(fā)過(guò)的軟件產(chǎn)品,面向的對(duì)象,軟件開(kāi)發(fā)過(guò)程中扮演的角色或處理的任務(wù),互聯(lián)網(wǎng)、網(wǎng)絡(luò)等等。
當(dāng)描述完成后,問(wèn)問(wèn)自己,你是否聽(tīng)到了對(duì)碎片的列舉,或者候選人是否描述了事情的核心,這就是分析能力。
2、抽象能力:能夠識(shí)別和理解抽象概念和模式的能力
軟件是復(fù)雜的; 簡(jiǎn)單地閱讀代碼是不能理解它的。你通過(guò)尋找結(jié)構(gòu)來(lái)理解它,建立一個(gè)關(guān)于如何用代碼建模的理論,然后在閱讀中驗(yàn)證和改變這個(gè)模型。開(kāi)發(fā)新的軟件很像理解一個(gè)現(xiàn)有的程序,只是這個(gè)模型還不存在,只是在你的腦海里有該軟件的寫(xiě)代碼時(shí)追求的所有品質(zhì)),那么開(kāi)發(fā)者就可以實(shí)現(xiàn)它。
3、準(zhǔn)確: 簡(jiǎn)潔而準(zhǔn)確地表達(dá)事物的能力
一些開(kāi)發(fā)者僅通過(guò)復(fù)制實(shí)例就能取得一定的成功;他們找到與其開(kāi)發(fā)的項(xiàng)目近似的軟件代碼,然后對(duì)其進(jìn)行調(diào)整。這就像雕刻,只是當(dāng)它用代碼完成時(shí),結(jié)果通常不是很清楚,也不是很簡(jiǎn)潔,而且可能不完全準(zhǔn)確。同樣,有些開(kāi)發(fā)者只能通過(guò)例子來(lái)解釋事情,而不是通過(guò)命名底層概念或模式。這是可以接受,但可能會(huì)成為軟件開(kāi)發(fā)的絆腳石,因?yàn)樗麄儾惶赡苷J(rèn)識(shí)、理解和應(yīng)用代碼中微觀或宏觀層面的模式。
一個(gè)能夠準(zhǔn)確(但不一定迅速或令人印象深刻)表達(dá)的開(kāi)發(fā)者會(huì)開(kāi)發(fā)出更精確的代碼,并更容易向另一個(gè)開(kāi)發(fā)者解釋一項(xiàng)技術(shù)或需求。
4、分清輕重緩急和實(shí)用性: 識(shí)別必須做的事和可以做的事
靈活的方法自然傾向于今天寫(xiě)今天的代碼。即使在做瀑布式開(kāi)發(fā)的公司里,能夠區(qū)分必要和可能,仍然是一項(xiàng)重要的技能。產(chǎn)品往往只有在按時(shí)交付的情況下才能完全成功。一個(gè)務(wù)實(shí)的開(kāi)發(fā)者會(huì)做真正需要去做的事情,比如創(chuàng)建一些鉤子,寫(xiě)一些評(píng)論,為明天打好基礎(chǔ)。實(shí)用主義還表現(xiàn)在渴望實(shí)現(xiàn)、完成目標(biāo);這促使并鼓勵(lì)我們定義什么是成功,幫助我們確定達(dá)到目的的優(yōu)先次序,并關(guān)注任務(wù)的完成度而不僅是給履歷鍍金。
5、理想主義:渴望把事情做好
一個(gè)只注重實(shí)用主義的開(kāi)發(fā)者有時(shí)會(huì)偷懶;他們不僅只開(kāi)發(fā)今天的功能,而且只為今天而編碼,而不是為明天要維護(hù)這些代碼的開(kāi)發(fā)者而編碼。實(shí)際上,一個(gè)理想主義的開(kāi)發(fā)者會(huì)關(guān)心他們所交付的產(chǎn)品的所有品質(zhì):
①他們會(huì)確保他們理解了開(kāi)發(fā)需求。
②他們?nèi)级笮?,在?xiě)一行代碼之前會(huì)慎重考慮,甚至可能會(huì)記錄測(cè)試案例。
③他們寫(xiě)的代碼是清晰的,并且有充分的注釋?zhuān)凰麄儾粩嗟刂貥?gòu),以便使普通代碼進(jìn)入共享方式,然后進(jìn)入基礎(chǔ)類(lèi)或輔助類(lèi)。
④他們會(huì)編寫(xiě)單元測(cè)試案例,以保護(hù)其他開(kāi)發(fā)人員和測(cè)試人員免受錯(cuò)誤代碼的影響。
⑤在自動(dòng)測(cè)試不可行的情況下,他們會(huì)堅(jiān)持進(jìn)行手動(dòng)測(cè)試。
理想主義和實(shí)用主義是相輔相成的關(guān)系,并且二者缺一不可,平衡這兩個(gè)品質(zhì),并告知開(kāi)發(fā)者整天所做的決定。
其他能力
當(dāng)然,還有一些其他的能力也很重要:
①專(zhuān)注:編寫(xiě)軟件是一項(xiàng)將頭腦中的模型轉(zhuǎn)錄成代碼的復(fù)雜任務(wù)。
②理解和使用技術(shù)的能力。
③渴望學(xué)習(xí)和提高他們所需的所有技能,以便在個(gè)人和軟件交付組織中發(fā)揮效力。
④能夠認(rèn)識(shí)到如果不能和團(tuán)隊(duì)成員或其他團(tuán)隊(duì)有效合作,他們的技能再高超也發(fā)揮不出效力。
總結(jié)
最后一項(xiàng)能力是我們所有人都需要的;那就是認(rèn)識(shí)到?jīng)]有一套固定的技能。在任何組織中,有多種方法可以取得成功,有許多角色需要填補(bǔ),而個(gè)人的工作只是一個(gè)更大過(guò)程中的一部分,所有這些都需要發(fā)揮作用才能取得成功。
聰明人有時(shí)會(huì)忽視其他方面的智慧;如果我們能夠一直互相尊重,并將觀點(diǎn)作為意見(jiàn)提出。即使我們認(rèn)為是在糾正一個(gè)錯(cuò)誤,也會(huì)發(fā)現(xiàn)我們竟然經(jīng)常將意見(jiàn)和觀點(diǎn)混淆為事實(shí)。
因此,開(kāi)發(fā)人員最好具備上述能力;然后,他們就可以在技術(shù)軌道上推進(jìn)自己的職業(yè)生涯,成為高級(jí)開(kāi)發(fā)人員、開(kāi)發(fā)負(fù)責(zé)人,最后成為架構(gòu)師;或者在管理軌道上,信守承諾、尊重他人,甚至在更加關(guān)鍵的位置上激勵(lì)和幫助他人實(shí)現(xiàn)愿望。
原文標(biāo)題:5 Software Developer Competencies: How To Recognize a Good Programmer
原文作者:Mohamed Aboelez · Mar