20179215 《構建之法》第三章
《構建之法》第三章 讀書筆記
?本章為軟件工程師的成長,主要介紹了評價軟件工程師水平的主要方法,技能的反面,TSP對個人的要求。
一、個人能力的衡量與發展
?軟件開發流程:軟件開發流程包括團隊的流程,也包括個人的流程
?軟件系統的絕大部分模塊都是由個人開發或維護的。在軟件工程的術語中,我們把這些單個的成員叫做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)時,交付給測試人員
在軟件最終發布時,交付給顧客可以用缺陷的數量來除以項目的大小。
- 是否按時交付?
在團隊工作中,穩定、一致的交付時間是衡量一個員工能力的重要方面
四、職業成長
1.公司版本
2.自我評估
?總結來說,這章從個人的角度,詮釋了軟件工程師個人的能力發展以及職業發展。書中以巴克斯頓的例子說明從技能的反面去理解技能是什麽,又利用利用魔方的例子來說明技能的一些層次以及是否“精通”的考察方法。事實上,當我們把所有底層的問題都解決了,會發現事事相通,應用到不同領域的時候會就會得心應手,也就是所謂的能力提升了。
20179215 《構建之法》第三章