1. 程式人生 > >20179215 《構建之法》第三章

20179215 《構建之法》第三章

產品 debug 行數 診斷 重復 你在 實現 lin 廣泛

《構建之法》第三章 讀書筆記

?本章為軟件工程師的成長,主要介紹了評價軟件工程師水平的主要方法,技能的反面,TSP對個人的要求。

一、個人能力的衡量與發展

?軟件開發流程:軟件開發流程包括團隊的流程,也包括個人的流程

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

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

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

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

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

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

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

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

二、初級軟件工程師成長階段

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

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

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

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

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

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

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

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

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

  • 在代碼完成(Code Complete)時,交付給測試人員

  • 在軟件最終發布時,交付給顧客可以用缺陷的數量來除以項目的大小。

  1. 是否按時交付?
    在團隊工作中,穩定、一致的交付時間是衡量一個員工能力的重要方面

四、職業成長

1.公司版本

技術分享圖片

2.自我評估

?總結來說,這章從個人的角度,詮釋了軟件工程師個人的能力發展以及職業發展。書中以巴克斯頓的例子說明從技能的反面去理解技能是什麽,又利用利用魔方的例子來說明技能的一些層次以及是否“精通”的考察方法。事實上,當我們把所有底層的問題都解決了,會發現事事相通,應用到不同領域的時候會就會得心應手,也就是所謂的能力提升了。

20179215 《構建之法》第三章