...k只覺得自己迷失了路,或是進入了一個奇異的國度,這個國度比人類曾經(jīng)到過的任何地方都遠,它是那么奇異,連空氣都沒有一點成分與故鄉(xiāng)的空氣相同,在這兒,一個人可能因奇異而窒息,可是這奇異又有一種無可理喻的魅力,使你只能繼續(xù)向前走,向前越迷越深。
—— 卡夫卡《城堡》
被劫持的項目
為什么一本講項目管理的小說要以主人公被綁架開始?湯普金斯先生,這位愛打瞌睡的資深項目經(jīng)理,公司近期裁員的犧牲品,被綁架到一個完全陌生的國度,委以一項近乎不可能的任務,開始一次奇異的、難以測度的冒險......這聽起來完全像一部卡夫卡式的荒誕小說,但其實卻是IT名著《最后期限》的開頭。
你會說,這只是制造懸念、吸引讀者的套路而已。可是“懸念”,原本只該發(fā)生在那些存在風險、需要膽魄和運氣的領域:間諜或是反間諜,高空救險,買彩票等等,哪里有懸念,哪里就有危險,就有失敗甚至喪命的可能。為什么軟件開發(fā)項目會卷入一場懸念、一次歷險之中?“最后期限”,英文本來是“deadline”,直譯就是“死線”,據(jù)說原本指的是監(jiān)獄里的最后一道界限,犯人一旦越過就格殺勿論——難道作者是以此象征開發(fā)者們頭上懸著的劍?難道作者在暗示,軟件項目就很可能掙扎在這樣的生死界限上,很可能陷入“被劫持”的危險中?
從軟件行業(yè)之外的角度看,“項目”往往意味著規(guī)范的運作,甚至是“成功”的同義語。請設想一個建筑項目。不考慮款項拖欠和成本回收,單純從設計、施工的角度來說,“失敗”的可能性相當小。如果讓外行想當然地推測,軟件項目很少與有形的“物質(zhì)材料”打交道,成功的概率應該較建筑業(yè)更高。但是,任何略有經(jīng)驗的軟件開發(fā)者都會明白我說的“風險”對于軟件項目意味著的比例。讓我們援引業(yè)界公認的“硬數(shù)據(jù)”:作為軟件開發(fā)管理的權(quán)威、軟件項目研究專家,本書作者迪馬可在他的另一部名著《人件》中談到,他們“跟蹤研究的所有項目中,大約有15%的項目徹底失敗。它們或者是被取消、或者夭折、或者延期、或者提交的產(chǎn)品從來就沒有投入使用。對大項目來說成功的可能性更低。在持續(xù)了25 個工作年或者更長時間的項目中,足足有25%的項目沒能完成。”事實上,《人件》第一章的標題就是“此時此刻,在世界的某處有一個項目正在失敗”。無怪乎有一本項目管理指南叫《軟件項目生存手冊》——暗示著項目經(jīng)理需要皇家空軍飛行員般的逆境求生技巧,另一本則干脆叫《死亡之旅》,那意思是說,如果一個項目經(jīng)理像那些興致勃勃的探險家一樣天真莽撞地走入這片未知的領地,那么等待他的命運不問可知。
那么,或許可以說,軟件項目從本質(zhì)上來講,首先并且總是處于危險之中。面對如此高的風險,不少深謀遠慮的項目規(guī)劃者甚至會像書中的湯普金斯一樣,讓多個項目組同時開發(fā)同一模塊,取最優(yōu)的結(jié)果(據(jù)我所知,這種實踐在日本軟件業(yè)相當普遍)。但是,還是有很多不走運的軟件項目,要么對此沒有足夠意識,要么無法負擔大量人力,只有前仆后繼地被無名的力量所劫持,像卡夫卡小說中的K或是捐軀南極的斯各特船長那樣,在不歸路上“繼續(xù)向前走,向前越迷越深”。
一段航程的展望
我立刻意識到了自己過度悲觀的語調(diào)。雖然每次探險都肯定是“死亡之旅”,但顯然不是每支探險隊都有去無還。以著名的失敗者斯各特為例,與他們幾乎同時出發(fā)的挪威人阿德蒙森探險隊就獲得了成功。回到軟件行業(yè),根據(jù)上面的數(shù)字,25%的失敗率雖然不能容忍,但是畢竟多數(shù)軟件項目確實還算得上走運。那么,成功的秘訣和失敗的主因各是什么?如果我們把多年以來軟件項目成功、失敗的道理都總結(jié)出來,不就能在以后的航程中智珠在握,一帆風順了嗎?
在純技術領域,確實已有不少論著致力于這樣的工作。很多專家發(fā)現(xiàn)大家總在重復相同的錯誤,進而總結(jié)出了軟件設計中的一些典型錯誤思路,并把它們稱為“反模式”。對于一些具體的開發(fā)領域,比如Java,我們陸續(xù)地看到了名為“Java Pitfalls”、“Bitter Java”、“Bitter EJB”的專著出現(xiàn),從書名就能讀出陷阱之危險、教訓之苦澀。
而在軟件項目管理方面,如果也有這樣一部記錄成功的航線和沉船的位置的書該多好,我們不就也能據(jù)此把握航向、避開那些臭名昭著的礁石了嗎?我最初就是懷著這樣的念頭開始讀《最后期限》。這本書也確實能起到這樣的作用。伴隨著我們的朋友湯普金斯在虛構(gòu)的“摩羅維亞國”的歷險,我也從一個個機智美妙的故事中學到了不少Dos & DoNots——每章之后,都有一段以“湯普金斯日記”形式出現(xiàn)的總結(jié),如果時間實在緊張,單單瀏覽一遍這些日記,你就能在工作劃分、人員配備、項目時間計劃、測試、發(fā)布等等問題上收割很多真知灼見。
但是這樣足夠嗎?如果單憑熟記若干原則就能塑造一位項目經(jīng)理,那么何以項目管理人才還是眼下最稀缺的資源之一呢?事實上,讀完全書后,我感到自己最大的收獲并非任何特定的管理秘訣,而恰恰是這樣一個認識:沒有任何單一的實踐或原則能夠確保一個軟件開發(fā)項目的成功,同樣,任何單一的缺陷也未必會將項目導向失敗。就像湯普金斯的成功并非完全依靠本人經(jīng)驗,或者憑借哪個全能智者的指引,而應歸功于多種因素的綜合作用和他麾下的眾多天才的建議,如果我們單純乞靈于一個新方法,比如“測試先行”或“持續(xù)集成”,甚至,如果我們完全復制書中的所有提示,在下一個項目中取得成功的概率未必會有多少提高。同樣,書中的故事也表明,即使你身旁總有一位“邪惡的貝洛克部長”似的超級決策者,你的項目也不一定就單單因此而滿盤皆輸。
這似乎是對Brooks提出的“沒有銀彈”定理的一次簡單擴充。不過我個人更愿意稱此為“軟件行業(yè)的多元決定論”。多元決定,意味著特定情景下的多種因素處于一種復雜、動態(tài)而又相互交錯的關系之中,強調(diào)其中哪一個的優(yōu)先地位都只能是對實情的簡化甚至歪曲。以我目前的辨識能力所見,我認為軟件開發(fā)航線上的最大阻礙是“商業(yè)、技術和管理”這三重因素的互動:軟件開發(fā)首先并且最終是商業(yè)活動,商業(yè)利益要求開發(fā)周期越短越好、人力物力成本越少越好、后期能容忍的需求變更越多越好;技術對于軟件企業(yè)具有核心意義的重要性,尤其是,如何處理商業(yè)因素固有的保守性和軟件持續(xù)的技術革命之間的沖突,成為每一個項目都會遇到的問題;而軟件項目的管理者更存在如何協(xié)調(diào)技術與非技術因素,如何對看似純屬理智產(chǎn)物、其實充滿未知因素的開發(fā)過程進行監(jiān)控的難題。
軟件項目的一葉之舟,就航行在這三種因素共同作用而形成的湍流和漩渦之中。當我們將目光停留在任何單一的方面時,某個促狹的魔鬼就會從另兩個領域悄然潛入,引發(fā)令人懊悔的后果。克服這些阻礙,需要耐心、對所有問題領域的尊重、甚至還要一點點運氣。想要只靠使用某個“項目管理軟件”、掌握某種技巧或某種“境界的提升”,一勞永逸地解決所有問題,目前在我看來是不現(xiàn)實的:我們面臨的困難,在Brooks的意義上是“本質(zhì)”而非“偶然”的。即使某個特定的項目中解決了某個困難,也無法保證從此我們就對它有了免疫力。
但在硬幣的另一面,正如德國人的名句所言“哪里有危險,哪里就有救渡”。軟件項目的這種內(nèi)在的復雜性,也許同樣是其“奇異的魅力”之所在。如果軟件開發(fā)的藝術完全可以通過抽象的原則“線性地”掌握,那么我們甚至可以自問,會不會有一天軟件項目只由計算機自行開發(fā),人類開發(fā)者完全被取代呢?在嚴格的科學意義上解決這個問題,也許需要更明晰的“可開發(fā)性”定義(就像上世紀中人們對“可計算性”的澄清一樣)。細致的考察留給有志于圖靈獎的各位完成。不過直觀地考慮,依據(jù)上面的討論我們就可以相信,軟件開發(fā)的困難所在,正是機器無法通過形式化的方式克服,而人類開發(fā)者最為擅長的部分。我想這是真正傾心于這項事業(yè)的人樂于看到的論證:要感謝這些困難,廣大軟件開發(fā)人員不會在某天早晨醒來發(fā)現(xiàn)自己已被一臺能干的計算機取代。
人怎樣對軟件工程說話
但是如果僅滿足于指認困難的內(nèi)在性,本書的建設性意義究竟何在呢?一組命題如果不能按照可重復、可檢驗的方式把握,那不就等于廢話嗎?更推廣來說,作為學科的軟件工程究竟意義何在?人能夠像掌握,比如說,數(shù)學知識那樣,掌握軟件工程學嗎?這門學科還是否能像“電子工程”、“生物工程”一樣,被當作自然科學對待嗎?
在我看來,和軟件項目一樣,軟件工程學也包括了無法歸結(jié)為純粹的科學/技術的內(nèi)容。因此,與其說軟件工程學像純粹的自然科學,不如說它更接近于經(jīng)濟學,其學科內(nèi)部又可以分為性質(zhì)不同的多個領域,其中有一些領域就像經(jīng)濟學的具體計量、建模分析或是統(tǒng)計部分,具有很強的可操作性,另一些領域則是難以形式化的和微妙的。要對這些不同的領域有所言說,也許需要不同的語調(diào)和態(tài)度。
我認為軟件工程學中的“純技術部分”,尤其是系統(tǒng)構(gòu)架設計,往往是容易確定,并能夠通過教學、培訓加以掌握的(當然這里和其他自然科學一樣,仍需要悟性、實踐和創(chuàng)新意識);而對于其他的內(nèi)容,特別是與開發(fā)的“商業(yè)”和“管理”環(huán)節(jié)對應的領域,雖然也包含高度的內(nèi)在嚴格性,但很難直截了當?shù)恼f明,更不容易通過簡單的教學而傳授。這些領域更多地與純粹技術之外的普遍經(jīng)驗相關,對它們的學習、培育,也許只能經(jīng)過實踐,經(jīng)過德國人所說的“教化(Bildung)”而緩慢、耐心地進行。
如果采用維特根斯坦的劃分,上面所說的前者屬于我們能說清楚的“科學”,后者就只配叫“形而上學”了。他的名言是:對于能說的,我們一定能說清楚;對于不可說的,我們必須沉默。那么,人們難道就無法對此言說了嗎?那么人們又怎樣保持所獲得的經(jīng)驗,如何才能在這些領域,比如項目管理方面作出創(chuàng)新、進步呢?大師的另一句格言是:不可說的,我們可以顯示出來。我想,從這個角度解釋為什么作者要把對項目管理的思考寫成小說,應是“雖不中、亦不遠矣”。一部小說,除了“科普作用”和“可讀性”之外,更重要的是它更類似于身體力行的“顯示”而不是抽象的教條、重要的廢話。簡言之,它能說出不可說的,能重新塑造讀者的思想方式和感受力。我相信,較之單純的科學/技術學習,這是人類更持久、更普遍的學習模式。
當然拋開學習這層意思,只從享樂角度來看,本書故事詭譎緊湊,譯筆準確流暢,是IT人士難得的好讀物。我時常想,在人類的文學寶庫中,各種各樣的職業(yè),比如騎士、政治家、藝術家、偵探甚至流浪漢,都存在文學門類加以寫照,將來也肯定會有專門的小說類型,描繪日漸龐大的程序員族群。《最后期限》作為嘗試,在這個方向上邁出了可喜的一步 。










