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