《構建之法》第三章學習筆記
《構建之法》第三章 軟件工程師的成長
個人能力的衡量與發展
軟件團隊和團隊中的工程師也是這樣。軟件系統的絕大部分模塊都是由個人開發或維護的。在軟件工程的術語中,我們把這些單個的成員叫做Individ-ual Contributor(IC)。IC在團隊中的流程是怎麽樣的呢?以開發人員為例,流程如下:
通過交流、實驗、快速原型等方法,理解問題、需求或任務
提出多種解決辦法並估計工作量
其中包括尋找以前的解決方案,因為很多工作是重復性的
與相關角色交流解決問題的提案,決定一個可行的方案
執行,把想法變成實際中能工作的代碼,同時驗證方案的可行性和其他特性(例如程序的效能等)
和團隊的其他角色合作,在測試環境中測試實現方案,修復缺陷(Bug)。如果此方案有嚴重的問題,那麽就考慮其他方案
在解決方案發布出去之後,對結果負責每個人的工作質量直接影響最終軟件的質量
初級軟件工程師成長階段
積累軟件開發相關的知識,提升技術技能(如對具體技術的掌握,動手能力)
例如:對Java、C/C++、C#的掌握,診斷/提高效能的技術,對設備驅動程序(Device Driver)、內核調試器(Kernel Debugger)的掌握;對於某一開發平臺的掌握積累問題領域的知識和經驗(例如:對醫療或金融行業的了解)
第一點和第二點都可以在很多簡歷上都可以看到,也可以比較容易地檢測出來。隨著經驗的增長,一個工程師可以掌握更廣泛、更深入的技術和問題領域的知識對通用的軟件設計思想和軟件工程思想的理解
這一方面就比較虛,什麽是好的軟件設計思想?什麽是好的軟件工程思想?一個工程師開了博客,轉發了很多別人的文章,這算有思想麽?另一個工程師堅持做任何設計都要畫UML圖,這算有思想麽?提升職業技能(區別於技術技能)
職業技能包括:自我管理的能力,表達和交流的能力,與人合作的能力,按質按量完成任務的執行力,這些能力在IT行業和其他行業都很重要。實際成果
絕大部分軟件工程師的工作成果都是可以公開的,你參與的產品用戶評價如何,市場占有率如何,對用戶有多大價值?你在其中起了什麽作用?
軟件開發的工作量和質量的衡量標準
項目/任務有多大?
說明項目的大小,一般用代碼行數(Line Of Code,LOC)來表示;也可以用功能點(Function Point)來表示
花了多少時間?
可以用小時、天、月、年來表示。一組人所花費的時間可以用(人數×時間)來表示,例如某項目花費了10個人×月
質量如何?交付的代碼中有多少缺陷?
交付有兩個定義
在代碼完成(Code Complete)時,交付給測試人員
在軟件最終發布時,交付給顧客可以用缺陷的數量來除以項目的大小
是否按時交付?
在團隊工作中,穩定、一致的交付時間是衡量一個員工能力的重要方面
軟件工程師的職業發展
職業成長——大公司版本
職業成長——自我評估
很少有人能在學校裏掌握這麽多知識後才畢業找工作,隨後把技術運用在實踐中。工程師應該在實際工作中不斷學習和不斷成長,根據自己的情況選擇在哪個方面追求“專和精”,在那幾個方面達到“知道就好”的水平。
《構建之法》第三章學習筆記