《人月神話》筆記 the mythical man-month
在眾多軟體專案中,缺乏合理的時間進度安排是造成專案滯後的最主要原因,比其他所有因素加起來的影響還大。
Brooks法則:向進度落後的專案中增加人手,只會使進度更加落後。
人月:
任務可以分解,參與人員之間不需要交流時,人數和時間可以互換,幾乎不存在。
任務有次序上的限制,不能分解時,人手的新增對進度沒有幫助,如除錯、測試。
任務可以分解,但子任務之間需要溝通交流時,必須在計劃工作中考慮溝通的工作量,新增更多的人手,實際上是延長了而不是縮短了時間進度。系統應由儘可能少的人員來開發。一擁而上的開發方法是高成本的、速度緩慢的、不充分的、無法在概念上進行整合的產品。效率高和效率低的實施者之間具體差別非常大,經常達到了數量級水平。理想隊伍是小型、精幹的。
對於效率和概念的完整性來說,最好由少數幹練的人員來設計和開發,而對於大型系統,則需要大量的人手,以使產品能在時間上滿足需求。如何平衡這兩方面之間的矛盾呢?
外科手術隊伍:(10人程式設計隊伍)
外科醫生:首席程式設計師。定義功能和效能技術說明書,設計程式,編制原始碼,測試,書寫技術文件。需要極高的天分、十年的經驗和應用數學、業務資料處理以及其他方面的 大量系統和應用知識。
副手:外科醫生的後備,能完成任何一部分工作,但是具有相對較少的經驗。作為設計的思考者、討論者和評估人員。需要詳細瞭解所有的程式碼,研究設計策略的備選方案。,充當外科醫生的保險機制,,可以編制程式碼,但針對程式碼的任何部分,不承擔具體的開發職責。
管理員:控制財務、人員、工作地點安排和機器的專業管理人員,充當與組織中其他管理機構的介面。
編輯:出於最大清晰度的考慮,外科醫生必須進行書寫文件。編輯根據外科醫生的草稿或口述的手稿,進行分析和重新組織,提供各種參考資訊和書目,對多個版本進行維護以及監督文件生成的機制。
兩個祕書:管理員和編輯各需要一個祕書。管理員的祕書負責專案的協作一致和非產品檔案。
程式職員:維護程式設計產品庫中所有團隊的技術記錄。程式職員的專業化分工,使得程式設計師從書記 雜事中解放出來,同時還可以對那些雜事進行系統整理,確保了它們的質量,並強化了團隊最富有價值的財富——工作產品。
工具維護人員:承擔團隊成員所需要的特殊工具的構建、維護和升級責任。開發一些實用程式、編制具有目錄的過程庫以及巨集庫。
測試人員:外科醫生需要大量合適的測試用例,用來對他所編寫的工作片段以及對整個工作進行測試。
語言專家:這些天才不同於外科醫生,外科醫生主要是系統設計者以及考慮系統的整體表現,而語言專家則尋找一種簡潔有效的使用語言的方法來解決輔助區、晦澀或棘手的問題。他通常需要對技術進行一些研究(兩到三天)。通常一個語言專家可以為兩到三個外科醫生服務。
十個人,其中七個專業人士在解決問題,而系統是一個或兩個人思考的產物,因此達到了概念上的一致性。