人月神話讀書筆記
人月神話這本書幾年前就聽別人說是本很經(jīng)典的軟件開發(fā)方面的書,這本書的成功之處在于他思想的前衛(wèi)性,以至于不只是軟件行業(yè)的人在讀。現(xiàn)在終于找到讀他的理由了,可以感受一下大師的杰作。在讀之前我已經(jīng)讀過了軟件工藝和極限編程,為什么留到最后讀人月神話呢?主要是因為我覺得一本能夠流傳30年還被人們津津樂道的書,肯定是本學(xué)要好好細(xì)讀的書,所以留到了最后。按照前兩篇讀書筆記的慣例,前面幾段是一些我讀書時的感受和收獲,還有一些對內(nèi)容的評價。
從這本書的內(nèi)容來看,對于一個項目經(jīng)理來說肯定會有更大的收獲,這本書主要是針對軟件開發(fā)管理方面的內(nèi)容,這主要原因可能是因為作者以前就是項目的管理者,他是站在管理者的角度寫的。即便這樣,對于一個從來沒有參與過真實項目開發(fā),更沒有領(lǐng)導(dǎo)過團(tuán)隊的我還是有一定的吸引力,這本書中我最喜歡的就是前四章(焦油坑、人月神話、外科手術(shù)隊伍、貴族專制、民主政治和系統(tǒng)設(shè)計)和沒有銀彈這章。這本書里面為了論證某一觀點,會舉出許多實際的項目作為證據(jù),這一點非常好,事實勝于雄辯嘛!這些例子也許對于作者那個年代的人來說很好理解,但是放在30年后來看這些例子又有些陳舊和難懂了。另外,從文中我發(fā)現(xiàn)作者非常注重文檔,一個優(yōu)質(zhì)的文檔就是項目成功的保證,這一點與傳統(tǒng)的軟件工程很相似,但是卻與極限編程的觀點相悖。下面就是一些讀書的總結(jié)了。
焦油坑 1. 編程系統(tǒng)產(chǎn)品開發(fā)的工作量是供個人使用的、獨立開發(fā)的構(gòu)件程序的九倍。
2. 編程行業(yè)的一些內(nèi)在固有苦惱:
l 將做事方式調(diào)整到追求完美,是學(xué)習(xí)編程的最困難部分。
l 由其他人來設(shè)定目標(biāo),并且必須依靠自己無法控制的事物。
l 真正的權(quán)威來自于每次任務(wù)的完成。
l 任何創(chuàng)造性活動都伴隨著枯燥艱苦的勞動,編程也不例外
l 人們通常期望項目在接近結(jié)束時(bug、工作時間)能收斂得快一些,然而軟件項目的情況卻是越接近完成,收斂得越慢。
l 產(chǎn)品在即將完成時總面臨著陳舊過時的威脅。 人月神話 1. 缺乏合理的時間進(jìn)度是造成項目滯后的最主要原因,它比其他所有因素加起來影響還大。
2. 良好的烹飪需要時間,某些任務(wù)無法在不損害結(jié)果的情況下加快速度。
3. 我們的構(gòu)思是有缺陷的,因此總會有bug。
4. 我們圍繞成本核算的估計技術(shù),混淆了工作量和項目進(jìn)展。人月是危險和帶有欺騙性的神話,因為它暗示人員數(shù)量和時間是可以相互替換的。
5. 在若干人員中分解任務(wù)會引發(fā)額外的溝通工作量--培訓(xùn)和相互溝通。
6. 關(guān)于進(jìn)度安排,作者的經(jīng)驗是為1/3計劃、1/6編碼、1/4構(gòu)件測試以及1/4系統(tǒng)測試。
7. 因為我們對自己的估計技術(shù)不確定,所以在管理和客戶的壓力下,我們常常缺乏堅持的勇氣。
8. brook法則:向進(jìn)度落后的項目中增加人手,只會使進(jìn)度更加落后。
9. 向軟件項目中增派人手從三個方面增加了項目必要的總體工作量:任務(wù)重新分配本身和所造成的工作中斷;培訓(xùn)新人員;額外的相互溝通。 外科手術(shù)隊伍 1. 同樣有兩年經(jīng)驗而且在受到同樣的培訓(xùn)的情況下,優(yōu)秀的專業(yè)程序員的工作效率是較差程序員的十倍。關(guān)于這一條我在極限編程里看到,sackman和humphrey分別做了實驗發(fā)現(xiàn)優(yōu)秀程序員工作效率比較差程序員的工作效率最高要高達(dá)28倍。
2. 小型、精干隊伍是最好的。這一點在軟件工藝和極限編程里都得到了充分的體現(xiàn)。
3. 兩個人的團(tuán)隊,其中一個項目經(jīng)理,常常是最佳的人員使用方法。
4. 對于真正意義上的大型系統(tǒng),小型精干的隊伍太慢了。
5. 實際上,絕大多數(shù)大型編程系統(tǒng)的經(jīng)驗顯示出,一擁而上的開發(fā)方法是高成本、速度緩慢、不充分的,開發(fā)出的產(chǎn)品無法進(jìn)行概念上的集成。
6. 一位首席程序員、類似于外科手術(shù)隊伍的團(tuán)隊架構(gòu)提供了一種方法,既能獲得由少數(shù)頭腦產(chǎn)生的產(chǎn)品完整性,又能得到多位協(xié)助人員的總體生產(chǎn)率,還徹底地減少了溝通的工作量。圖1是10人的程序開發(fā)隊伍溝通模式。 圖1 10人程序開發(fā)隊伍溝通模式
貴族專制、民主政治和系統(tǒng)設(shè)計 1. 概念完整性是系統(tǒng)設(shè)計中最重要的考慮因素。
2. 為了獲得概念完整性,設(shè)計必須由一個人或者具有共識的小型團(tuán)隊來完成。
3. 對于非常大型的項目,將設(shè)計方法、體系結(jié)構(gòu)方面的工作與具體實現(xiàn)相分離是獲得概念完整性的強(qiáng)有力方法。
4. 紀(jì)律、規(guī)則對行業(yè)是有益的。外部的體系結(jié)構(gòu)規(guī)定實際上是增強(qiáng),而不是限制實現(xiàn)小組的創(chuàng)造性。
5. 體系結(jié)構(gòu)、設(shè)計實現(xiàn)、物理實現(xiàn)的許多工作可以并發(fā)進(jìn)行。 畫蛇添足 1. 盡早交流和持續(xù)溝通能使結(jié)構(gòu)師有較好的成本意識,以及使開發(fā)人員獲得對設(shè)計的信心,并且不會混淆各自的責(zé)任分工。
2. 結(jié)構(gòu)師如何成功地影響實現(xiàn):
i. 牢記是開發(fā)人員承擔(dān)創(chuàng)造性的實現(xiàn)責(zé)任;結(jié)構(gòu)師只能提出建議。
ii. 聽取開發(fā)人員在體系結(jié)構(gòu)上改進(jìn)的建議。
3. 第二個系統(tǒng)是人們所設(shè)計的最危險的系統(tǒng),通常的傾向是過分地進(jìn)行設(shè)計。關(guān)于這一點也許是正確的,但是這是一個回避不了的問題,如果沒有開發(fā)第二個系統(tǒng)經(jīng)驗的人,就不可能有開發(fā)第三個系統(tǒng)經(jīng)驗的人了。 貫徹執(zhí)行 1. 即使是大型的設(shè)計團(tuán)隊,設(shè)計結(jié)果也必須由一個或兩個人來完成,以確保這些決定是一致的。