在軟件領(lǐng)域,很少能有像《人月神話》一樣具有深遠(yuǎn)影響力和暢銷不衰的著作。Brooks博士為人們管理復(fù)雜項(xiàng)目提供了最具洞察力的見解,既有很多發(fā)人深省的觀點(diǎn),又有大量軟件工程的實(shí)踐。本書內(nèi)容來自Brooks博士在IBM公司SYSTEM/360家族和OS/360中的項(xiàng)目管理經(jīng)驗(yàn),該項(xiàng)目堪稱軟件開發(fā)項(xiàng)目管理的典范。該書英文原版一經(jīng)面世,即引起業(yè)內(nèi)人士的強(qiáng)烈反響,后又譯為德、法、日、俄、中、韓等多種文字,全球銷售數(shù)百萬冊(cè)。確立了其在行業(yè)內(nèi)的經(jīng)典地位。在《人月神話》第一次出版40年后的今天,我們重新整理了Brooks博士的經(jīng)典內(nèi)容,并將國內(nèi)軟件開發(fā)領(lǐng)域先行者們對(duì)《人月神話》中的實(shí)踐及系統(tǒng)理論的使用經(jīng)驗(yàn)和心得集結(jié)成冊(cè)免費(fèi)贈(zèng)與大家共享,更使本書成為國內(nèi)從業(yè)者的必讀經(jīng)典之一。本書讀者包括:軟件開發(fā)人員、軟件項(xiàng)目經(jīng)理、系統(tǒng)分析師等IT從業(yè)者。 作者簡介: 小弗雷德里克布魯克斯曾獲得美國計(jì)算機(jī)領(lǐng)域最具聲望的圖靈獎(jiǎng)(A.M.TuringAward)。美國計(jì)算機(jī)協(xié)會(huì)(ACM)稱贊他“對(duì)計(jì)算機(jī)體系結(jié)構(gòu)、操作系統(tǒng)和軟件工程做出了里程碑式的貢獻(xiàn)”。布魯克斯博士1956年開始任職于IBM公司,早期擔(dān)任Stretch和Harvest計(jì)算機(jī)的體系建構(gòu)師。他被認(rèn)為是“IBM360系統(tǒng)之父”,曾擔(dān)任360系統(tǒng)的項(xiàng)目經(jīng)理。憑借在此項(xiàng)目中的杰出貢獻(xiàn),他與BobEvans和ErichBloch在1985年獲得了美國國家技術(shù)獎(jiǎng)(NationalMedalofTechnology)。布魯克斯博士創(chuàng)立了北卡羅來納大學(xué)的計(jì)算機(jī)科學(xué)系,并于1965-1985年擔(dān)任系主任。他還曾任職于美國國家科技局和國防科學(xué)技術(shù)委員會(huì)。目前其仍活躍于從事虛擬環(huán)境和科學(xué)可視化等方面的研究工作,2010年獲得虛擬現(xiàn)實(shí)事業(yè)獎(jiǎng)(IEEEVirtualRealityCareerAward)。 目錄: 第1章焦油坑1 編程系統(tǒng)產(chǎn)品4 職業(yè)的樂趣6 職業(yè)的苦惱8 第2章人月神話11 樂觀主義14 人月16 系統(tǒng)測試19 空泛的估算21 重復(fù)產(chǎn)生的進(jìn)度災(zāi)難22 第3章外科手術(shù)隊(duì)伍27 問題30 Mills的建議32 如何運(yùn)作35 團(tuán)隊(duì)的擴(kuò)建36第1章焦油坑1編程系統(tǒng)產(chǎn)品4職業(yè)的樂趣6職業(yè)的苦惱8第2章人月神話11樂觀主義14人月16系統(tǒng)測試19空泛的估算21重復(fù)產(chǎn)生的進(jìn)度災(zāi)難22第3章外科手術(shù)隊(duì)伍27問題30Mills的建議32如何運(yùn)作35團(tuán)隊(duì)的擴(kuò)建36第4章貴族專制、民主政治和系統(tǒng)設(shè)計(jì)39概念的完整性42獲得概念的完整性43貴族專制統(tǒng)治和民主政治44在等待時(shí),實(shí)現(xiàn)人員應(yīng)該做什么47第5章畫蛇添足51結(jié)構(gòu)師的交互準(zhǔn)則和機(jī)制54自律——開發(fā)第二個(gè)系統(tǒng)所帶來的后果55第6章貫徹執(zhí)行59文檔化的規(guī)格說明——手冊(cè)62形式化定義63直接整合66會(huì)議和大會(huì)66多重實(shí)現(xiàn)68電話日志68產(chǎn)品測試69第7章為什么巴比倫塔會(huì)失敗71巴比倫塔的管理教訓(xùn)75大型編程項(xiàng)目中的交流76項(xiàng)目工作手冊(cè)76大型編程項(xiàng)目的組織架構(gòu)80第8章胸有成竹85Portman的數(shù)據(jù)89Aron的數(shù)據(jù)90Harr的數(shù)據(jù)90OS/360的數(shù)據(jù)92Corbató的數(shù)據(jù)93第9章削足適履95作為成本的程序空間98規(guī)模控制99空間技能100數(shù)據(jù)的表現(xiàn)形式是編程的根本102第10章提綱挈領(lǐng)105計(jì)算機(jī)產(chǎn)品的文檔108大學(xué)科系的文檔110軟件項(xiàng)目的文檔110為什么要有正式的文檔111第11章未雨綢繆113試驗(yàn)性工廠和增大規(guī)模116唯一不變的就是變化本身117為變更設(shè)計(jì)系統(tǒng)117為變更計(jì)劃組織架構(gòu)118前進(jìn)兩步,后退一步120前進(jìn)一步,后退一步122第12章干將莫邪125目標(biāo)機(jī)器129輔助機(jī)器和數(shù)據(jù)服務(wù)131高級(jí)語言和交互式編程134第13章整體部分139剔除bug的設(shè)計(jì)142構(gòu)件單元調(diào)試144系統(tǒng)集成調(diào)試147第14章禍起蕭墻153里程碑還是沉重的負(fù)擔(dān)156“其他的部分反正會(huì)落后”158地毯的下面159第15章另外一面165需要什么樣的文檔169流程圖171自文檔化的程序175第16章沒有銀彈181摘要184介紹184根本困難185以往解決次要困難的一些突破190銀彈的希望192針對(duì)概念上根本問題的頗具前途的方法200第17章再論“沒有銀彈”209人狼和其他恐怖傳說212存在著銀彈——就在這里212含糊的表達(dá)將會(huì)導(dǎo)致誤解213Harel的分析216Jones的觀點(diǎn)——質(zhì)量帶來生產(chǎn)率221那么,生產(chǎn)率的情形如何222面向?qū)ο缶幊獭@顆銅質(zhì)子彈可以嗎223重用的情況怎樣225學(xué)習(xí)大量的詞匯——對(duì)軟件重用的一個(gè)可預(yù)見但還沒有被預(yù)言的問題228子彈的本質(zhì)——形勢沒有發(fā)生改變229第18章《人月神話》的觀點(diǎn):是與非231第1章焦油坑234第2章人月神話235第3章外科手術(shù)隊(duì)伍236第4章貴族專制、民主政治和系統(tǒng)設(shè)計(jì)237第5章畫蛇添足238第6章貫徹執(zhí)行239第7章為什么巴比倫塔會(huì)失敗240第8章胸有成竹242第9章削足適履243第10章提綱挈領(lǐng)245第11章未雨綢繆246第12章干將莫邪249第13章整體部分251第14章禍起蕭墻253第15章另外一面255第1版結(jié)束語256第19章20年后的《人月神話》257為什么要出版20周年紀(jì)念版本260核心觀點(diǎn)——概念完整性和結(jié)構(gòu)師261開發(fā)第二個(gè)系統(tǒng)所引起的后果——盲目的功能和頻率猜測263圖形界面的成功265沒有構(gòu)建舍棄原型——瀑布模型是錯(cuò)誤的269增量開發(fā)模型更佳——漸進(jìn)地精化272關(guān)于信息隱藏,Parnas是正確的,我是錯(cuò)誤的276人月到底有多少神話色彩?Boehm的模型和數(shù)據(jù)278人就是一切(或者說,幾乎是一切)280放棄權(quán)力的力量281最令人驚訝的新事物是什么?數(shù)百萬的計(jì)算機(jī)283全新的軟件產(chǎn)業(yè)——塑料薄膜包裝的成品軟件286買來開發(fā)——使用塑料包裝的成品軟件包作為構(gòu)件288軟件工程的狀態(tài)和未來290結(jié)束語:令人向往、激動(dòng)人心和充滿樂趣的50年293注解與參考文獻(xiàn)295附錄:人月落地實(shí)戰(zhàn)體驗(yàn)315一、名家談人月3171.年金3172.《人月神話》與實(shí)踐3183.FrankChance評(píng)人月3274.軟件尚方寶劍(SilverBullet)何在330二、名著評(píng)人月339三、讀者感言3511.讀書有感——人月神話3512.我這幾天很煩(產(chǎn)品概念完整性)3533.關(guān)于我們的思考——“項(xiàng)目開發(fā)”及讀《人月神話》有感3554.我的“人月神話”3585.《人月神話》軟玉生香360前言神品——代序* 這是本書中唯一的一節(jié)廢話。* 我是一個(gè)書狂,積習(xí)甚深,費(fèi)盡心機(jī)在軟件工程、系統(tǒng)工程方面積累了一些書。書,在我看來當(dāng)分為神品、精品和普通三等,其中神品、精品又分別有一、二和三品之分。我所收集的書中,軟件工程書大都屬于精品,神品只有兩本,F(xiàn)rederickP.Brooks的這本書就屬于神品之列。 軟件作為一個(gè)行業(yè),逐步背起了“solvingthe wrong problem”(解決錯(cuò)誤的問題)的名聲。問題決定解決方案,這也就是說,我們一直在制造錯(cuò)誤解決方案!這方面有大量的神品——代序*這是本書中唯一的一節(jié)廢話。*我是一個(gè)書狂,積習(xí)甚深,費(fèi)盡心機(jī)在軟件工程、系統(tǒng)工程方面積累了一些書。書,在我看來當(dāng)分為神品、精品和普通三等,其中神品、精品又分別有一、二和三品之分。我所收集的書中,軟件工程書大都屬于精品,神品只有兩本,F(xiàn)rederickP.Brooks的這本書就屬于神品之列。軟件作為一個(gè)行業(yè),逐步背起了“solvingthewrongproblem”(解決錯(cuò)誤的問題)的名聲。問題決定解決方案,這也就是說,我們一直在制造錯(cuò)誤解決方案!這方面有大量的證據(jù),其中最著名的是美國政府統(tǒng)計(jì)署(GAO)的數(shù)據(jù):全球最大的軟件消費(fèi)商(美國軍方)每年要花費(fèi)數(shù)十億美元購買軟件,而在其所購軟件中,可直接使用的只占2%,另外3%需要做一些修改,其余95%都成了垃圾。一句話,不管這些軟件是否符合需求規(guī)格,它們都顯然沒有滿足客戶的需求。面向?qū)ο蠹夹g(shù)并沒有給我們帶來“神奇的效應(yīng)”,不管開發(fā)商如何吹噓面向?qū)ο驩O(Object-Oriented)工具多么萬能,也不管那些OO狂熱者多么毅然地前赴后繼,這方面的數(shù)據(jù)從20世紀(jì)80年代以來并沒有發(fā)生大的改觀。這實(shí)在令我們的軟件工程專家和從業(yè)人員們羞愧,因?yàn)樗沂玖宋覀兛赡芤婚_始就從根本上做錯(cuò)了什么!20世紀(jì)90年代中期,當(dāng)軟件工程一代宗師MichaelJackson(非歌壇巨星MichaelJackson)宣布他們的研究結(jié)果時(shí),立刻在軟件工程界激起了陣陣漣漪。Jackson指出,軟件從業(yè)人員和方法學(xué)大師們只是簡單地模仿和照搬其他學(xué)科的方法,卻將最重要的方面(問題域)忽略了。他指出,面向?qū)ο蠓椒ê徒Y(jié)構(gòu)化方法對(duì)問題域的處理沒有什么大的區(qū)別,卻被人們過分地用美好的詞匯美化了:“...Youcanseetheresultsclearlyinmanyobject-orientedmodelingdescriptions.Oftentheyareaccompaniedbyfinewordsaboutmodelingtherealworld.Butwhenyoulookcloselyyoucanseethattheyarereallydescriptionsofprogrammingobjects,pureandsimple.Anysimilaritytoreal-worldobjects,livingordead,ispurelycoincidental...”(……從眾多面向?qū)ο蠼5拿枋鲋校憧梢院芮宄乜吹竭@些惡果。而且它們還經(jīng)常伴隨著有關(guān)現(xiàn)實(shí)世界建模的非常美好的詞匯。然而,仔細(xì)看看,你就會(huì)發(fā)現(xiàn)它們其實(shí)是徹頭徹尾的編程對(duì)象!如果說有任何和現(xiàn)實(shí)世界對(duì)象相似的地方,不管是死是活,純屬巧合……)回首軟件工程近40年的發(fā)展,Jackson哀嘆軟件行業(yè)普遍缺乏專業(yè)性,充滿了業(yè)余人員,“手中有一個(gè)錘子,看到什么都是釘子”,誰都可以開發(fā)性命攸關(guān)的軟件。這就是我們面臨的嚴(yán)峻而復(fù)雜的現(xiàn)實(shí),也許您會(huì)感到震驚!然而在大師FrederickP.Brooks眼里,是那么的平靜。因?yàn)樵缭?8年前,他就在《人月神話》(TheMythicalMan-Month)這本不朽著作中對(duì)這些內(nèi)容做了深入論述。這本小冊(cè)子行文優(yōu)美,思想博大精深,字字真言,精讀之有不盡的趣味,藏之又是極珍貴的文獻(xiàn),名眼高人,自能鑒之。前些年,一位朋友從印度歸來,說此書在印度極為普及,我也動(dòng)起筆來,但慚愧終未成正果。汪穎兄素來勤懇,明知此翻譯為“successwithoutapplause,diligencewithoutreward”(沒有掌聲的成功,沒有回報(bào)的勤勉),卻兢兢業(yè)業(yè),反復(fù)琢磨,歷經(jīng)單調(diào)、繁瑣、艱辛的勞動(dòng),終于付梓。欽佩之余隨即作序共勉。DaveWangSEForumChina2002年3月于深圳20周年紀(jì)念版序言令我驚奇和高興的是,《人月神話》在20年后仍然繼續(xù)流行,印數(shù)超過了250000冊(cè)。人們經(jīng)常問,我在1975年提出的觀點(diǎn)和建議,哪些是我仍然堅(jiān)持的,哪些是已經(jīng)改變了的,又是怎樣改變的?盡管我在一些講座上也分析過這個(gè)問題,但我還是一直想把它寫成文章。PeterGordon現(xiàn)在是Addison-Wesley的出版伙伴,他從1980年開始和我共事。他非常有耐心,對(duì)我?guī)椭艽蟆Kㄗh我們準(zhǔn)備一個(gè)紀(jì)念版本。我們決定不對(duì)原版本做任何修訂,只是原封不動(dòng)地重印(除了一些無足輕重的修正),并用更新的思想來擴(kuò)充它。第16章重印了一篇在1986年IFIPS會(huì)議上的論文“沒有銀彈:軟件工程的根本和次要問題”(NoSilverBullet:EssenceandAccidentsofSoftwareEngineering)。這篇文章來自我在國防科學(xué)委員會(huì)主持軍用軟件方面研究時(shí)的經(jīng)驗(yàn)。我當(dāng)時(shí)的研究合作者,也是我的執(zhí)行秘書,RobertL.Patrick,他幫助我回想和感受那些做過的軟件大項(xiàng)目。1987年,IEEE的《計(jì)算機(jī)》(Computer)雜志重印了這篇論文,使它傳播得更廣了!皼]有銀彈”被證明是富有煽動(dòng)性的,它預(yù)言10年內(nèi)沒有任何編程技巧能夠給軟件的生產(chǎn)率帶來數(shù)量級(jí)上的提高。10年只剩下一年了,我的預(yù)言看來是安全了!皼]有銀彈”激起了越來越多文字上的劇烈爭論,比《人月神話》還要多。因此在第17章,我對(duì)一些公開的批評(píng)做了說明,并更新了在1986年提出的觀點(diǎn)。在準(zhǔn)備《人月神話》的回顧和更新時(shí),一直在進(jìn)行的軟件工程研究和經(jīng)驗(yàn)已經(jīng)批評(píng)、證實(shí)或否定了少數(shù)書中斷言的觀點(diǎn),也影響了我。剝?nèi)ポo助的爭論和數(shù)據(jù)后,把那些觀點(diǎn)粗略地分類,對(duì)我來說是很有幫助的。我在第18章列出了這些觀點(diǎn)的概要,希望這些單調(diào)的陳述能夠引來爭論和證據(jù),然后得到證實(shí)、否定、更新或精煉。第19章是一篇更新的短文。讀者應(yīng)該注意的是,新觀點(diǎn)并不像原來的書一樣來自我的親身經(jīng)歷。我在大學(xué)里工作,而不是在工業(yè)界,做的是小規(guī)模的項(xiàng)目,而不是大項(xiàng)目。自1986年以來,我就只是教授軟件工程,不再做這方面的研究。我現(xiàn)在的研究領(lǐng)域是虛擬環(huán)境及其應(yīng)用。在這次回顧的準(zhǔn)備過程中,我找了一些正在軟件工程領(lǐng)域工作的朋友,征求他們現(xiàn)在的觀點(diǎn)。他們很樂意與我分享他們的想法,并仔細(xì)地對(duì)草稿提出了意見,這些都使我重新受到啟發(fā)。感謝BarryBoehm、KenBrooks、DickCase、JamesCoggins、TomDeMarco、JimMcCarthy、DavidParnas、EarlWheeler和EdwardYourdon。感謝FayWard對(duì)新的章節(jié)進(jìn)行了出色的技術(shù)加工。感謝我在國防科學(xué)委員會(huì)軍事軟件工作組的同事GordonBell、BruceBuchanan、RickHayes-Roth,特別是DavidParnas,感謝他們的洞察力和生動(dòng)的想法。感謝RebekahBierly對(duì)第16章的論文進(jìn)行了技術(shù)加工。我把軟件問題分成“根本的”和“次要的”,這是受NancyGreenwoodBrooks的啟發(fā),她在一篇“Suzuki小提琴教育”的論文中應(yīng)用了這樣的分析方法。在1975年版本的序言中,Addison-Wesley出版社按規(guī)定不允許我在書中向該社的一些扮演了關(guān)鍵角色的員工致謝?墒,有兩個(gè)人的貢獻(xiàn)必須特別指出:執(zhí)行編輯NormanStanton和美術(shù)指導(dǎo)HerbertBoes。Boes設(shè)計(jì)了優(yōu)雅風(fēng)格的版式和封面,他在評(píng)注時(shí)特別提到:“頁邊的空白要寬,字體和版面要有想象力。”更重要的是,他提出了至關(guān)重要的建議:為每一章的開頭配一幅圖片(當(dāng)時(shí)我只有“焦油坑”和“蘭斯大教堂”的圖片)。尋找這些圖片使我多花了一年的時(shí)間,但我永遠(yuǎn)感激這個(gè)忠告。SoliDeoGloria——愿神獨(dú)得榮耀。FrederickP.Brooks,Jr.ChapelHill,N.C.1995年3月第1版序言在很多方面,管理一個(gè)大型的計(jì)算機(jī)編程項(xiàng)目與管理其他行業(yè)的大型工程很相似——比大多數(shù)程序員所認(rèn)為的還要相似;在另外一些方面,它又有差別——比大多數(shù)職業(yè)經(jīng)理人所認(rèn)為的差別還要大。這個(gè)領(lǐng)域的知識(shí)在于累積,F(xiàn)在,AFIPS(美國信息處理學(xué)會(huì)聯(lián)合會(huì))已經(jīng)有了一些討論和會(huì)議,也出版了一些書籍和論文,但是還沒有成形的方法對(duì)這一領(lǐng)域來進(jìn)行系統(tǒng)地闡述。提供這樣一本主要反映個(gè)人觀點(diǎn)的小書看來是合適的。雖然我原來從事計(jì)算機(jī)科學(xué)的編程方面的工作,但是在1956—1963年,自動(dòng)控制程序和高級(jí)語言編譯器開發(fā)出來的時(shí)候,我主要參加的是硬件構(gòu)架方面的工作。1964年,我成為操作系統(tǒng)OS/360的經(jīng)理,我發(fā)現(xiàn)前些年的進(jìn)展使編程世界改變了很多。雖然是失敗的,但管理OS/360的開發(fā)仍是一次很有幫助的經(jīng)歷。負(fù)責(zé)這次開發(fā)項(xiàng)目的團(tuán)隊(duì),包括我的繼任經(jīng)理F.M.Trapnell,有很多值得自豪的東西。該系統(tǒng)在設(shè)計(jì)和執(zhí)行方面都很出色,并被成功地應(yīng)用到很多領(lǐng)域,特別是設(shè)備獨(dú)立的輸入輸出和外部庫管理,在很多技術(shù)革新中被廣泛復(fù)制,F(xiàn)在,這一系統(tǒng)是十分可靠的,相當(dāng)有效且非常通用。但是,并不是所有的努力都是成功的。所有OS/360的用戶很快就能發(fā)現(xiàn)它應(yīng)該能夠做得更好。設(shè)計(jì)和執(zhí)行上的缺陷在控制程序中特別普遍,相比之下,語言編譯器就好得多。大多數(shù)缺陷發(fā)生在1964—1965年的設(shè)計(jì)階段,所以這肯定是我的責(zé)任。此外,這個(gè)產(chǎn)品發(fā)布推遲了,需要的內(nèi)存比計(jì)劃中的要多,成本也是估計(jì)的好幾倍,而且第一次發(fā)布時(shí)并不能很好地運(yùn)行,直到發(fā)布了幾次以后,問題才得以解決。按照當(dāng)初接受OS/360任務(wù)時(shí)的協(xié)議,在1965年離開IBM后,我來到ChapelHill。我開始分析OS/360的經(jīng)驗(yàn),看能不能從中學(xué)到什么管理和技術(shù)上的教訓(xùn)。特別要說明的是,System/360硬件開發(fā)和OS/360軟件開發(fā)中的管理經(jīng)驗(yàn)是大相徑庭的。對(duì)TomWatson關(guān)于為什么編程難以管理的探索性問題,這本書是一份遲來的答案。在這次探索中,我和1964—1965年的經(jīng)理助理R.P.Case,還有1965—1968年的經(jīng)理F.M.Trapnell進(jìn)行了長談,從中受益很多。我還對(duì)比了其他大型編程項(xiàng)目經(jīng)理的結(jié)論,這些項(xiàng)目經(jīng)理包括我唯一一本讀過一遍以上的書,是FredBrooks的《人月神話》,實(shí)際上我每過一兩年都會(huì)重讀一遍。部分原因是這本書文筆很好,另外就是書中的忠告很有價(jià)值,即使是在25年以后。當(dāng)然,很多細(xì)節(jié)上的地方與我們做事情的方法有所不同。我們的工作更自動(dòng)化,計(jì)算機(jī)的“馬力”更強(qiáng)勁,但書中依然有許多好的忠告,因此,我非常推崇這本書。這是我唯一能想起來的能從中體會(huì)到樂趣和思想的計(jì)算機(jī)科學(xué)書籍。 ——BrianKernighan,名著《C程序設(shè)計(jì)語言》的合著者之一(與DennisM.Ritchie合作) (《人月神話》)仍然是計(jì)算機(jī)書籍中被引用次數(shù)最多的書籍,而且即便本書最初出版于1975年,其內(nèi)容至今仍未過時(shí)。在閱讀的時(shí)候,每隔幾頁不說一句“對(duì)極了”是很難受的。 ——SteveMcConnell,Construx公司首席軟件工程師,名著《代碼大全》、《快速軟件開發(fā)》的作者 這是一本經(jīng)典著作,與軟件開發(fā)有關(guān)的每一個(gè)人都應(yīng)該不止一遍地讀這本書。我唯一一本讀過一遍以上的書,是FredBrooks的《人月神話》,實(shí)際上我每過一兩年都會(huì)重讀一遍。部分原因是這本書文筆很好,另外就是書中的忠告很有價(jià)值,即使是在25年以后。當(dāng)然,很多細(xì)節(jié)上的地方與我們做事情的方法有所不同。我們的工作更自動(dòng)化,計(jì)算機(jī)的“馬力”更強(qiáng)勁,但書中依然有許多好的忠告,因此,我非常推崇這本書。這是我唯一能想起來的能從中體會(huì)到樂趣和思想的計(jì)算機(jī)科學(xué)書籍!狟rianKernighan,名著《C程序設(shè)計(jì)語言》的合著者之一(與DennisM.Ritchie合作)(《人月神話》)仍然是計(jì)算機(jī)書籍中被引用次數(shù)最多的書籍,而且即便本書最初出版于1975年,其內(nèi)容至今仍未過時(shí)。在閱讀的時(shí)候,每隔幾頁不說一句“對(duì)極了”是很難受的!猄teveMcConnell,Construx公司首席軟件工程師,名著《代碼大全》、《快速軟件開發(fā)》的作者這是一本經(jīng)典著作,與軟件開發(fā)有關(guān)的每一個(gè)人都應(yīng)該不止一遍地讀這本書!狿hilippeKruchten,Rational統(tǒng)一過程首席架構(gòu)師史前史中,沒有別的場景比巨獸們?cè)诮褂涂又写顾罀暝膱雒娓钊苏鸷。上帝見證著恐龍、猛犸象、劍齒虎在焦油中掙扎。它們掙扎得越猛烈,焦油糾纏得就越緊,沒有哪種猛獸足夠強(qiáng)壯或具有足夠的技巧,能夠掙脫束縛,它們最后都沉到了坑底。過去幾十年的大型系統(tǒng)開發(fā)就猶如這樣一個(gè)焦油坑,很多大型和強(qiáng)壯的動(dòng)物在其中劇烈地掙扎。他們中大多數(shù)開發(fā)出了可運(yùn)行的系統(tǒng)——不過只有極少數(shù)的項(xiàng)目滿足了目標(biāo)、進(jìn)度和預(yù)算的要求。各種團(tuán)隊(duì),大型的或小型的,龐雜的或精干的,一個(gè)接一個(gè)地淹沒在了焦油坑中。表面上看起來好像沒有任何一個(gè)單獨(dú)的問題會(huì)導(dǎo)致困難,每個(gè)問題都能獲得解決,但是當(dāng)它們相互糾纏和累積在一起的時(shí)候,團(tuán)隊(duì)的行動(dòng)就會(huì)變得越來越慢。對(duì)于問題的麻煩程度,每個(gè)人似乎都會(huì)感到驚訝,并且很難看清問題的本質(zhì)。不過,如果我們想解決問題,就必須試圖先去了解問題。因此,首先讓我們來認(rèn)識(shí)一下系統(tǒng)開發(fā)這個(gè)職業(yè),以及充滿在這個(gè)職業(yè)中的樂趣和苦惱吧!編程系統(tǒng)產(chǎn)品報(bào)紙上經(jīng)常會(huì)出現(xiàn)這樣的新聞,講述兩個(gè)程序員如何在經(jīng)過改造的簡陋車庫中,編出超過大型團(tuán)隊(duì)工作量的重要程序。接著,每個(gè)編程人員準(zhǔn)備相信這樣的神話,因?yàn)樗雷约耗芤猿^產(chǎn)業(yè)化團(tuán)隊(duì)的1000代碼行/年的生產(chǎn)率來開發(fā)任何程序。為什么不是所有的產(chǎn)業(yè)化隊(duì)伍都會(huì)被這種專注的二人組合所替代?我們必須看一下產(chǎn)出的是什么。圖1-1的左上部分是程序(Program)。它本身是完整的,可以由作者在所開發(fā)的系統(tǒng)平臺(tái)上運(yùn)行。它通常是車庫中產(chǎn)出的產(chǎn)品,以及作為單個(gè)程序員生產(chǎn)率的評(píng)估標(biāo)準(zhǔn)。圖1-1編程系統(tǒng)產(chǎn)品的演進(jìn)有兩種途徑可以使程序轉(zhuǎn)變成更有用但是成本更高的產(chǎn)物,這兩種途徑表現(xiàn)為圖中的邊界。水平邊界以下,程序轉(zhuǎn)變成編程產(chǎn)品(ProgrammingProduct)。這是可以被任何人運(yùn)行、測試、修復(fù)和擴(kuò)展的程序。它可以在多種操作系統(tǒng)平臺(tái)上運(yùn)行,供多套數(shù)據(jù)使用。要成為通用的編程產(chǎn)品,程序必須按照普遍認(rèn)可的風(fēng)格來編寫,特別是輸入的范圍和形式必須廣泛地適用于所有可以合理使用的基本算法。接著,對(duì)程序進(jìn)行徹底測試,確保它的穩(wěn)定性和可靠性,使其值得信賴。這就意味著必須準(zhǔn)備、運(yùn)行和記錄詳盡的測試用例庫,用來檢查輸入的邊界和范圍。此外,要將程序提升為程序產(chǎn)品,還需要有完備的文檔,每個(gè)人都可以加以使用、修復(fù)和擴(kuò)展。經(jīng)驗(yàn)數(shù)據(jù)表明,相同功能的編程產(chǎn)品的成本,至少是已調(diào)試的程序的成本的3倍;氐綀D中,垂直邊界的右邊,程序轉(zhuǎn)變成編程系統(tǒng)(ProgrammingSystem)中的一個(gè)構(gòu)件單元。它是在功能上能相互協(xié)作、具有規(guī)范的格式、可以進(jìn)行交互的程序集合,并可以用來組裝和搭建整個(gè)系統(tǒng)。要成為編程系統(tǒng)構(gòu)件,程序必須按照一定的要求編制,使輸入和輸出在語法和語義上與精確定義的接口一致。同時(shí)程序還要符合預(yù)先定義的資源限制——內(nèi)存空間、輸入輸出設(shè)備、計(jì)算機(jī)時(shí)間。最后,程序必須同其他系統(tǒng)構(gòu)件單元一道,以任何能想象到的組合進(jìn)行測試。由于測試用例會(huì)隨著組合不斷增加,所以測試的范圍必須廣泛。因?yàn)橐恍┮庀氩坏降慕换?huì)產(chǎn)生許多不易察覺的bug,測試工作將會(huì)非常耗時(shí),因此相同功能的編程系統(tǒng)構(gòu)件的成本至少是獨(dú)立程序的3倍。如果系統(tǒng)有大量的組成單元,成本還會(huì)更高。圖1-1的右下部分代表編程系統(tǒng)產(chǎn)品(ProgrammingSystemsProduct)。與以上的所有的簡單的程序都不同的是,它的成本高達(dá)9倍。然而,只有它才是真正有用的產(chǎn)品,是大多數(shù)系統(tǒng)開發(fā)的目標(biāo)。職業(yè)的樂趣編程為什么有趣?作為回報(bào),它的從業(yè)者期望得到什么樣的快樂?首先,這種快樂是一種創(chuàng)建事物的純粹快樂。如同小孩在玩泥巴時(shí)感到快樂一樣,成年人喜歡創(chuàng)建事物,特別是自己進(jìn)行設(shè)計(jì)。我想這種快樂是上帝創(chuàng)造世界的折射,一種呈現(xiàn)在每片獨(dú)特的、嶄新的樹葉和雪花上的喜悅。其次,這種快樂來自于開發(fā)對(duì)他人有用的東西。內(nèi)心深處,我們期望我們的勞動(dòng)成果能夠被他人使用,并能對(duì)他們有所幫助。從這一角度而言,這同小孩用粘土為“爸爸的辦公室”捏制鉛筆盒沒有任何本質(zhì)的區(qū)別。第三,快樂來自于整個(gè)過程體現(xiàn)出的一股強(qiáng)大的魅力——將相互嚙合的零部件組裝在一起,看到它們以精妙的方式運(yùn)行著,并收到了預(yù)期的效果。比起彈球游戲機(jī)或自動(dòng)電唱機(jī)所具有的迷人魅力,程序化的計(jì)算機(jī)毫不遜色。第四,這種快樂是持續(xù)學(xué)習(xí)的快樂,它來自于這項(xiàng)工作的非重復(fù)特性。人們所面臨的問題總有這樣那樣的不同,因而解決問題的人可以從中學(xué)習(xí)新的事物,有時(shí)是實(shí)踐上的,有時(shí)是理論上的,或者兼而有之。最后,這種快樂還來自于在易于駕馭的介質(zhì)上工作。程序員,就像詩人一樣,幾乎僅僅在單純的思考中工作。程序員憑空地運(yùn)用自己的想象,來建造自己的“城堡”。很少有創(chuàng)造介質(zhì)如此靈活,如此易于精煉和重建,如此容易實(shí)現(xiàn)概念上的設(shè)想(不過我們將會(huì)看到,容易駕馭的特性也有它自己的問題)。然而程序畢竟同詩歌不同,它是實(shí)實(shí)在在的東西;它可以移動(dòng)和運(yùn)行,能獨(dú)立產(chǎn)生可見的輸出;它能打印結(jié)果,繪制圖形,發(fā)出聲音,移動(dòng)支架。神話和傳說中的魔術(shù)在我們的時(shí)代已變成現(xiàn)實(shí)。在鍵盤上鍵入正確的咒語,屏幕會(huì)活動(dòng)、變幻,顯示出前所未有的也不可能存在的事物。編程的快樂在于它不僅滿足了我們內(nèi)心深處進(jìn)行創(chuàng)造的渴望,而且還喚醒了每個(gè)人內(nèi)心的情感。
|