《人月神話》讀書筆記(簡略版)

 

計算機史上,推薦最多的兩本書《代碼大全》《人月神話》

第一章 焦油坑

從程序到編程系統產品是9倍的關係

編程有苦也有樂

樂:創造事物,不斷學習

苦:人們通常希望項目快結束的時候收斂的快一點,但結果是越到最後,收斂越慢。

第二章 人月神話(人月:一個人幹一個月,三個人幹四個月就是12個人月)

人月是一個危險的帶有欺騙性的神話,人員和時間的關係不一定是人越短,項目完成時間越少。除非是完全可分解任務,人與人之間不用溝通。有時候盲目增加人員只會適得其反。

進度安排中,系統測試階段往往容易安排錯誤,不確定性太大。編碼階段最容易估算時間

軟件進度安排經驗:1/3 計劃,1/6編碼,1/4構件測試和早期系統測試,1/4系統測試。測試佔一半時間,這是實際中經常做不到的。

Brooks法則:向進度落後的項目中增加人手,只會讓項目更落後。     應該及時修改進度安排和減少項目任務

缺乏合理的進度安排是導致項目滯後最主要的原因

所有編程人員都是樂觀主義

第三章 外科手術隊伍(小型隊伍 10個人)

傳統隊伍:工作劃分,每個人負責一個部分

外科手術隊伍:外科醫生和副手瞭解所有的設計和全部的代碼

傳統隊伍:大家平等,出現分歧的時候不好找到最好的解決辦法

外科手術隊伍:有上下級關係,分歧可由外科醫生來判斷

另外,剩餘的人職能專業化分工

大型隊伍時,要有系統架構師,要能清晰的劃分體系結構設計和實現之間的界限,並專注於體系結構

第四章 貴族專制、民主政治和系統設計

體系結構設計:完整和詳細的用戶接口說明

貴族專制好,由智力精英完成創造性工作,其他人做齒輪(齒輪的描述其實不對,程序的實現也是創造性工作),這樣有助於概念完整性。但上面的人不用要求下面的人如何做

在體系結構隊伍設計時,實現人員幹什麼?如果讓實現人員參與計劃設計階段,並不會加快速度,並且質量更加低劣。所以大型項目可以分階段,在說明編寫好之後再調入實現人員

功能和理解上的複雜程度的比值纔是系統設計的最終標準,而不是豐富的功能。

第五章 畫蛇添足

儘早交流和持續溝通能使結構師有較好的成本意識,以及使開發人員獲得對設計的信心,並且不會混淆各自的責任分工。

結構師如何成功地影響實現: 牢記是開發人員承擔創造性和發明性的實現責任,所以結構師只能建議,而不能支配

時刻準備着爲所指定的說明建議一種實現的方法,同樣準備接受其他任何能達到目標的方法

對上述的建議保持低調和不公開

準備放棄堅持所作的修改意見

第二個系統是人們所設計的最危險的系統,因爲往往畫蛇添足

第六章 貫徹執行

即使是大型的項目,設計結果也應該由一到兩個人來完成

規格說明作者應該追求的精確程度:在仔細定義規定什麼的同時,定義未規定什麼。

項目經理最好的朋友就是他每天要面對的對手——獨立的產品測試機構/小組

第七章 爲什麼巴比倫塔會失敗

因爲缺乏交流,交流和組織和軟件技術一樣重要

要有項目工作手冊,並及時更新

第八章 胸有成竹

僅僅通過對編碼部分的估計,然後應用任務其他部分的相應係數,是無法得到對整個任務的估計的。

構建獨立小型程序的數據不適用於編程系統產品。

工作量是規模的冪函數(不是成正比,規模越大,需要的工作量呈冪函數增加)

對常用的編程語句而言,生產率似乎是固定的。這個固定的生產率包括了編程中需要的註釋,並可能存在錯誤的情況。

使用適當的高級語言,編程的生產效率可以提高5倍。

第九章 削足適履

培養開發人員從系統整體出發、面向用戶的態度是軟件編程管理人員最重要的職能。

第十章 提綱挈領

對於計算機硬件開發項目,關鍵文檔是:目標、手冊、進度、預算、價格

對於軟件項目:目標、用戶手冊、內部文檔、進度、預算、組織機構圖、工作空間分配

第十一章 未雨綢繆

在軟件開發的過程中,往往第一個系統存在的問題挺多,它可能太慢、太大,而且難以使用,或者三者兼而有之。要將誒絕所有的問題,除了重新開始以外,沒有其他的辦法。系統的丟棄和重新設計可以一步完成,也可以一塊塊地實現。這是所有大型系統開發必須完成的步驟。

爲捨棄而計劃,無論如何,你一定要這樣做。

變化是與生俱來的,不是不合時宜和令人生厭的異常情況。

用戶的實際需要和用戶感覺會隨着程序的構建、測試和使用而變化。

軟件產品易於掌握的特性和不可見性,導致它的構建人員面臨永恆的需求變更。

拋棄原型概念本身就是對事實的接受——隨着學習的過程更改設計。

對於一個廣泛使用的程序,其維護總成本通常是開發成本的40%或更多。

程序維護中的一個基本問題是——缺陷修復總會以固定(20%~50%)的機率引入新的bug。整個過程是前進兩步,後退一步。

系統軟件開發是減少混亂度(減少熵)的過程,所以他本身是處於亞穩態的。

軟件維護是提高混亂度(增加熵)的過程,即使是最熟練的軟件維護工作們也只是放緩了系統退化到非穩態的進程。

第十二章 干將莫邪

在某些應用上,批處理系統絕不會被交互式系統所取代。

調試是系統編程中很慢和較困難的部分,而漫長的調試周轉時間是調試的禍根。

第十三章 整體部分

自上而下設計比較好

第十四章 禍起蕭牆

重大災害是比較容易處理的,它往往和重大的壓力、徹底的重組、新技術的出現有關,整個項目組通常可以應付自如。 但是一天一天的進度落後是難以識別、不容易防範和難以彌補的。

進度表上的每一件事被稱爲“里程碑”,它們都有一個一個日期。里程碑的選擇只有一個原則,那就是里程碑必須是具體的、特定的、可度量的事件,能夠進行清晰定義。

第十五章 另外一面

自文檔化的程序:將文檔整合到源程序,這對正確維護是直接有力的推動,保證編程用戶能方便、及時地得到文檔資料。

將文檔的負擔降到最小的三個方法 :

第一是藉助那些出於語言的要求而必須存在的語句,來附加儘可能多的“文檔”信息。

第二是儘可能地使用空格和一致的格式提高程序的可讀性,表現從屬和嵌套關係。

第三,以段落註釋的形式,向程序中插入必要的記敘性文字。

程序流程圖用處不大,即使要,也不用按標準來,不用太詳細

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章