第三章 軟件工程師的成長
軟件工程包括了開發、運營、維護軟件的過程中的很多技術、做法、習慣和思想。軟件工程把這些相關的技術和過程統一到一個體系中,叫“軟件開發流程”,軟件開發流程的目的是為了提高軟件開發、運營、維護和效率,以及提升用戶滿意度、軟件的可靠性和可維護性。
軟件開發流程不光指團隊的流程,還包括個人開發流程,因為軟件團隊是由個人組成的。
軟件系統的絕大部分模塊都是由個人開發或維護的。在軟件工程術語中,我們把這些單個的成員叫做Individual Contributor(IC)。
IC在團隊中的流程:
- 通過交流、實驗、快速原型等方法,理解問題、需求或任務
- 提出多種解決辦法並估計工作量(其中包括尋找以前的解決方案,因為很多工作是重復性的)
- 與相關角色交流解決問題的提案,決定一個可行的方案
- 執行,把想法變成實際中能工作的代碼,同時驗證方案的可行性和其他特性(例如程序的效能等)
- 和團隊的其他角色合作,在測試環境中測試實現方案,修復缺陷(Bug)。如果此方案有嚴重的問題,那麽就考慮其他方案
- 在解決方案發布出去之後,對結果負責
初級軟件工程師的成長:
- 積累軟件開發相關的智商,提升技術技能(如對具體技術的掌握,動手能力)。
- 積累問題領域的知識和經驗
第一點和第二點在很多簡歷上都可以看到,也可以比較容易地檢測出來。隨著經驗的增長,一個工程師可以掌握更廣泛、更深入的技術和問題領域的知識。
3. 對通用的軟件設計思想和軟件工程思想的理解。
4. 提升職業技能(區別於技術技能)
5. 實際成果
絕大部分軟件工程師的工作成果都是可以公開的,你參與的產品用戶評價如何?市場占有率如何?對用戶有多大價值?你在其中起了什麽作用?行勝於言,這些實際的工作成果,是最重要的評價 標準。
軟件開發的工作量和質量如何衡量。PSP認為有4個因素:
a.項目/任務有多大?
說明項目的大小,一般用代碼行數(Line Of Code,LOC)來表示;也可以用功能點(Function Point)來表示
b.花了多少時間?
可以用小時、天、月、年來表示。一組人所花費的時間可以用(人數X時間)來表示
c.質量如何?
交付的代碼中有多少缺陷?交付有兩個定義:
- 在代碼完成時,交付給測試人員
- 在軟件最終發布時,交付給顧客
可以用缺陷的數量來除以項目的大小。
d.是否按時交付?
軟件/任務是否按時交付?在團隊工作中,穩定、一致的交付時間是衡量一個員工能力的重要方面。軟件項目的確需要創造性,需要一些意外,一些驚喜。但是,更多的是常規的、可重復的任務。
TSP(Team Software Process)對團隊成員也有要求:
- 交流:能有效地和其他隊員交流,從大的技術方向,到看似微笑的問題。
- 說到做到:按時交付
- 接受團隊賦予的角色並按角色要求工作:團隊要完成任務,有很多事情要做,是否能接受不同的任務並高質量完成?
- 全力投入團隊的活動:就像一些評審會議,代碼復審,都要全力以赴地參加,而不能遊離於團隊之外
- 按照團隊流程的要求工作:團隊有自己的流程,個人的能力即使很強,也要按照團隊制定的流程工作,而不要認為自己不受流程約束
- 準備:在開會討論之前,開始一個新功能之前,一個新項目之前,都要做好準備工作
- 理性地工作:軟件開發有很多個人的、感情驅動的因素,但是應該成熟的團隊成員必須從事實和數據出發,按照流程,理性地工作
第三章 軟件工程師的成長