《人月神話》書摘

推薦理由

作者Frederick P. Brooks,是北卡羅萊納大學(xué)Kenan-Flagler商學(xué)院的計算機(jī)科學(xué)教授。他曾榮獲圖靈獎道伟,美國計算機(jī)協(xié)會(ACM)稱贊他“對計算機(jī)體系結(jié)構(gòu)迹缀、操作系統(tǒng)和軟件工程做出了里程碑式的貢獻(xiàn)∶刍眨”

作為軟件工程領(lǐng)域的重要著作祝懂,《人月神話》結(jié)合工業(yè)界具體的大型系統(tǒng)開發(fā)實例,對軟件開發(fā)領(lǐng)域的諸多問題提出了思考和見解拘鞋,許多論斷被軟件開發(fā)從業(yè)者奉為圭臬砚蓬。經(jīng)過數(shù)十年的時間淬煉,對今天的大型軟件開發(fā)都有啟發(fā)意義盆色。

本書要點

  1. 焦油坑:大型系統(tǒng)開發(fā)中各種問題纏繞和積累在一起灰蛙,使得大型系統(tǒng)的開發(fā)十分困難。
  2. 人月神話:在軟件開發(fā)領(lǐng)域隔躲,用人月作為工作規(guī)模的衡量指標(biāo)并不適用摩梧。
  3. 外科手術(shù)式隊伍:軟件開發(fā)團(tuán)隊可以參照外科手術(shù)式隊伍組成、運(yùn)作宣旱、擴(kuò)建
  4. 貴族專治障本、民主政治和系統(tǒng)設(shè)計:在系統(tǒng)設(shè)計中,概念完整性應(yīng)該是最重要考慮的因素
  5. 畫蛇添足:架構(gòu)師和項目經(jīng)理都需要避免second-system effect
  6. 貫徹執(zhí)行:定義良好的規(guī)格說明是重要的响鹃,會議、測試小組等形式是保證設(shè)計執(zhí)行的良好方式案训。
  7. 為什么巴比倫塔會失斅蛑谩?:軟件團(tuán)隊的交流和組織是軟件開發(fā)成敗的關(guān)鍵
  8. 胸有成竹:對大型軟件系統(tǒng)產(chǎn)品的開發(fā)所需的時間和資源進(jìn)行準(zhǔn)確的估測强霎,能讓我們在項目進(jìn)度和前景胸有成竹
  9. 削足適履:最大化資源利用率忿项;巧妙的數(shù)據(jù)結(jié)構(gòu)
  10. 提綱挈領(lǐng):文檔是重要和必要的
  11. 未雨綢繆:只有“變化“是不變的,為需求和設(shè)計的變化做準(zhǔn)備
  12. 干將莫邪:項目經(jīng)理需要為軟件開發(fā)團(tuán)隊配備完備的工具
  13. 整體部分:好的自頂向下的設(shè)計避免缺陷
  14. 禍起蕭墻:軟件開發(fā)團(tuán)隊需要為計劃和控制投入資源
  15. 另外一面:提供給用戶的使用說明等文檔是軟件呈現(xiàn)給用戶的另外一面
  16. 《沒有銀彈》:由于軟件的復(fù)雜性城舞,一致性轩触,變化性和不可見性,解決軟件危機(jī)的銀彈并不存在
  17. 再論《沒有銀彈》:人們期待中的重大突破不可能在近期內(nèi)到來

精編書摘

焦油坑
過去幾十年的大型系統(tǒng)開發(fā)猶如焦油坑家夺,各種團(tuán)隊一個接一個淹沒在焦油坑中脱柱。表面上沒有任何一個單獨的問題導(dǎo)致困難,當(dāng)他們相互纏繞和累積在一起的時候拉馋,團(tuán)隊的行動就會變得越來越慢榨为。如果想看清這個問題的本質(zhì)惨好,就必須試圖先去理解它。

編程系統(tǒng)產(chǎn)品是大多數(shù)系統(tǒng)開發(fā)的目標(biāo)随闺,然而它的成本是程序的9倍日川。

編程的樂趣在于:編程是一種創(chuàng)建事物的純粹快樂;快樂來自于開發(fā)對其他人有用的東西矩乐;整個過程體現(xiàn)出魔術(shù)般的力量龄句;學(xué)習(xí)的樂趣;工作在如此易于駕馭的介質(zhì)上散罕。

編程的苦惱在于:必須追求完美分歇;由他人來設(shè)定目標(biāo),供給資源笨使,提供信息卿樱;概念性設(shè)計是有趣的,但尋找瑣碎的bug卻只是一項重復(fù)性的活動硫椰;調(diào)試和查錯是往往是線性收斂的繁调;產(chǎn)品在完成時可能就已經(jīng)過時。
人月神話
軟件項目中缺乏合理的時間進(jìn)度的主要原因是:
? 對估算技術(shù)缺乏有效的研究
? 采用的估算技術(shù)隱含的假設(shè)人和月可以互換靶草,錯誤的將工作量與進(jìn)度相互混淆
? 軟件經(jīng)理由于對自己的估算缺乏信心蹄胰,往往不會有耐心持續(xù)的進(jìn)行估算這項工作
? 對進(jìn)度缺少跟蹤和監(jiān)督
? 當(dāng)意識到進(jìn)度的偏移時,下意識的反應(yīng)是增加人力

編程人員的樂觀主義并不應(yīng)該是理所應(yīng)當(dāng)?shù)?/p>

用人月作為衡量一項工作的規(guī)模是一個危險和帶有欺騙性的神話奕翔,在軟件開發(fā)項目中裕寨,由于任務(wù)在次序上的不可分解、培訓(xùn)和交流的需要派继,人月并不適用宾袜。

在早期進(jìn)度策劃時,允許充分的系統(tǒng)測試時間是非常重要的驾窟。
Brooks法則:
向進(jìn)度落后的項目中增加人手庆猫,只會使進(jìn)度更加落后。
外科手術(shù)式隊伍
外科手術(shù)式隊伍的組成:外科醫(yī)生(首席程序員)绅络、副手月培、管理員、編輯恩急、兩個秘書杉畜、程序職員、工具維護(hù)人員衷恭、測試人員此叠、語言專家。

外科手術(shù)式隊伍的運(yùn)作:
? 首席程序員和副手都了解所有的設(shè)計和全部的代碼匾荆,節(jié)省了空間分配拌蜘、磁盤訪問等的勞動量杆烁,同時也確保了工作概念上的完整性。
? 不存在利益上的差別简卧,觀點不一致由首席程序員單方面來統(tǒng)一兔魂。
? 剩余人員職能的專業(yè)化分工是高效的關(guān)鍵,使成員之間采用非常簡單的交流模式成為可能举娩。

外科手術(shù)式隊伍的擴(kuò)建成功依賴于這樣一個事實:每個部分的概念完整性得到了徹底的提高析校。
貴族專治、民主政治和系統(tǒng)設(shè)計
在系統(tǒng)設(shè)計中铜涉,概念完整性應(yīng)該是最重要考慮的因素

概念完整性的獲得:
? 每個部分必須反映相同的原理智玻、原則和一致的折衷機(jī)制。在語法上芙代,每個部分應(yīng)使用相同的技巧吊奢;在語義上,應(yīng)具有相同的相似性纹烹。
? 對于非常大型的項目页滚,將設(shè)計方法、體系結(jié)構(gòu)方面的工作與具體實現(xiàn)相分離是獲得概念完整性的強(qiáng)有力方法铺呵。

外部的體系結(jié)構(gòu)規(guī)定實際上是增強(qiáng)裹驰, 而不是限制實現(xiàn)小組的創(chuàng)造性。

整個創(chuàng)造性活動包括了三個獨立的階段: 體系結(jié)構(gòu)( architecture)片挂、 設(shè)計實現(xiàn)( implementation)幻林、 物理實現(xiàn)( realization)。 在實際情況中音念,它們往往可以同時開始和并發(fā)地進(jìn)行沪饺。

同工作的水平分割相比, 垂直劃分從根本上大大減少了勞動量闷愤, 結(jié)果是使交流徹底地簡化随闽,概念完整性得到大幅提高。

畫蛇添足
架構(gòu)師的交互準(zhǔn)則和機(jī)制:
? 牢記是開發(fā)人員承擔(dān)創(chuàng)造性和發(fā)明性的實現(xiàn)責(zé)任肝谭,所以架構(gòu)師只能建議而不能支配
? 時刻準(zhǔn)備著為所指定的說明建議一種實現(xiàn)的方法,同樣準(zhǔn)備接受其他任何能達(dá)到目標(biāo)的方法蛾扇。
? 對上述的建議保持低調(diào)和平靜
? 準(zhǔn)備放棄堅持所作的改進(jìn)和建議

架構(gòu)師如何避免畫蛇添足--開發(fā)第二個系統(tǒng)所引起的后果(second-system effect)?
? 有意識關(guān)注那些系統(tǒng)的特殊危險攘烛, 運(yùn)用特別的自我約束準(zhǔn)則, 來避免那些功能上的修飾
? 根據(jù)系統(tǒng)基本理念及目的變更镀首, 舍棄一些功能

項目經(jīng)理如何避免畫蛇添足(second-system effect)?
他必須堅持至少擁有兩個系統(tǒng)以上開發(fā)經(jīng)驗結(jié)構(gòu)師的決定坟漱。 同時, 保持對特殊誘惑的警覺更哄, 他可以不斷提出正確的問題芋齿,確保原則上的概念和目標(biāo)在詳細(xì)設(shè)計中得到完整的體現(xiàn)腥寇。

貫徹執(zhí)行
手冊、或者書面規(guī)格說明觅捆,是一個非常必要的工具赦役,盡管光有文檔是不夠的。

會議是必要的栅炒,我們把會議分成兩個級別: 周例會和年度大會——這實際上是一種非常有效的方式

設(shè)立測試小組是使設(shè)計決策得以貫徹執(zhí)行的必要手段掂摔, 同樣也是需要盡早著手,與設(shè)計同時實施的重要環(huán)節(jié)
為什么巴比倫塔會失斢蕖乙漓?
團(tuán)隊相互之間的交流溝通的可能的途徑有:
非正式途徑;會議释移;工作手冊

編程人員僅了解自己負(fù)責(zé)的部分叭披,而不是整個系統(tǒng)的開發(fā)細(xì)節(jié)時,工作效率最高玩讳。 這種方法的先決條件是精確和完整地定義所有接口涩蜘。這的確是一個徹底的解決方法。如果能處理得好锋边,的確是能解決很多“災(zāi)難“皱坛。一個好的信息系統(tǒng)不但能暴露接口錯誤,還能有助于改正錯誤

交流和交流的結(jié)果——組織豆巨, 是成功的關(guān)鍵剩辟。 交流和組織的技能需要管理者仔細(xì)考慮, 相關(guān)經(jīng)驗的積累和能力的提高同軟件技術(shù)本身一樣重要
胸有成竹
對大型軟件系統(tǒng)產(chǎn)品的開發(fā)所需的時間和資源進(jìn)行準(zhǔn)確的估測往扔,能讓我們在項目進(jìn)度和前景胸有成竹贩猎。軟件代碼的開發(fā)效率和代碼模塊之間所需的交互相關(guān)。界面交互復(fù)雜的程序需要更多的測試和調(diào)試時間萍膛,單純地增加人手并不能有助于開發(fā)效率的提高吭服。
削足適履
同任何開銷一樣, 規(guī)模本身不是壞事蝗罗,但不必要的規(guī)模是不可取的

創(chuàng)造出自精湛的技藝艇棕,精煉、充分和快速的程序也是如此串塑。技藝改進(jìn)的結(jié)果往往是戰(zhàn)略上的突破沼琉, 而不僅僅是技巧上的提高

更普遍的是,戰(zhàn)略上突破常來自數(shù)據(jù)或表的重新表達(dá)——這是程序的核心所在
提綱挈領(lǐng)
軟件項目的關(guān)鍵文檔:目標(biāo)桩匪;產(chǎn)品技術(shù)說明打瘪;進(jìn)度表;預(yù)算;工作空間分配闺骚;組織圖

正式文檔的必要性:書面記錄決策是必要的彩扔;文檔能夠作為同其他人的溝通渠道;項目經(jīng)理的文檔可以作為數(shù)據(jù)基礎(chǔ)和檢查列表

未雨綢繆
目標(biāo)上的一些變化無可避免僻爽,事先為它們做準(zhǔn)備總比假設(shè)它們不會出現(xiàn)要好得多虫碉。 不但目標(biāo)上的變化不可避免, 而且設(shè)計策略和技術(shù)上的變化也不可避免进泼。 拋棄原型概念本身就是對事實的接受——隨著學(xué)習(xí)的過程更改設(shè)計

系統(tǒng)軟件開發(fā)是減少混亂度(減少熵)的過程蔗衡,所以它本身是處于亞穩(wěn)態(tài)的。軟件維護(hù)是提高混亂度(增加熵) 的過程乳绕, 即使是最熟練的軟件維護(hù)工作绞惦, 也只是放緩了系統(tǒng)退化到非穩(wěn)態(tài)的進(jìn)程

干將莫邪(sharp tools)
項目經(jīng)理必須考慮、計劃洋措、組織的工具有:
? 計算機(jī)設(shè)施济蝉,需要硬件和使用安排策略
? 操作系統(tǒng),提供服務(wù)的方式必須明了
? 語言菠发,語言的使用方針必須明確
? 實用程序王滤、調(diào)試輔助程序、測試用例生成工具和處理文檔的字處理系統(tǒng)
整體部分
許許多多的失敗完全源于那些產(chǎn)品未精確定義的地方滓鸠。

好的自頂向下設(shè)計從四個方面避免了 bug雁乡。
? 首先, 清晰的結(jié)構(gòu)和表達(dá)方式更容易對需求和模塊功能進(jìn)行精確的描述糜俗;
? 其次踱稍, 模塊分割和模塊獨立性避免了系統(tǒng)級的 bug。
? 另外悠抹, 細(xì)節(jié)的隱藏使結(jié)構(gòu)上的缺陷更加容易識別珠月。
? 第四,設(shè)計在每個精化步驟的層次上是可以測試的楔敌,所以測試可以盡早開始啤挎,并且每個步驟的重點可以放在合適的級別上。
禍起蕭墻
好的里程碑對團(tuán)隊來說實際上是一項服務(wù)卵凑,可以用來向項目經(jīng)理提出合理要求的一項服務(wù)庆聘, 而不確切的里程碑是難以處理的負(fù)擔(dān)。

對計劃和控制職能進(jìn)行適度的技術(shù)人力投資是非常值得贊賞的勺卢。它對項目的貢獻(xiàn)方式和直接開發(fā)軟件產(chǎn)品有很大的不同
另外一面
對于軟件編程產(chǎn)品來說掏觉, 程序向用戶所呈現(xiàn)的面貌與提供給機(jī)器識別的內(nèi)容同樣重要

程序修改人員所使用的文檔中, 除了描述事情如何以外值漫, 還應(yīng)闡述它為什么那樣。對于加深理解织盼,目的是非常關(guān)鍵的杨何,但即使是高級語言的語法酱塔,也不能表達(dá)目的
沒有銀彈
所有軟件活動包括根本任務(wù)——打造由抽象軟件實體構(gòu)成的復(fù)雜概念結(jié)構(gòu),次要任務(wù)——使用編程語言表達(dá)這些抽象實體危虱, 在空間和時間限制內(nèi)將它們映射成機(jī)器語言羊娃。

軟件開發(fā)中困難的部分是規(guī)格化、設(shè)計和測試這些概念上的結(jié)構(gòu)埃跷,而不是對概念進(jìn)行表達(dá)和對實現(xiàn)逼真程度進(jìn)行驗證

現(xiàn)代軟件系統(tǒng)中復(fù)雜度蕊玷、一致性、可變性和不可見性是無法規(guī)避的弥雹。

銀彈的希望:Ada和其他高級編程語言垃帅;面向?qū)ο缶幊蹋蝗斯ぶ悄芗粑穑粚<蚁到y(tǒng)贸诚;“自動”編程;圖形化編程厕吉;程序驗證酱固;環(huán)境和工具;工作站头朱。

針對概念上根本問題的頗具前途的方法:
購買和自行開發(fā)运悲;需求精煉和快速原型;增量開發(fā)--增長项钮,而非搭建系統(tǒng)班眯;卓越的設(shè)計人員
再論《沒有銀彈》
《 沒有銀彈》 提出了全力解決復(fù)雜性問題的方法, 這種方法可以在現(xiàn)實中取得十分樂觀的進(jìn)展寄纵。 它倡導(dǎo)向軟件系統(tǒng)增加必要的復(fù)雜性:層次化鳖敷,通過分層的模塊或者對象;增量化程拭,從而系統(tǒng)可以持續(xù)地運(yùn)行

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末定踱,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子恃鞋,更是在濱河造成了極大的恐慌崖媚,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件恤浪,死亡現(xiàn)場離奇詭異畅哑,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)水由,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門荠呐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事泥张『腔郑” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵媚创,是天一觀的道長渗钉。 經(jīng)常有香客問我,道長钞钙,這世上最難降的妖魔是什么鳄橘? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮芒炼,結(jié)果婚禮上瘫怜,老公的妹妹穿的比我還像新娘。我一直安慰自己焕议,他們只是感情好宝磨,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著盅安,像睡著了一般唤锉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上别瞭,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天窿祥,我揣著相機(jī)與錄音,去河邊找鬼蝙寨。 笑死晒衩,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的墙歪。 我是一名探鬼主播听系,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼虹菲!你這毒婦竟也來了靠胜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤毕源,失蹤者是張志新(化名)和其女友劉穎浪漠,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體霎褐,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡址愿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了冻璃。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片响谓。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡损合,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出娘纷,到底是詐尸還是另有隱情塌忽,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布失驶,位于F島的核電站,受9級特大地震影響枣购,放射性物質(zhì)發(fā)生泄漏嬉探。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一棉圈、第九天 我趴在偏房一處隱蔽的房頂上張望涩堤。 院中可真熱鬧,春花似錦分瘾、人聲如沸胎围。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽白魂。三九已至,卻和暖如春上岗,著一層夾襖步出監(jiān)牢的瞬間福荸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工肴掷, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留敬锐,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓呆瞻,卻偏偏與公主長得像台夺,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子痴脾,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 1 焦油坑: 1.大型軟件系統(tǒng)開發(fā)就像史前各種巨獸在焦油坑中垂死掙扎的場景颤介。在眾多的大型項目開發(fā)中,大多數(shù)能夠開發(fā)...
    環(huán)球探測閱讀 571評論 0 2
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,070評論 25 707
  • 利用平時坐公交和火車的碎片時間明郭,把這本書看完了买窟,記得剛學(xué)編程時,有很多搞IT的朋友都推薦我看看這本書薯定,這也是我讀這...
    道阻且長_行則將至閱讀 382評論 0 1
  • 本文把程序員所需掌握的關(guān)鍵知識總結(jié)為三大類19個關(guān)鍵概念始绍,然后給出了掌握每個關(guān)鍵概念所需的入門書籍,必讀書籍话侄,以及...
    dle_oxio閱讀 11,097評論 6 244
  • 昨晚差點失眠亏推,竟也沒有影響今天上班学赛,還做了一下午的H5,找背景音樂找到吐吞杭,聽著鼓點還能情不自禁的搖起頭盏浇,真的是越來...
    暖暖的小兔閱讀 147評論 0 0