不卡AV在线|网页在线观看无码高清|亚洲国产亚洲国产|国产伦精品一区二区三区免费视频

學(xué)習(xí)啦 > 在線閱讀 > 讀書筆記 >

《人月神話》的讀書筆記

時(shí)間: 若木623 分享

  人月神話這本書幾年前就聽別人說是本很經(jīng)典的軟件開發(fā)方面的書,這本書的成功之處在于他思想的前衛(wèi)性,以至于不只是軟件行業(yè)的人在讀。現(xiàn)在終于找到讀他的理由了,可以感受一下大師的杰作。在讀之前我已經(jīng)讀過了軟件工藝和極限編程,為什么留到最后讀人月神話呢?主要是因?yàn)槲矣X得一本能夠流傳30年還被人們津津樂道的書,肯定是本學(xué)要好好細(xì)讀的書,所以留到了最后。按照前兩篇讀書筆記的慣例,前面幾段是一些我讀書時(shí)的感受和收獲,還有一些對(duì)內(nèi)容的評(píng)價(jià)。

  從這本書的內(nèi)容來看,對(duì)于一個(gè)項(xiàng)目經(jīng)理來說肯定會(huì)有更大的收獲,這本書主要是針對(duì)軟件開發(fā)管理方面的內(nèi)容,這主要原因可能是因?yàn)樽髡咭郧熬褪琼?xiàng)目的管理者,他是站在管理者的角度寫的。即便這樣,對(duì)于一個(gè)從來沒有參與過真實(shí)項(xiàng)目開發(fā),更沒有領(lǐng)導(dǎo)過團(tuán)隊(duì)的我還是有一定的吸引力,這本書中我最喜歡的就是前四章(焦油坑、人月神話、外科手術(shù)隊(duì)伍、貴族專制、民主政治和系統(tǒng)設(shè)計(jì))和沒有銀彈這章。這本書里面為了論證某一觀點(diǎn),會(huì)舉出許多實(shí)際的項(xiàng)目作為證據(jù),這一點(diǎn)非常好,事實(shí)勝于雄辯嘛!這些例子也許對(duì)于作者那個(gè)年代的人來說很好理解,但是放在30年后來看這些例子又有些陳舊和難懂了。另外,從文中我發(fā)現(xiàn)作者非常注重文檔,一個(gè)優(yōu)質(zhì)的文檔就是項(xiàng)目成功的保證,這一點(diǎn)與傳統(tǒng)的軟件工程很相似,但是卻與極限編程的觀點(diǎn)相悖。下面就是一些讀書的總結(jié)了。

  焦油坑 1. 編程系統(tǒng)產(chǎn)品開發(fā)的工作量是供個(gè)人使用的、獨(dú)立開發(fā)的構(gòu)件程序的九倍。

  2. 編程行業(yè)的一些內(nèi)在固有苦惱:

  l 將做事方式調(diào)整到追求完美,是學(xué)習(xí)編程的最困難部分。

  l 由其他人來設(shè)定目標(biāo),并且必須依靠自己無法控制的事物。

  l 真正的權(quán)威來自于每次任務(wù)的完成。

  l 任何創(chuàng)造性活動(dòng)都伴隨著枯燥艱苦的勞動(dòng),編程也不例外

  l 人們通常期望項(xiàng)目在接近結(jié)束時(shí)(bug、工作時(shí)間)能收斂得快一些,然而軟件項(xiàng)目的情況卻是越接近完成,收斂得越慢。

  l 產(chǎn)品在即將完成時(shí)總面臨著陳舊過時(shí)的威脅。 人月神話 1. 缺乏合理的時(shí)間進(jìn)度是造成項(xiàng)目滯后的最主要原因,它比其他所有因素加起來影響還大。

  2. 良好的烹飪需要時(shí)間,某些任務(wù)無法在不損害結(jié)果的情況下加快速度。

  3. 我們的構(gòu)思是有缺陷的,因此總會(huì)有bug。

  4. 我們圍繞成本核算的估計(jì)技術(shù),混淆了工作量和項(xiàng)目進(jìn)展。人月是危險(xiǎn)和帶有欺騙性的神話,因?yàn)樗凳救藛T數(shù)量和時(shí)間是可以相互替換的。

  5. 在若干人員中分解任務(wù)會(huì)引發(fā)額外的溝通工作量--培訓(xùn)和相互溝通。

  6. 關(guān)于進(jìn)度安排,作者的經(jīng)驗(yàn)是為1/3計(jì)劃、1/6編碼、1/4構(gòu)件測(cè)試以及1/4系統(tǒng)測(cè)試。

  7. 因?yàn)槲覀儗?duì)自己的估計(jì)技術(shù)不確定,所以在管理和客戶的壓力下,我們常常缺乏堅(jiān)持的勇氣。

  8. brook法則:向進(jìn)度落后的項(xiàng)目中增加人手,只會(huì)使進(jìn)度更加落后。

  9. 向軟件項(xiàng)目中增派人手從三個(gè)方面增加了項(xiàng)目必要的總體工作量:任務(wù)重新分配本身和所造成的工作中斷;培訓(xùn)新人員;額外的相互溝通。 外科手術(shù)隊(duì)伍 1. 同樣有兩年經(jīng)驗(yàn)而且在受到同樣的培訓(xùn)的情況下,優(yōu)秀的專業(yè)程序員的工作效率是較差程序員的十倍。關(guān)于這一條我在極限編程里看到,sackman和humphrey分別做了實(shí)驗(yàn)發(fā)現(xiàn)優(yōu)秀程序員工作效率比較差程序員的工作效率最高要高達(dá)28倍。

  2. 小型、精干隊(duì)伍是最好的。這一點(diǎn)在軟件工藝和極限編程里都得到了充分的體現(xiàn)。

  3. 兩個(gè)人的團(tuán)隊(duì),其中一個(gè)項(xiàng)目經(jīng)理,常常是最佳的人員使用方法。

  4. 對(duì)于真正意義上的大型系統(tǒng),小型精干的隊(duì)伍太慢了。

  5. 實(shí)際上,絕大多數(shù)大型編程系統(tǒng)的經(jīng)驗(yàn)顯示出,一擁而上的開發(fā)方法是高成本、速度緩慢、不充分的,開發(fā)出的產(chǎn)品無法進(jìn)行概念上的集成。

  6. 一位首席程序員、類似于外科手術(shù)隊(duì)伍的團(tuán)隊(duì)架構(gòu)提供了一種方法,既能獲得由少數(shù)頭腦產(chǎn)生的產(chǎn)品完整性,又能得到多位協(xié)助人員的總體生產(chǎn)率,還徹底地減少了溝通的工作量。圖1是10人的程序開發(fā)隊(duì)伍溝通模式。 圖1 10人程序開發(fā)隊(duì)伍溝通模式

  貴族專制、民主政治和系統(tǒng)設(shè)計(jì) 1. 概念完整性是系統(tǒng)設(shè)計(jì)中最重要的考慮因素。

  2. 為了獲得概念完整性,設(shè)計(jì)必須由一個(gè)人或者具有共識(shí)的小型團(tuán)隊(duì)來完成。

  3. 對(duì)于非常大型的項(xiàng)目,將設(shè)計(jì)方法、體系結(jié)構(gòu)方面的工作與具體實(shí)現(xiàn)相分離是獲得概念完整性的強(qiáng)有力方法。

  4. 紀(jì)律、規(guī)則對(duì)行業(yè)是有益的。外部的體系結(jié)構(gòu)規(guī)定實(shí)際上是增強(qiáng),而不是限制實(shí)現(xiàn)小組的創(chuàng)造性。

  5. 體系結(jié)構(gòu)、設(shè)計(jì)實(shí)現(xiàn)、物理實(shí)現(xiàn)的許多工作可以并發(fā)進(jìn)行。 畫蛇添足 1. 盡早交流和持續(xù)溝通能使結(jié)構(gòu)師有較好的成本意識(shí),以及使開發(fā)人員獲得對(duì)設(shè)計(jì)的信心,并且不會(huì)混淆各自的責(zé)任分工。

  2. 結(jié)構(gòu)師如何成功地影響實(shí)現(xiàn):

  i. 牢記是開發(fā)人員承擔(dān)創(chuàng)造性的實(shí)現(xiàn)責(zé)任;結(jié)構(gòu)師只能提出建議。

  ii. 聽取開發(fā)人員在體系結(jié)構(gòu)上改進(jìn)的建議。

  3. 第二個(gè)系統(tǒng)是人們所設(shè)計(jì)的最危險(xiǎn)的系統(tǒng),通常的傾向是過分地進(jìn)行設(shè)計(jì)。關(guān)于這一點(diǎn)也許是正確的,但是這是一個(gè)回避不了的問題,如果沒有開發(fā)第二個(gè)系統(tǒng)經(jīng)驗(yàn)的人,就不可能有開發(fā)第三個(gè)系統(tǒng)經(jīng)驗(yàn)的人了。 貫徹執(zhí)行 1. 即使是大型的設(shè)計(jì)團(tuán)隊(duì),設(shè)計(jì)結(jié)果也必須由一個(gè)或兩個(gè)人來完成,以確保這些決定是一致的。

  1 2

  2. 必須明確定義體系結(jié)構(gòu)中與先前定義不同的地方,重新定義的詳細(xì)程度應(yīng)該與原先的說明一致。

  3. 出于精確性的考慮,我們需要形式化的設(shè)計(jì)定義,同樣,我們需要記敘性定義來加深理解。

  4. 允許體系結(jié)構(gòu)師對(duì)實(shí)現(xiàn)人員的詢問做出電話應(yīng)答解釋是非常重要的,并且必須進(jìn)行日志記錄和整理發(fā)布。

  5. 項(xiàng)目經(jīng)理最好的朋友就是他每天要面對(duì)的敵人--獨(dú)立的產(chǎn)品測(cè)試機(jī)構(gòu)/小組。 為什么巴比倫塔會(huì)失敗? 1. 巴比倫塔項(xiàng)目的失敗是因?yàn)槿狈涣?,以及交流的結(jié)果的組織。

  2. 因?yàn)樽笫植恢烙沂衷谧鍪裁?,從而進(jìn)度災(zāi)難、功能的不合理和系統(tǒng)缺陷紛紛出現(xiàn)。由于對(duì)其他人的各種假設(shè),團(tuán)隊(duì)成員之間的理解開始出現(xiàn)偏差。

  3. 團(tuán)隊(duì)?wèi)?yīng)該以盡可能多的方式進(jìn)行相互之間的交流:非正式、常規(guī)項(xiàng)目會(huì)議,會(huì)上進(jìn)行簡要的技術(shù)陳述、共享的正式項(xiàng)目工作手冊(cè)。 胸有成竹 1. 僅僅通過對(duì)編碼部分的估計(jì),然后乘以任務(wù)其他部分的相對(duì)系數(shù),是無法得出對(duì)整項(xiàng)工作的精確估計(jì)的。

  2. 構(gòu)建獨(dú)立小型程序的數(shù)據(jù)不適用于編程系統(tǒng)項(xiàng)目。

  3. 程序開發(fā)與程序規(guī)模成指數(shù)增長趨勢(shì)。

  4. 當(dāng)使用適當(dāng)?shù)母呒?jí)語言時(shí),程序編制的生產(chǎn)率可以提高5倍。 削足適履

  這一章主要是要解決項(xiàng)目投資與磁盤空間和內(nèi)存之間的矛盾,但是這個(gè)矛盾在電腦硬件發(fā)展到現(xiàn)在的層次已經(jīng)可以忽略掉了。

  提綱挈領(lǐng) 1. 軟件項(xiàng)目的要求:目標(biāo)、用戶手冊(cè)、內(nèi)部文檔、進(jìn)度、預(yù)算、組織機(jī)構(gòu)圖和工作空間分配。

  2. 即使是小型項(xiàng)目,項(xiàng)目經(jīng)理也應(yīng)該在項(xiàng)目早期規(guī)范化上述的一系列文檔。 這一章強(qiáng)調(diào)文檔重要性,但并沒有將一些教條主義的道理讓你相信文檔的重要性,而是給項(xiàng)目經(jīng)理給出了實(shí)實(shí)在在的操作步驟。

  未雨綢繆 1. 對(duì)于大多數(shù)項(xiàng)目,第一個(gè)開發(fā)的系統(tǒng)并不合用。它可能太慢、太大,而且難以使用,或者三者兼而有之。系統(tǒng)的丟棄和重新設(shè)計(jì)可以一步完成,也可以一塊塊地實(shí)現(xiàn)。這是個(gè)必須完成的步驟,如果將開發(fā)的第一個(gè)系統(tǒng)丟棄原型發(fā)布給用戶,可以獲得時(shí)間,但是它的代價(jià)很高。對(duì)于用戶,使用極度痛苦;對(duì)于重新開發(fā)的人員,分散了精力;對(duì)于產(chǎn)品,影響了聲譽(yù),即使最好的再設(shè)計(jì)也難以挽回名聲。

  2. 用戶的實(shí)際需要和用戶感覺會(huì)隨著程序的構(gòu)建、測(cè)試和使用而變化。

  3. 軟件產(chǎn)品易于掌握的特性和不可見性,導(dǎo)致了它的構(gòu)建人員面臨著永恒的需求變更。

  4. 目標(biāo)和開發(fā)策略上的一些正常變化無可避免,事先為它們做準(zhǔn)備總比假設(shè)它們不會(huì)出現(xiàn)要好得多。

  5. 對(duì)于一個(gè)廣泛使用的程序,其維護(hù)總成本通常是開發(fā)成本的40%或更多。

  6. 維護(hù)成本受用戶數(shù)目的嚴(yán)重影響。用戶越多,所發(fā)現(xiàn)的錯(cuò)誤也越多。

  7. campbell指出了一個(gè)顯示產(chǎn)品生命期中每月bug數(shù)的有趣曲線,它先是下降,然后攀升。

  8. 缺陷修復(fù)總會(huì)以(20-50)%的機(jī)率引入新的bug。

  9. 在每次修復(fù)之后,必須重新運(yùn)行先前所有的測(cè)試用例,從而確保系統(tǒng)不會(huì)以更隱蔽的方式被破壞。

  10. 同樣,設(shè)計(jì)實(shí)現(xiàn)的人員越少、接口越少,產(chǎn)生的錯(cuò)誤也就越少。

  11. 所有修改都傾向于破壞系統(tǒng)的架構(gòu),增加了系統(tǒng)的混亂程度。即使是最熟練的軟件維護(hù)工作,也只是放緩了系統(tǒng)退化到不可修復(fù)混亂的進(jìn)程。 干將莫邪

  項(xiàng)目經(jīng)理應(yīng)該制訂一套策略,以及為通用工具的開發(fā)分配資源,與此同時(shí),他還必須意識(shí)到專業(yè)工具的需求。

  禍起蕭墻 1. 一天一天的進(jìn)度落后比起重大災(zāi)難,更難以識(shí)別,更不容易防范和更加難以彌補(bǔ)。

  2. 根據(jù)一個(gè)嚴(yán)格的進(jìn)度表來控制項(xiàng)目的第一個(gè)步驟是制訂進(jìn)度表,進(jìn)度表由里程碑和日期組成。

  3. 里程碑必須是具體的、特定的、可度量的事件,能進(jìn)行清晰能定義。

  4. 如果里程碑定義得非常明確,以致于無法自欺欺人時(shí),程序員很少會(huì)就里程碑的進(jìn)展弄虛作假。 另外一面 1. 對(duì)于軟件編程產(chǎn)品來說,程序向用戶所呈現(xiàn)的面貌與提供給機(jī)器識(shí)別的內(nèi)容同樣重要。

  2. 即使對(duì)于完全開發(fā)給自己使用的程序,描述性文字也是必須的,因?yàn)樗鼈儠?huì)被用戶和作者所遺忘。

  3. 文檔能在整個(gè)軟件開發(fā)的生命周期對(duì)程序員克服懶惰和進(jìn)度的壓力起促進(jìn)激勵(lì)作用,但向編程人員成功地灌輸對(duì)待文檔的積極態(tài)度是一件困難的事情。

  4. 為了使文檔易于維護(hù),將它們合并至源程序是至關(guān)重要的,而不是作為獨(dú)立文檔進(jìn)行保存。 沒有銀彈

  人狼的傳說可能有人聽過也可能沒聽過,人狼是一種具有人和狼兩種特征的恐怖生物,而銀彈是消滅它的一種最有效的子彈,如果看過《吸血鬼傳說》也許就能和容易的理解這一點(diǎn)。作者將軟件開發(fā)比作人狼,而將提高軟件開發(fā)效率的方法比作銀彈。作者預(yù)言未來十年,想要試圖通過尋找一種有效地銀彈將軟件開發(fā)效率提高一個(gè)甚至幾個(gè)數(shù)量級(jí),這種銀彈不可能出現(xiàn)。

  沒有銀彈這篇文章里作者列舉出了當(dāng)時(shí)一些非常先進(jìn)的技術(shù)或思想理念,例如ada和其他高級(jí)編程語言、面向?qū)ο缶幊?、人工智能、專家系統(tǒng)、"自動(dòng)"編程、圖形化編程、程序驗(yàn)證、環(huán)境和工具、工作站等。雖然這些先進(jìn)技術(shù)在一定程度上提高了軟件開發(fā)的效率,但是始終沒有達(dá)到銀彈的效果。距離作者的預(yù)言已經(jīng)過去有20多年了,縱觀現(xiàn)在的軟件開發(fā)領(lǐng)域,雖然新技術(shù)層出不窮,但是還是沒有一種銀彈能夠讓軟件開發(fā)產(chǎn)生一次革命。

  焦油坑依然存在

  軟件工程的焦油坑在將來很長一段時(shí)間內(nèi)會(huì)繼續(xù)困擾著人們。由于軟件系統(tǒng)多變性和錯(cuò)綜復(fù)雜性,這個(gè)行業(yè)只能是一步一個(gè)臺(tái)階的往上爬,而出現(xiàn)銀彈的希望在我們可以想象的時(shí)間范圍內(nèi)是非常渺茫的。我們將長期與焦油作斗爭。

57545