1. 程式人生 > >《構建之法》第三章學習筆記

《構建之法》第三章學習筆記

log 設計思想 水平 行業 如何 階段 檢測 應該 blog

《構建之法》第三章 軟件工程師的成長

個人能力的衡量與發展

軟件團隊和團隊中的工程師也是這樣。軟件系統的絕大部分模塊都是由個人開發或維護的。在軟件工程的術語中,我們把這些單個的成員叫做Individ-ual Contributor(IC)。IC在團隊中的流程是怎麽樣的呢?以開發人員為例,流程如下:

通過交流、實驗、快速原型等方法,理解問題、需求或任務

提出多種解決辦法並估計工作量

其中包括尋找以前的解決方案,因為很多工作是重復性的

與相關角色交流解決問題的提案,決定一個可行的方案

執行,把想法變成實際中能工作的代碼,同時驗證方案的可行性和其他特性(例如程序的效能等)

和團隊的其他角色合作,在測試環境中測試實現方案,修復缺陷(Bug)。如果此方案有嚴重的問題,那麽就考慮其他方案

在解決方案發布出去之後,對結果負責每個人的工作質量直接影響最終軟件的質量

初級軟件工程師成長階段

  1. 積累軟件開發相關的知識,提升技術技能(如對具體技術的掌握,動手能力)
    例如:對Java、C/C++、C#的掌握,診斷/提高效能的技術,對設備驅動程序(Device Driver)、內核調試器(Kernel Debugger)的掌握;對於某一開發平臺的掌握

  2. 積累問題領域的知識和經驗(例如:對醫療或金融行業的了解)
    第一點和第二點都可以在很多簡歷上都可以看到,也可以比較容易地檢測出來。隨著經驗的增長,一個工程師可以掌握更廣泛、更深入的技術和問題領域的知識

  3. 對通用的軟件設計思想和軟件工程思想的理解
    這一方面就比較虛,什麽是好的軟件設計思想?什麽是好的軟件工程思想?一個工程師開了博客,轉發了很多別人的文章,這算有思想麽?另一個工程師堅持做任何設計都要畫UML圖,這算有思想麽?

  4. 提升職業技能(區別於技術技能)
    職業技能包括:自我管理的能力,表達和交流的能力,與人合作的能力,按質按量完成任務的執行力,這些能力在IT行業和其他行業都很重要。

  5. 實際成果
    絕大部分軟件工程師的工作成果都是可以公開的,你參與的產品用戶評價如何,市場占有率如何,對用戶有多大價值?你在其中起了什麽作用?

軟件開發的工作量和質量的衡量標準

項目/任務有多大?
說明項目的大小,一般用代碼行數(Line Of Code,LOC)來表示;也可以用功能點(Function Point)來表示

花了多少時間?
可以用小時、天、月、年來表示。一組人所花費的時間可以用(人數×時間)來表示,例如某項目花費了10個人×月

質量如何?交付的代碼中有多少缺陷?
交付有兩個定義

在代碼完成(Code Complete)時,交付給測試人員
在軟件最終發布時,交付給顧客可以用缺陷的數量來除以項目的大小
是否按時交付?
在團隊工作中,穩定、一致的交付時間是衡量一個員工能力的重要方面

軟件工程師的職業發展

職業成長——大公司版本

技術分享圖片

職業成長——自我評估

很少有人能在學校裏掌握這麽多知識後才畢業找工作,隨後把技術運用在實踐中。工程師應該在實際工作中不斷學習和不斷成長,根據自己的情況選擇在哪個方面追求“專和精”,在那幾個方面達到“知道就好”的水平。

《構建之法》第三章學習筆記