
中文網(wǎng)站:http://www.mmmbook.com/
《人月神話》軟玉生香來(lái)源:http://www.mmmbook.com/review/beauty.htm
關(guān)于我的《人月神話》書(shū)評(píng)來(lái)源:http://www.csdn.net/Develop/Article/17/17031.shtm
書(shū)評(píng):
《人月神話》軟玉生香
劉天北 著
從尺寸說(shuō)起
豆豆先生(Mr. Bean)(編注:著名喜劇片的主人公)贊許惠斯勒的《畫(huà)家母親的肖像》,首先談的一點(diǎn)就是:"這幅畫(huà)比較大(quite big),所以了不起(excellent)"。這種批評(píng)套路,中國(guó)古已有之:品茶時(shí)贊美“熱得好”就是。今天我們談?wù)凚rooks的《The Mythical Man-Month》(中譯為"人月神話",下簡(jiǎn)稱MMM),也效法英國(guó)來(lái)的專家,從尺寸說(shuō)起:這本書(shū)的一個(gè)突出優(yōu)點(diǎn),在于它比較小。
小有兩點(diǎn),一是開(kāi)本,一是頁(yè)數(shù)。尼采說(shuō),我的野心是用一句話說(shuō)完別人十本書(shū)才能說(shuō)清的事(他還加了一句--甚或是,十本書(shū)都說(shuō)不清的事)。可是對(duì)于出版工業(yè),這樣的野心家不要也罷。多數(shù)書(shū)長(zhǎng),還是因?yàn)樗婕暗念I(lǐng)域本身頭緒眾多,不過(guò)總可以用得上法國(guó)人的俏皮話:他沒(méi)有時(shí)間往短里寫(xiě)。把書(shū)寫(xiě)短不是人人都可以辦到的,這需要良好的分寸感和結(jié)構(gòu)感--都是很難在匆忙的IT從業(yè)者中找到的素質(zhì)。是以一般技術(shù)書(shū)籍,多為人高馬大,卷帙繁浩(當(dāng)然還有國(guó)內(nèi)影印版的慣常做法,把原來(lái)的大開(kāi)本縮印成小兄弟,但考慮到增加的閱讀難度,結(jié)果并沒(méi)有想象的那么經(jīng)濟(jì))。“大”,對(duì)于書(shū)--尤其是技術(shù)書(shū)--來(lái)說(shuō),不見(jiàn)得就“了不起”。以我個(gè)人的閱讀習(xí)慣,多于五百頁(yè)、開(kāi)本又超過(guò)“大32開(kāi)”的技術(shù)專著,那就只能當(dāng)字典查,又好比皇宮里的大齡宮女,偶一調(diào)情也可,若要三千寵愛(ài)集一身,不啻為非分之想。本來(lái)一卷在手,有如軟玉生香在抱,總以“輕”、“薄”為妙,若是龐然巨物,體態(tài)狼伉,未免讓人產(chǎn)生心理障礙(借此一角向通讀了《C++ Primer》的各位致意:你們都可以去做《大內(nèi)密探零零發(fā)》里艷福齊天的皇上)。眼下說(shuō)的這本MMM,正是技術(shù)書(shū)中的趙飛燕,可作字面意義上的掌上舞:大32的開(kāi)本,算上注釋、索引共332頁(yè),要緊的是,每章前的大量篇幅留給題圖和題記,19章下來(lái),實(shí)在要讀的內(nèi)容不到200頁(yè)。
如果決定讀這本書(shū),你也許可以參照我個(gè)人的經(jīng)驗(yàn)做出時(shí)間預(yù)算:并非出于固定的讀書(shū)計(jì)劃,而是為了謀殺早晨巴士上的無(wú)聊時(shí)間,我選中了這本相貌可人、插圖眾多的MMM(它的前任似乎是袖珍本的斯各特船長(zhǎng)傳)。在前一周的周日下午我興味盎然地覆蓋了書(shū)末的三章:后記(“The MMM after 20 years”)、作者著名的單篇論文《沒(méi)有銀彈(No Silver Bullet)》和《再論沒(méi)有銀彈(No Silver Bullet Refired)》;這之后,第1章以下的若干章大約以每次1章半到2章的速度平均分布在5次車(chē)中顛簸的早高峰時(shí)間(每次約35至40分鐘,并有一次坐過(guò)站);最后,一個(gè)睡眼惺忪的周六上午讓我完成了其余部分--我沒(méi)法相信,這種"休閑"的閱讀形式適用于任何一本其他的技術(shù)“名著”(可能的例外是《Peopleware》(《人件》,即將由清華大學(xué)出版社出版,譯者為UMLChina翻譯組方春旭、葉向群),我們一會(huì)兒還會(huì)談到它)--或許你明早會(huì)帶上本《Planning XP》試試。
美味的分析
那么,除了小,這書(shū)還有什么好處?對(duì),再就是:它比較好讀。我看書(shū)也純粹是"以貌取人",外表即是一切(法國(guó)人說(shuō):皮膚是人最深刻的部分)。就像飯菜, "好吃"就好,營(yíng)養(yǎng)等等在我輩老饕看來(lái),還是第二義,而出于“精神食糧”這話的本意,“好讀”也該是對(duì)書(shū)的最高贊許。
好讀有兩層意思,讀起來(lái)容易,和讀起來(lái)可口。小書(shū)不都易讀(聽(tīng)說(shuō)過(guò)《邏輯哲學(xué)論》?),易讀的書(shū)也不都可口(有些易讀則易讀矣,但就好像小兒止咳糖漿,來(lái)多了就是對(duì)你智力的侮辱--還用提余秋雨老師嗎?)但對(duì)于一本技術(shù)書(shū)而言,把自己的主題講清楚了,而且還易讀,也是了不起的成就。好些人寫(xiě)書(shū),一味在“內(nèi)在美”上下功夫,殊不知,“可接近性”才是首要的一環(huán):我們不也說(shuō)“可口”、“可人兒”嗎?“可”(也是accessibility里的ability)最要緊。
回到正題,談?wù)勅珪?shū)的結(jié)構(gòu):我手上這本MMM的二十年紀(jì)念版(Anniversary Edition),共19章(另有簡(jiǎn)短的前言--初版和再版各一篇--和尾聲)。其中,第1到15章是初版內(nèi)容,最長(zhǎng)的一章17頁(yè),最短的第五章刨去題圖和題記,不過(guò)薄薄兩張半紙而已。作者稱這些章節(jié)為"隨筆(essays)",每章各自處理相對(duì)獨(dú)立的主題(“人月”問(wèn)題、軟件項(xiàng)目的人員構(gòu)成、開(kāi)發(fā)中的交流、文檔、排錯(cuò)等等),因而你基本可以不顧及章節(jié)間的聯(lián)系,單獨(dú)從你感興趣的任何段落入手。書(shū)末的四章里,第18章"Proposition of MMM:True or False?"是對(duì)之前各章所有觀點(diǎn)的一個(gè)列表--一個(gè)非常便于翻檢和溫習(xí)的設(shè)置;其他的三章(對(duì)于“銀彈”的兩篇討論和后記)篇幅在二十到四十頁(yè),值得專門(mén)對(duì)待。對(duì)于一本初版于多年前的技術(shù)書(shū)籍,作者并沒(méi)有逐條修訂原有的內(nèi)容,而選擇了重印這些章節(jié),同時(shí)在后記中根據(jù)二十年來(lái)的技術(shù)上和認(rèn)識(shí)上的變化檢討得失。
現(xiàn)在,你大概能模糊地看到這本書(shū)的樣子:很薄,隨手翻上去每章很短,并包含大量整頁(yè)的插圖(從側(cè)面看,書(shū)頁(yè)的顏色黑白參差)。換言之,可讀性首先來(lái)自于外表,你拿起它,馬上就感到美味當(dāng)前。
然后你會(huì)注意到書(shū)的風(fēng)格。關(guān)于原版技術(shù)書(shū)的語(yǔ)言風(fēng)格,我曾經(jīng)在別處做過(guò)一個(gè)區(qū)分:可讀的/可翻譯的(對(duì)另一對(duì)為人熟知的法國(guó)概念的蹩腳模仿)。“可讀的”風(fēng)格主要出現(xiàn)在用母語(yǔ)寫(xiě)作的作家筆下。他們能夠自如地使用語(yǔ)言中的元素,幾乎總能找到對(duì)特定概念最合適的表達(dá)。這些表達(dá),往往植根于該語(yǔ)言自身,因此很難轉(zhuǎn)換為另一種語(yǔ)言。比如本書(shū)作者給討論“系統(tǒng)空間限制”的一章的標(biāo)題是“ten pounds in five-pound sack”。對(duì)任何具備高考英語(yǔ)水平的讀者,這里的意思都非常直觀,但是誰(shuí)能輕易地給出它的中文等價(jià)物?"削足適履" ?(我碰巧知道中譯本就是這么翻譯的。)“五磅的麻袋裝十磅”?另一方面,“可翻譯的”文本則多為移民作家的產(chǎn)物。對(duì)于一個(gè)概念,他們?nèi)狈Α白匀坏摹北磉_(dá)方式。他們?cè)谟脛e人的語(yǔ)言,一串串的詞像臨時(shí)借用的家具一樣擺放那里。你可以簡(jiǎn)單地逐字翻譯這樣的文本,甚至可以采用機(jī)器翻譯而不會(huì)犯大錯(cuò)誤(從Jacobson et al的OOSE摘引隨便一句:"When strong semantics are provided at the behavioral description level for all of these fundamental issues, they radically affect the selection of an appropriate resource structure."),但是無(wú)論譯或不譯,都很難馬上明白他說(shuō)的是什么。當(dāng)然,這只能是對(duì)實(shí)際情況的最簡(jiǎn)化的0階模擬(一些喜歡在行文中加入俚語(yǔ)的本土作家?guī)缀醪荒軞w入任何一邊)。但是,當(dāng)我說(shuō)出"可讀的"時(shí),我首先想到的就是Brooks和另一位大師Martin Fowler。二者的風(fēng)格具有不少共同之處:親切、不賣(mài)弄,能用最普通的英語(yǔ)說(shuō)明(有時(shí)是令我們的漢語(yǔ)絕望的)復(fù)雜問(wèn)題。
本書(shū)的作者Brooks(也許應(yīng)該說(shuō)"小"布魯克斯才對(duì),因?yàn)樗娜?Fredrick P. Brooks, Jr."),曾擔(dān)任IBM的大型機(jī)System/360及其操作系統(tǒng)OS/360的開(kāi)發(fā)項(xiàng)目經(jīng)理,被稱為“S/360之父”,之后轉(zhuǎn)入大學(xué),執(zhí)教多年,因而難能一見(jiàn)地在實(shí)際項(xiàng)目管理和教學(xué)上都具備世界級(jí)水平。在離開(kāi)IBM近十年之后(1975年),他根據(jù)大量切身實(shí)踐和教學(xué)經(jīng)驗(yàn)寫(xiě)出了本書(shū),在風(fēng)格上,也兼具教師的醇厚耐心和工程師的技術(shù)素質(zhì)。我個(gè)人最受益于書(shū)中隨處可見(jiàn)的精彩的比喻。僅僅舉幾個(gè)例子:“焦油坑”、“大教堂”、“外科手術(shù)隊(duì)伍”、“銀彈”,就我記憶而言,幾乎每一個(gè)都是對(duì)所指對(duì)象最貼切的形容。而這些隱喻的光彩,又通過(guò)眾多題圖、題記(有時(shí)不失幽默)的反射,獲得了熠熠生輝的效果。
在很多情況下,過(guò)分追求“幽默感”也會(huì)產(chǎn)生止咳糖漿式的效果。典型的例子是Peopleware。與MMM相比,那本書(shū)總是給我一種推銷(xiāo)員教材的印象。二書(shū)作者技術(shù)背景(我不認(rèn)為DeMarco們?cè)鴧⒓舆^(guò)嚴(yán)肅的軟件項(xiàng)目)、宗教背景的不同(Brooks是位虔誠(chéng)的基督徒)也許可以解釋賣(mài)弄和樸實(shí)、空洞和厚重之間的差距。
來(lái)自法式餐館、手術(shù)臺(tái)和狼人的啟示
讓我們回顧豆豆本人的批評(píng)實(shí)踐。在我看來(lái),它具備難以錯(cuò)認(rèn)的形式主義特征:主要考慮“外在”的、形式的(比如畫(huà)的大小)要素,而忽略作品實(shí)際再現(xiàn)的內(nèi)容--我們記得豆豆本人唯一一次提及畫(huà)中的那位老太太時(shí)的措辭:停在仙人掌上的、丑惡的老蝙蝠("a hideous old bat who looks like she's got a cactus lodged up her backside")。我也要采用這樣的策略嗎?讀者們(我設(shè)想,看到這篇書(shū)評(píng)的各位多數(shù)是技術(shù)專家)恐怕會(huì)譏之為買(mǎi)櫝還珠,另外,MMM的內(nèi)容也遠(yuǎn)比“老蝙蝠”更有可談之處。但即便如此,逐一考察書(shū)中的觀點(diǎn)也是不現(xiàn)實(shí)的:首先,沒(méi)有人比作者已經(jīng)做過(guò)的更好,如果你確實(shí)需要,不如去看原書(shū)第18章;其次,全書(shū)并沒(méi)有一個(gè)一以貫之的中心思想可以提取,對(duì)于比如說(shuō)溝通、文檔、排錯(cuò)、工具等領(lǐng)域,每一個(gè)都值得專文仔細(xì)討論。經(jīng)過(guò)考慮,我決定談?wù)勀切o(wú)需我重讀原書(shū)就可以回想起來(lái)的內(nèi)容--這也就是經(jīng)過(guò)我的巴士閱讀實(shí)踐(基本上是一個(gè)高通濾波過(guò)程)幸存下來(lái)的精華成分。
人月
首先是“人月(man-month)”。熟悉軟件項(xiàng)目管理的各位肯定清楚,人們常常根據(jù)人月來(lái)估計(jì)工作量(并相應(yīng)收費(fèi)),比如一個(gè)項(xiàng)目五人兩月完成,那么總工作量就是10人月。本書(shū)以此命名,套用唱片工業(yè)的術(shù)語(yǔ),可以說(shuō)"人月神話"是本"專輯"中主打篇目,而除了以之為標(biāo)題的第二章之外,并沒(méi)有太多內(nèi)容與此有關(guān)。
稱之為“神話”,作者的用意也并非完全否定作為計(jì)量方法的人月,而是要理清這個(gè)概念中隱含的種種錯(cuò)覺(jué)。根據(jù)我勤勉而不可靠的記憶,這里的主要論斷包括:1. 人/月之間不能換算,換言之,兩人做五個(gè)月完成,不等于說(shuō)五人做兩個(gè)月就能完成;2.(也是最有爭(zhēng)議的一點(diǎn))在項(xiàng)目后期增加人手,只能使工期進(jìn)一步推遲;3.項(xiàng)目越大,單位工作需要的人月越多。或者說(shuō),歸根結(jié)蒂,作者要粉碎的是“人月”概念可以線性把握的神話:無(wú)論是開(kāi)發(fā)人員的人數(shù)上,還是工作量本身上的變化,都可能導(dǎo)致最終完成時(shí)間的非線性變化。作者的戲劇性表述是:Adding manpower to a late software project makes it even later. 這個(gè)觀點(diǎn)事實(shí)上并非像它看上去那么有挑釁性,而作者在初版以及后記中,都表示這包含了合理的夸張,后記里甚至援引進(jìn)一步的研究表示,增加人手不一定會(huì)使工期進(jìn)一步推遲,不過(guò)肯定會(huì)使工程效率進(jìn)一步降低--而如果一定要增加人手,越早越好。
得出這樣的結(jié)論,主要的考慮是增加人手帶來(lái)的隱性花費(fèi)(人員培訓(xùn)、多人工作時(shí)的通信成本等等)以及項(xiàng)目進(jìn)程中存在的無(wú)法逾越的關(guān)鍵路徑(crucial path)。對(duì)于項(xiàng)目管理人員來(lái)說(shuō),這應(yīng)該已經(jīng)是一個(gè)不言而喻的真理。但由于最終決策者的壓力,實(shí)際項(xiàng)目中卻往往會(huì)發(fā)生與此違背的情況。作者把一份法式餐廳菜單塞進(jìn)了書(shū)中作為題圖,我也建議大家學(xué)會(huì)菜單上的那個(gè)句子:Faire de la bonne cuisine demande un certain temps. Si on vous fait attendre, c'est pour mieux vous servir, et vous plaire(做好菜需要一定的時(shí)間。如果人家讓您多等會(huì)兒,那是為了讓您最后吃得高興。) 對(duì)于說(shuō)法語(yǔ)的客戶/老板,這會(huì)是一個(gè)好的搪塞。
概念完整性
如果一定要找到貫穿全書(shū)的概念的話,"概念完整性(conceptual integrity)"可能算是一個(gè)。寧可少添加一些七七八八的功能(anomalous features),也應(yīng)該保證,整個(gè)系統(tǒng)體現(xiàn)的是完整的一套設(shè)計(jì)理念 :這是引入概念完整性的含義。概念完整性的受益者包括最終用戶、系統(tǒng)開(kāi)發(fā)者、培訓(xùn)員和服務(wù)人員。概念完整性保持得好的系統(tǒng)更易用,需要較短的培訓(xùn)時(shí)間和學(xué)習(xí)時(shí)間,同時(shí)也更易于開(kāi)發(fā)。但是在軟件生產(chǎn)的實(shí)踐中,各級(jí)決策者都很容易產(chǎn)生強(qiáng)調(diào)“功能”而忽視概念完整性的傾向。因此我們看到了太多包含大量“功能”,而就整體而言不知所云的系統(tǒng),也出現(xiàn)過(guò)太多次由于一兩個(gè)附加功能的實(shí)現(xiàn)難度而導(dǎo)致整個(gè)系統(tǒng)開(kāi)發(fā)推遲、甚至難產(chǎn)的事例。
所以作者提出,概念完整性是系統(tǒng)設(shè)計(jì)中最重要的考慮。在保證概念完整性的各方面中,我認(rèn)為作者提出的兩點(diǎn)最為有趣。第一,要克服系統(tǒng)的“第二版效應(yīng)(the second system effect)”。一個(gè)系統(tǒng)設(shè)計(jì)師在設(shè)計(jì)第一版系統(tǒng)時(shí),往往出于較弱的自信心以及量力而行的考慮,會(huì)盡量剪裁要實(shí)現(xiàn)的功能數(shù)量。而當(dāng)?shù)谝话嫦到y(tǒng)成功發(fā)布,開(kāi)始第二版的設(shè)計(jì)時(shí),隨著自信心的增強(qiáng),大量以前被壓制的提議都會(huì)重現(xiàn),設(shè)計(jì)師在塞入新的功能時(shí)也會(huì)不再那么保守。這很可能導(dǎo)致一個(gè)臃腫而缺乏概念完整性的第二版系統(tǒng)(作者的1995年舉的例子是Windows 31之后的Windows NT)。第二,整個(gè)項(xiàng)目團(tuán)隊(duì)的有效組織有助于保證概念完整性。首先,要區(qū)分產(chǎn)品人員和開(kāi)發(fā)人員,architect和implementer。這里所說(shuō)的architect相當(dāng)于一般而言的產(chǎn)品經(jīng)理。只有他以及少數(shù)的幾個(gè)人能確定整個(gè)的產(chǎn)品需求,而不應(yīng)把即使是最細(xì)微的需求留給開(kāi)發(fā)人員確定。在需求確定的過(guò)程中,多次反復(fù),包括來(lái)自開(kāi)發(fā)人員的反饋都是必要的,但為確保概念完整性,做出決定的必須是少數(shù),甚至一個(gè)人。另外,在開(kāi)發(fā)中可以考慮“外科手術(shù)式的”開(kāi)發(fā)團(tuán)隊(duì),即,由唯一的“手術(shù)師”(技術(shù)大拿)以及多個(gè)助手、測(cè)試員、聯(lián)絡(luò)人員、文檔/工具/配置管理員、秘書(shū)等組成的隊(duì)伍。顯然無(wú)論是產(chǎn)品/開(kāi)發(fā)人員的區(qū)分,還是外科手術(shù)式隊(duì)伍的引入,核心原則都是1)職能細(xì)分;2)將高要求的工作集中在少數(shù)人手中。事實(shí)上,作者在其他的章節(jié)里說(shuō)過(guò),提高軟件項(xiàng)目的質(zhì)量的最好辦法之一,就是找到合適的人。“偉大”的設(shè)計(jì)師和普通設(shè)計(jì)師之間的差別,比采用任何先進(jìn)工具/方法論/管理模式前后的差別都要大。
銀彈和其他
另外,增補(bǔ)部分中的"銀彈"是作者獨(dú)創(chuàng)的又一個(gè)概念。在古代的狼人傳說(shuō)中,只有用銀質(zhì)子彈才能制服這些舉止無(wú)常的怪獸。因此作者也用“銀彈”一詞,命名人們渴望找到的制服軟件項(xiàng)目這頭難纏的怪獸的法寶。“沒(méi)有銀彈”意味著,沒(méi)有任何一種方法(無(wú)論技術(shù)上的或是管理上的),單單采取它就能將現(xiàn)有的軟件開(kāi)發(fā)生產(chǎn)率(可靠度/簡(jiǎn)潔度)提高一個(gè)數(shù)量級(jí)。
作者的論證是簡(jiǎn)潔而(在我看來(lái))有效的:軟件開(kāi)發(fā)的困難來(lái)自兩個(gè)方面:本質(zhì)的和偶然的(類似于經(jīng)院哲學(xué)中的本質(zhì)/偶性的對(duì)立)。本質(zhì)的困難是軟件開(kāi)發(fā)本身所固有的,無(wú)法用任何方式取消的,而偶然的困難是其中的非本質(zhì)因素,可以通過(guò)引入新工具、方法論或管理模式來(lái)消除。關(guān)鍵在于,只要本質(zhì)的困難在軟件開(kāi)發(fā)中消耗百分之十以上的工作量,則即使全部消除偶然困難也不可能使生產(chǎn)率提高10倍。
就像作者其他很多論證一樣,讀完關(guān)于銀彈的部分我們或者會(huì)說(shuō)“本來(lái)就是這樣,這還用說(shuō)”,或者會(huì)說(shuō)“這么簡(jiǎn)單的事,我以前怎么沒(méi)有想到”。正是這種介乎漠視和震驚之間的搖擺體現(xiàn)了這些論斷的價(jià)值:它們也許在理論上已經(jīng)是被過(guò)分強(qiáng)調(diào)、被超越、被唾棄的了,但即便如此,在實(shí)踐中我們往往連這些基本的原則都會(huì)完全不顧。對(duì)我們而言,MMM或許首先是一本關(guān)于態(tài)度的書(shū)。它指認(rèn)的問(wèn)題首先是,對(duì)待軟件開(kāi)發(fā)工作時(shí)應(yīng)采取怎樣的態(tài)度。正是因?yàn)槟撤N態(tài)度,我們才會(huì)熱衷于尋找解決一切問(wèn)題的銀彈(RUP也好,CMM也好,XP/Agile也好)而從未誠(chéng)心誠(chéng)意地貫徹其中任何一個(gè)原則;我們才會(huì)急于在系統(tǒng)中塞入一個(gè)又一個(gè)的功能,無(wú)視用戶使用時(shí)的實(shí)際效果;我們才會(huì)無(wú)法相信自己能夠組成“外科手術(shù)式”的團(tuán)隊(duì),無(wú)法找到不做產(chǎn)品設(shè)計(jì)的開(kāi)發(fā)人員;我們才會(huì)一次次接受形形色色的人月調(diào)整,最后把一個(gè)個(gè)項(xiàng)目帶進(jìn)了“焦油坑”。 據(jù)我看來(lái),軟件工程首先是一種緩慢的藝術(shù)。在這中間,籌劃、交流、冥想以及迭代占有很大比重,同樣(如果不是更重要的),錯(cuò)位、反復(fù)甚至離題也應(yīng)據(jù)有一席之地。即便強(qiáng)調(diào)工程的可控性,也難以排除這些必要的環(huán)節(jié)(記得法式餐館的例子?)。我們所能做的,是給它們足夠的時(shí)間和容忍(你知道我不是指縱容延期)。
Brooks在書(shū)中提出的兩組時(shí)間比例也許值得留意:一個(gè)“能轉(zhuǎn)(ready to run)”的程序(program)要變成程序產(chǎn)品(programming product)需要3倍于編程的時(shí)間;同樣,能轉(zhuǎn)的程序變成程序系統(tǒng)(programming system)也需要3倍的時(shí)間。準(zhǔn)此,則要獲得程序系統(tǒng)產(chǎn)品(programming systems product--有點(diǎn)拗口,但仔細(xì)想想,還可以?),需要9倍于編寫(xiě)“能轉(zhuǎn)”的程序的時(shí)間。另外,他在提到工期規(guī)劃時(shí)說(shuō),整個(gè)工期的三分之一給計(jì)劃(planning),六分之一編碼(coding),四分之一組件測(cè)試和早期系統(tǒng)測(cè)試(component test and early system test),最后四分之一系統(tǒng)測(cè)試。
類似的劃分,遠(yuǎn)比我們常見(jiàn)的各種方法論中的“里程碑”粗糙得多,但是,有多少人在實(shí)踐中相信編碼應(yīng)只占整個(gè)工期的六分之一甚至九分之一?是否仍是“態(tài)度”的原因使我們失去了緩慢工作的能力?我們能把這種態(tài)度命名為“浮躁”嗎?當(dāng)所有競(jìng)爭(zhēng)者都許諾只用那六分之一就能完成整個(gè)項(xiàng)目的時(shí)候,你能堅(jiān)持那個(gè)“一”嗎?我們能像提高氣功境界那樣,從一種態(tài)度躍遷到另一種嗎?軟件開(kāi)發(fā)是一種氣功嗎?外科手術(shù)、銀彈和法國(guó)菜都是氣功嗎?狼人能用氣功治好嗎?氣功也能用人月估計(jì)嗎?豆豆和老蝙蝠,誰(shuí)更像狼人?狼人也會(huì)浮躁嗎?浮躁的狼人究竟更需要?dú)夤€是銀彈?還是書(shū)評(píng)?一篇豆豆式的書(shū)評(píng)? 尾聲
寫(xiě)到這里,我愿意介紹我手頭這本MMM的由來(lái)。打開(kāi)書(shū)皮,我能看到封底處“Low Price Edition (LPE) authorized for sales only in India, Bangladesh, Pakistan, Nepal, Sri Lanka and Maldives”的字樣。原有的書(shū)店標(biāo)簽(我印象中是"Graham,250rs")不知什么時(shí)候脫落了。但即使缺乏這個(gè)標(biāo)簽,僅僅“LPE”還是能讓我回想起在班加羅爾Graham書(shū)店度過(guò)的那個(gè)匆忙的黃昏:第三或四層是技術(shù)專區(qū)--我開(kāi)始只找到了Jacobson們的OOSE(有點(diǎn)困惑于復(fù)雜的書(shū)店布局)--看到另外一人手中的Software Project Survival Guide--我求助于一個(gè)店員,他立刻拿給我那本書(shū),和一本MMM--另一個(gè)店員看到它們,又遞來(lái)一本Peopleware.
本文的完成,主要與我一次偶然的閱讀有關(guān),與一些論壇中朋友們對(duì)MMM的熱衷和猜想有關(guān),而與該書(shū)中文版本的推出可能只有間接的關(guān)系。我無(wú)意以此給這個(gè)譯本作任何廣告(我在別處談過(guò)我對(duì)中文翻譯的態(tài)度),當(dāng)然更無(wú)意作反廣告。不過(guò),如果現(xiàn)在手頭沒(méi)有這本書(shū)的話(一個(gè)不幸的假設(shè)),我會(huì)到書(shū)店翻翻那個(gè)譯本,看看插圖復(fù)制的質(zhì)量(尤其是那些銅版畫(huà)--LPE能讓我數(shù)清狼人腳爪上的毛),再看看書(shū)后還有沒(méi)有注釋和索引。仍然是那些外在的、膚淺的因素會(huì)決定我是否購(gòu)買(mǎi),就像在任何一個(gè)豆豆式書(shū)評(píng)的作者那里一樣。
[參考資料]
The Mythical Man-Month: Essays on Software Engineering, Anniversary Edition (2nd Edition) by Frederick P. Brooks, 1995 Addison-Wesley, 322 pp
Peopleware : Productive Projects and Teams, 2nd Ed., by Tom Demarco, Timothy R. Lister, 1999 Dorset House, 264 pp
Object-Oriented Software Engineering: A Use Case Driven Approach by Ivar Jacobson et al, 1992 Addison-Wesley, 524 pp
Bean: The Movie, by Mel Smith (Director), 1997, 90mins
Jacques Lebrun:關(guān)于我的《人月神話》書(shū)評(píng)
“書(shū)評(píng)的目的是,讓評(píng)論者對(duì)一本自己看過(guò)或者沒(méi)看過(guò)的書(shū)說(shuō)點(diǎn)兒什么。評(píng)論只在一個(gè)意義上有指導(dǎo)作用,那就是它向書(shū)評(píng)的讀者——包括原書(shū)的作者——提供了一些關(guān)于評(píng)論者的智力的信息,要不就是關(guān)于其人品的信息,再不,就是兩樣都有。”——V. V. Nabokov
不少人抱怨我的文章總是太長(zhǎng)。不過(guò)相信這次,由于來(lái)自納波科夫的有力援助,我?guī)缀蹩梢悦庥谶@個(gè)指責(zé):我不想一一回應(yīng)對(duì)《人月神話:一次豆豆式的書(shū)評(píng)嘗試》一文的意見(jiàn)(差點(diǎn)兒忘了說(shuō)了,我碰巧是該文作者),因?yàn)檎缒俏挥忻亩韲?guó)人所說(shuō)的,評(píng)論與原作無(wú)關(guān),只能暴露評(píng)論者本人的武功跟智慧。所以即使我以回應(yīng)的形式再完成一篇三次方形式的評(píng)論,那也不能說(shuō)明我就比別人高了哪怕是哪么一點(diǎn)點(diǎn),反而只能在一個(gè)不祥的循環(huán)中越陷越深。
是的,不像很多人相信的那樣,評(píng)論無(wú)損于原作(莫里斯·布朗肖會(huì)說(shuō),就像早雪無(wú)損于寒鐘)。Amazon之類的網(wǎng)上書(shū)店維護(hù)龐大的讀者評(píng)論,我一直對(duì)這個(gè)做法感到好奇——這樣做至多能體現(xiàn)某本特定書(shū)籍的讀者群的平均智力罷了。那些散布四處的星星、玫瑰和雞蛋真的有“指導(dǎo)作用”嗎?大眾真的高于個(gè)人、統(tǒng)計(jì)數(shù)字真的高于一個(gè)清醒的“1”嗎?不過(guò)若是工業(yè)酸雪落在鐘上,可能造成致命的腐蝕也未可知。下面的內(nèi)容主要是澄清一些特定的事實(shí)。對(duì)于沒(méi)有讀過(guò)一篇很長(zhǎng)的關(guān)于《人月神話》的書(shū)評(píng)的各位,懇請(qǐng)不必費(fèi)心往下看:這只是我為自己的鐘準(zhǔn)備的一層防酸膜。
大約三個(gè)月前(2002年11月初),一篇名為《人月神話:一次豆豆式的書(shū)評(píng)嘗試》的文章首發(fā)于IBM DevWorks中國(guó)網(wǎng)站。文章的完成要追溯到更早的一個(gè)假期:幾個(gè)無(wú)所事事的早晨和一些有趣的朋友促成了這篇即興之作,原本的目的只是在小圈子里分享一些個(gè)人意見(jiàn)(類似于人們講一個(gè)笑話)。朋友們讀后的反應(yīng)補(bǔ)償了打字的痛苦。10月底的一個(gè)周末,完全出于嘗試(DevWorks頁(yè)面上的“書(shū)評(píng)” 字樣讓我錯(cuò)誤地以為他們也積極地征求類似稿件),將原稿發(fā)給了DevWorks。之后的過(guò)程以令人目眩的加速度進(jìn)行,短短幾天之后,我就在那個(gè)可敬的網(wǎng)站上發(fā)現(xiàn)了自己的涂鴉——編輯們的高效和專業(yè)至今思來(lái)令人感佩。
很多事業(yè)是無(wú)意識(shí)的完成的(博爾赫斯在接受大學(xué)英文講席時(shí)說(shuō),“我一生都在無(wú)意識(shí)地為這些講座努力”)。我的書(shū)評(píng)原本僅基于該書(shū)的英文版。當(dāng)時(shí),中文版推出的消息在論壇上好像彌賽亞的降臨一樣不斷流傳,但該文卻不是針對(duì)它寫(xiě)的,寫(xiě)作過(guò)程中也沒(méi)有和出版該書(shū)的“組織”聯(lián)系上(不過(guò)書(shū)評(píng)的潛在讀者也部分地包括了詢問(wèn)該書(shū)到底怎樣的朋友)。所以當(dāng)該書(shū)中文版正式推出,拙文成了重要的宣傳品之一時(shí),事情的發(fā)展是我始料未及的。按照IBM DevWorks的約稿協(xié)議,該文在發(fā)表之后的3個(gè)月的所有權(quán)益由該網(wǎng)站“獨(dú)占性地”享有,之后若需引用,應(yīng)注明“出自DevWorks中國(guó)”字樣。據(jù)我所知Umlchina網(wǎng)站在XProgrammer上使用該文,征得了IBM的許可。
文章刊出,好比是浪子離家,只能交給社會(huì)教育了。一些商家請(qǐng)它去促銷(xiāo),卻未注明出處,我個(gè)人不能負(fù)責(zé)。這孩子的原名如上所示,至于“軟玉生香”什么的,原只是文中的一句話,我同樣不為好心人代起的“藝名”負(fù)責(zé)。另外,有的地方讓它上座,尊為“特約書(shū)評(píng)”,這個(gè)“特約”過(guò)程我個(gè)人不得而知,我也不能負(fù)責(zé)。需要說(shuō)明的是,我個(gè)人除了從IBM Dev-works中國(guó)之外,并未收到任何稿酬,只有清華大學(xué)出版社寄來(lái)了一部裝幀考究的中譯本,為我的書(shū)房增色不少。換言之,是書(shū)評(píng)本身,而不是我本人配合了中譯本的銷(xiāo)售。我的寫(xiě)作碰巧獨(dú)立于這個(gè)過(guò)程,而且(透露一個(gè)秘密)我碰巧也不靠寫(xiě)作為生(不考慮軟件開(kāi)發(fā)也屬于廣義上的寫(xiě)作),更未從該書(shū)的銷(xiāo)售中獲得任何利益(不考慮書(shū)房的裝潢因素)。也許從書(shū)評(píng)本身的質(zhì)量出發(fā)考慮,獨(dú)立評(píng)論是更可取的形式。
另外依我個(gè)人的判斷,這篇書(shū)評(píng)生來(lái)沒(méi)有促銷(xiāo)天賦。它與其說(shuō)是個(gè)稱職的推銷(xiāo)員,毋寧是個(gè)自說(shuō)自話的夢(mèng)囈者。說(shuō)話時(shí)它更喜歡調(diào)侃、回憶,語(yǔ)流還不時(shí)被突如其來(lái)的怪想所打斷。那些繁復(fù)的、游離在事實(shí)之外而又無(wú)限自我復(fù)制的細(xì)節(jié)是它最喜愛(ài)的非法調(diào)味品。它樂(lè)意強(qiáng)調(diào)形式勝過(guò)內(nèi)容(事實(shí)上該文——盡管有一切科技文獻(xiàn)的表面裝飾——對(duì)正統(tǒng)軟件工程議題觸及有限),并以此作為對(duì)匆忙的實(shí)用主義者的揶揄和挑釁。一些人不幸被此激怒,卻是我不是我的原意——寫(xiě)作時(shí),我腦中的那位潛在讀者的長(zhǎng)相和這些人沒(méi)有任何共同之處。
文章刊出后收到了大量反饋。由此我也獲得了與不少同行交流的機(jī)會(huì),幾位熱心的讀者至今還與我保持通信——這是一個(gè)作者能指望的最好獎(jiǎng)勵(lì),對(duì)我來(lái)說(shuō)遠(yuǎn)比稿酬本身有實(shí)際意義。我也時(shí)常收到“你好,請(qǐng)問(wèn)怎樣下載該書(shū)電子版”的郵件,也許我該就此轉(zhuǎn)行,專攻電子出版?
出于純粹的好奇,當(dāng)別人告訴我網(wǎng)上書(shū)店和程序員社區(qū)都轉(zhuǎn)載了該文時(shí),我也開(kāi)始不時(shí)地關(guān)注人們?cè)谶@些地方的討論。像在Amazon那里一樣,我不時(shí)驚訝于“網(wǎng)友們”思路的犀利和文辭的簡(jiǎn)潔。然而我還是相信納波科夫的名言,我們說(shuō)的都與Brooks本人的著作無(wú)關(guān),網(wǎng)絡(luò)只是提供了一個(gè)更開(kāi)放的舞臺(tái),人群中的每次孤獨(dú)的表演都具有一定意義上的自足性和自我反射性。不過(guò),我的上述信念部分地被一位失望的中譯本讀者顛覆了。在抱怨了該書(shū)“沒(méi)有想象中的好”之后,他/她表示“對(duì)那個(gè)特邀書(shū)評(píng)人寫(xiě)的又臭又長(zhǎng)的文章實(shí)在是憤恨,為了多爭(zhēng)一點(diǎn)稿費(fèi)竟愣是湊出那末(sic)多話來(lái)”。
也許我還該再澄清一次?如上所述,書(shū)評(píng)的目標(biāo)讀者是我的朋友和IBM DevWorks(也許還有Umlchina)的訪問(wèn)者。即使談?wù)摯炙椎慕?jīng)濟(jì)問(wèn)題,這位失望者也不是我被付費(fèi)為之寫(xiě)作的對(duì)象,而對(duì)于免費(fèi)用戶,也許軟件行業(yè)的“EULA”在這里也能起作用:在“那末多”話中,沒(méi)有一個(gè)字是說(shuō)給他/她聽(tīng)的,他/她的憤恨該留給自己。
我還感到有趣的是,究竟“失望者”是什么時(shí)候讀了這篇書(shū)評(píng)呢?如果在其讀譯本之前看的,那么這樣“又臭又長(zhǎng)的文章”都沒(méi)有嚇退其讀書(shū)熱情,我不免暗叫一聲“慚愧(取‘僥幸’意)”;如果是在讀譯本之后,那么讀都讀了,失望也失望了,又何苦來(lái)忍受這一遭兒“又臭又長(zhǎng)”呢?一句話,讓失望者看到這篇書(shū)評(píng),這是我和(唉,這個(gè)平庸而陰險(xiǎn)的“和”)他/她雙方的不幸。
至此本文的第一個(gè)任務(wù)已經(jīng)完成——我相信這足以澄清該文的家世和經(jīng)濟(jì)來(lái)源,避免進(jìn)一步的誤解和失望——就像哲學(xué)家愛(ài)說(shuō)的,寫(xiě)了這么多,解決的實(shí)際問(wèn)題卻那么的少——希望該文的敵人已經(jīng)再一次被“又臭又長(zhǎng)”擊敗,不再往下看了。
第二個(gè)任務(wù)則相對(duì)簡(jiǎn)單(此前也做過(guò))。作為一個(gè)離家浪子,這篇書(shū)評(píng)不僅舉止不羈,而且不學(xué)無(wú)術(shù)。開(kāi)頭引用的那句尼采的話,甚至比這位狂人哲學(xué)家本人說(shuō)得還要夸張:“…mein Ehrgeiz ist, in zehn Saetzen zu sagen, was jeder Andre in einem Buche sagt, - was jeder Andre in einem Buche nicht sagt ...”,尼采只想在“十句話”里說(shuō)出別人用“一本書(shū)”才能說(shuō)清的東西。由于我勤勉而不可靠的記憶,原文卻把“十”和“一”調(diào)了個(gè)個(gè)兒。希望我發(fā)明的那個(gè)了不起的句子不會(huì)成為另一個(gè)游子,有一天又在另一個(gè)古怪的名稱下回到我的門(mén)前。
浙公網(wǎng)安備 33010602011771號(hào)