這些研究表明,效率高和效率低的實(shí)施者之間個(gè)體差異非常大,經(jīng)常能夠達(dá)到數(shù)量級(jí)的水平。
—— Sackman,Erikson和Grant[1]
These studies revealed large individual
differences between high and low performers, often by an order of magnitude.
SACKMAN,
ERIKSON, AND GRANT1
在計(jì)算機(jī)領(lǐng)域的會(huì)議中,常常聽(tīng)到年輕的軟件經(jīng)理聲稱,他們喜歡由一流人才組成的小型、精干的隊(duì)伍,而不是那些幾百人的大型團(tuán)隊(duì),這里的“人”當(dāng)然暗指平庸的程序員。其實(shí)我們也經(jīng)常有相同的看法。
但這種幼稚的觀點(diǎn)回避了一個(gè)很困難的問(wèn)題——
如何在有意義的進(jìn)度安排內(nèi)創(chuàng)建大型的系統(tǒng)?那么就讓我們現(xiàn)在來(lái)仔細(xì)討論一下這個(gè)問(wèn)題的各個(gè)方面。
問(wèn)題
軟件經(jīng)理很早就認(rèn)識(shí)到優(yōu)秀程序員和較差程序員之間生產(chǎn)率的差異,但實(shí)際測(cè)量出的差異還是令我們所有的人吃驚。
在他們的一個(gè)研究中,Sackman、Erikson和Grant曾對(duì)一組具有經(jīng)驗(yàn)的程序人員進(jìn)行測(cè)量。在該小組中,最好的和最差的表現(xiàn)在生產(chǎn)率上平均為
10∶1;在編程速度和空間上具有5∶1的驚人差異!簡(jiǎn)言之,20 000美元/年的程序員的生產(chǎn)率可能是10
000美元/年的程序員的10倍。反之亦然。數(shù)據(jù)顯示,經(jīng)驗(yàn)和實(shí)際的表現(xiàn)沒(méi)有相互聯(lián)系(我懷疑這種現(xiàn)象是否普遍成立)。
我常常重復(fù)這樣的一個(gè)觀點(diǎn),需要協(xié)作溝通的人員數(shù)量影響著開(kāi)發(fā)成本,因?yàn)槌杀镜闹饕M成部分是相互的溝通和交
流,以及更正溝通不當(dāng)所引起的不良結(jié)果(系統(tǒng)調(diào)試)。這一點(diǎn),也暗示系統(tǒng)應(yīng)該由盡可能少的人員來(lái)開(kāi)發(fā)。實(shí)際上,絕大多數(shù)大型編程系統(tǒng)的經(jīng)驗(yàn)顯示出,一擁而
上的開(kāi)發(fā)方法是高成本的、速度緩慢的、低效的,開(kāi)發(fā)出的是無(wú)法在概念上進(jìn)行集成的產(chǎn)品。OS/360、Exec
8、Scope 6600、Multics、TSS、SAGE等等—— 這個(gè)列表可以不斷地繼續(xù)下去。
得出的結(jié)論很簡(jiǎn)單:如果在一個(gè)200人的項(xiàng)目中,有25個(gè)最能干和最有開(kāi)發(fā)經(jīng)驗(yàn)的項(xiàng)目經(jīng)理,那么開(kāi)除剩下的175名程序員,讓項(xiàng)目經(jīng)理來(lái)編程開(kāi)發(fā)。
現(xiàn)在我們來(lái)驗(yàn)證一下這個(gè)解決方案。一方面,這個(gè)開(kāi)發(fā)隊(duì)伍不是通常所說(shuō)的不超過(guò)10個(gè)人的、理想的小型精干的隊(duì)伍,該團(tuán)隊(duì)的規(guī)模如此之大,以至于至少需要兩個(gè)層級(jí)的管理,或者大約5名管理人員。另外,它需要額外的財(cái)務(wù)、人員、空間、文秘和機(jī)器操作方面的支持。
另一方面,如果采用一擁而上的開(kāi)發(fā)方法,那么原有的200人的隊(duì)伍仍然不足以開(kāi)發(fā)真正的大型系統(tǒng)。例如,在
OS/360項(xiàng)中,當(dāng)項(xiàng)目進(jìn)行到頂峰時(shí),有超過(guò)1?000人在為它工作——
程序員、文檔編制人員、操作人員、職員、秘書(shū)、管理人員、支持小組等等。從1963年到1966年,設(shè)計(jì)、編碼和文檔工作花費(fèi)了大約5
000個(gè)人年。如果人月可以等量置換的話,我們所假設(shè)的200人隊(duì)伍需要25年的時(shí)間,才能使產(chǎn)品達(dá)到現(xiàn)有的水平。
這就是小型、精干隊(duì)伍概念上的問(wèn)題:對(duì)于真正意義上的大型系統(tǒng),它太慢了。設(shè)想OS/360的工作由一個(gè)小
型、精干的團(tuán)隊(duì)來(lái)解決,譬如一個(gè)10人團(tuán)隊(duì)。作為一個(gè)尺度,假設(shè)他們都非常能干,比一般的編程人員在編程和文檔方面的生產(chǎn)率高7倍。
同時(shí)假設(shè)OS/360原有開(kāi)發(fā)人員是一些平庸的編程人員(這與實(shí)際情況相差很遠(yuǎn))。同樣作為一個(gè)尺度,假設(shè)另一個(gè)生產(chǎn)率的改進(jìn)因子提高了7倍,因?yàn)檩^小的
隊(duì)伍所需的溝通和交流較少。同時(shí)假設(shè)同樣的隊(duì)伍完成的是同樣的工作。那么,5 000/(10×7×7)= 10,他們需要10年來(lái)完成5
000人年的工作。一個(gè)產(chǎn)品在最初設(shè)計(jì)的10年后才出現(xiàn),還有人會(huì)對(duì)它感興趣嗎?或者它是否會(huì)隨著軟件開(kāi)發(fā)技術(shù)的快速進(jìn)步,而顯得過(guò)時(shí)呢?
這種進(jìn)退兩難的境地是非常殘酷的。對(duì)于效率和概念的完整性來(lái)說(shuō),最好由少數(shù)干練的人員來(lái)設(shè)計(jì)和開(kāi)發(fā),而對(duì)于大型系統(tǒng),則需要大量的人手,以使產(chǎn)品能在時(shí)間上滿足要求。如何調(diào)和這兩方面的矛盾呢?
Mills的建議
Harlan Mills的提議提供了一個(gè)嶄新的、創(chuàng)造性的解決方案[2, 3]。Mills建議大型項(xiàng)目的每一個(gè)部分由一個(gè)團(tuán)隊(duì)解決,但是該隊(duì)伍以類(lèi)似外科手術(shù)的方式組建,而并非一擁而上。也就是說(shuō),同每個(gè)成員截取問(wèn)題某個(gè)部分的做法相反,由一個(gè)人來(lái)完成問(wèn)題的分解,其他人給予他所需要的支持,以提高效率和生產(chǎn)力。
簡(jiǎn)單考慮一下,如果上述概念能夠?qū)嵤坪跛梢詽M足迫切性的需要。很少的人員被包含在設(shè)計(jì)和開(kāi)發(fā)中,其他許
多人來(lái)進(jìn)行工作的支持。它是否可行呢?誰(shuí)是編程隊(duì)伍中的麻醉醫(yī)生和護(hù)士,工作如何劃分?讓我們繼續(xù)使用醫(yī)生的比喻:如果考慮所有可能想到的工作,這樣的隊(duì)
伍應(yīng)該如何運(yùn)作?
外科醫(yī)生。Mills稱之為首席程序員。他親自定義功能和性能技術(shù)說(shuō)明書(shū),設(shè)計(jì)程序,編制源代碼,測(cè)試以及書(shū)
寫(xiě)技術(shù)文檔。他使用例如PL/I的結(jié)構(gòu)化編程語(yǔ)言,擁有對(duì)計(jì)算機(jī)系統(tǒng)的訪問(wèn)能力;該計(jì)算機(jī)系統(tǒng)不僅能進(jìn)行測(cè)試,還存儲(chǔ)程序的各種版本,以允許簡(jiǎn)單的文件更
新,并對(duì)他的文檔提供文本編輯能力。首席程序員需要極高的天分、十年的經(jīng)驗(yàn)和應(yīng)用數(shù)學(xué)、業(yè)務(wù)數(shù)據(jù)處理或其他方面的大量系統(tǒng)知識(shí)和應(yīng)用知識(shí)。
副手。他是外科醫(yī)生的后備,能完成任何一部分工作,但是相對(duì)具有的經(jīng)驗(yàn)較少。他的主要作用是作為設(shè)計(jì)的思考
者、討論者和評(píng)估人員。外科醫(yī)生試圖和他溝通設(shè)計(jì),但不受到他建議的限制。副手經(jīng)常在與其他團(tuán)隊(duì)討論有關(guān)功能和接口問(wèn)題時(shí)代表自己的小組。他需要詳細(xì)了解
所有的代碼,研究設(shè)計(jì)策略的備選方案。顯然,他充當(dāng)外科醫(yī)生的保險(xiǎn)機(jī)制。他甚至可能編制代碼,但對(duì)代碼的任何部分,不承擔(dān)具體的開(kāi)發(fā)職責(zé)。
管理員。外科醫(yī)生是老板,他必須在人員、薪酬、辦公空間等方面具有決定權(quán),但他決不能在這些事務(wù)上浪費(fèi)任何時(shí)
間。因而,他需要一個(gè)控制財(cái)務(wù)、人員、工作地點(diǎn)和辦公設(shè)備的專(zhuān)業(yè)管理人員,該管理員充當(dāng)與組織中其他管理機(jī)構(gòu)的接口。Baker建議僅在項(xiàng)目具有法律、合
同、報(bào)表和財(cái)務(wù)方面的需求時(shí),管理員才具有全職責(zé)任。否則,一個(gè)管理員可以為兩個(gè)團(tuán)隊(duì)服務(wù)。
編輯。外科醫(yī)生負(fù)責(zé)文檔的生成—— 出于最大透明度的考慮,他必須創(chuàng)建各種文檔。無(wú)論是對(duì)內(nèi)部描述還是外部描述。而編輯根據(jù)外科醫(yī)生的草稿或者口述,進(jìn)行分析和重新組織,提供各種參考信息和書(shū)目,對(duì)多個(gè)版本進(jìn)行維護(hù),并監(jiān)督文檔生成的機(jī)制。
兩個(gè)文秘。管理員和編輯每個(gè)人需要一個(gè)文秘。管理員的文秘負(fù)責(zé)項(xiàng)目的協(xié)作一致和非產(chǎn)品文件。
程序職員。他負(fù)責(zé)維護(hù)編程產(chǎn)品庫(kù)中所有團(tuán)隊(duì)的技術(shù)記錄。該職員接受文秘性質(zhì)的培訓(xùn),承擔(dān)機(jī)器碼文件和可讀文件的相關(guān)管理責(zé)任。
所有的計(jì)算機(jī)輸入?yún)R集到這個(gè)職員處。如果需要,他會(huì)對(duì)它們進(jìn)行記錄或者標(biāo)識(shí)。輸出列表會(huì)提交給程序職員,由他進(jìn)行歸檔和編制索引。另外,他負(fù)責(zé)將任何模型的最新運(yùn)行情況記錄在狀態(tài)日志中,而所有以前的結(jié)果則按時(shí)間順序進(jìn)行歸檔保存。
Mills概念的真正關(guān)鍵是“從個(gè)人藝術(shù)到公共實(shí)踐”的編程觀念轉(zhuǎn)換。它向所有的團(tuán)隊(duì)成員展現(xiàn)了所有計(jì)算機(jī)的運(yùn)行和產(chǎn)物,并將所有的程序和數(shù)據(jù)看作是團(tuán)隊(duì)的所有物,而非私人財(cái)產(chǎn)。
程序職員的專(zhuān)業(yè)化分工,使程序員從文書(shū)等雜事中解放出來(lái),同時(shí)還可以對(duì)那些經(jīng)常被忽視的雜事進(jìn)行系統(tǒng)整理,確保了它們的質(zhì)量,并強(qiáng)化了團(tuán)隊(duì)最有價(jià)值的財(cái)富——
工作產(chǎn)品。上述概念顯然考慮的是批處理程序。當(dāng)使用交互式終端,特別是在沒(méi)有紙張輸出的情況下,程序職員的職責(zé)并未消失,只是有所更改。他會(huì)記錄小組程序和私有工作拷貝之間的更新,依然控制所有程序的運(yùn)行,并使用自己的交互式工具來(lái)控制產(chǎn)品逐步增長(zhǎng)的完整性和有效性。
工具維護(hù)人員。現(xiàn)在已經(jīng)有很多文件編輯、文本編輯和交互式調(diào)試等工具,因此團(tuán)隊(duì)很少再需要自己的機(jī)器和機(jī)器操
作人員。但是這些工具使用起來(lái)必須毫無(wú)疑問(wèn)地具備令人滿意的反應(yīng)和可靠性。外科醫(yī)生則是對(duì)這些工具的服務(wù)是否充分可用的唯一評(píng)判人員。他需要一個(gè)工具維護(hù)
人員,保證所有基本服務(wù)的可靠性,以及承擔(dān)團(tuán)隊(duì)成員所需要的特殊工具(特別是交互式計(jì)算機(jī)服務(wù))的構(gòu)建、維護(hù)和升級(jí)責(zé)任。即使已經(jīng)擁有非常卓越的、可靠的
集中式服務(wù),每個(gè)團(tuán)隊(duì)仍然要有自己的工具維護(hù)人員。因?yàn)樗墓ぷ魇菣z查他的外科醫(yī)生所需要的工具,而不是其他團(tuán)隊(duì)的需要。工具維護(hù)人員常常要開(kāi)發(fā)一些實(shí)用
程序、編制具有目錄的函數(shù)庫(kù)以及宏庫(kù)。
測(cè)試人員。外科醫(yī)生需要大量合適的測(cè)試用例,用來(lái)對(duì)他所編寫(xiě)的工作片段,以及對(duì)整個(gè)工作進(jìn)行測(cè)試。因此,測(cè)試人員既是為他的各個(gè)功能設(shè)計(jì)系統(tǒng)測(cè)試用例的對(duì)手,同時(shí)也是為他的日常調(diào)試設(shè)計(jì)測(cè)試數(shù)據(jù)的助手。他還負(fù)責(zé)計(jì)劃測(cè)試的步驟和為單元測(cè)試搭建測(cè)試平臺(tái)。
語(yǔ)言專(zhuān)家。隨著Algol語(yǔ)言的出現(xiàn),人們開(kāi)始認(rèn)識(shí)到,在大多數(shù)計(jì)算機(jī)項(xiàng)目中,總有一兩個(gè)樂(lè)于掌握復(fù)雜編程語(yǔ)
言的人。這些專(zhuān)家非常有幫助,很快大家會(huì)向他咨詢。這些天才不同于外科醫(yī)生,外科醫(yī)生主要是系統(tǒng)設(shè)計(jì)者以及考慮系統(tǒng)的整體表現(xiàn)。而語(yǔ)言專(zhuān)家則尋找一種簡(jiǎn)
潔、有效的使用語(yǔ)言的方法來(lái)解決復(fù)雜、晦澀或者棘手的問(wèn)題。他通常需要對(duì)技術(shù)進(jìn)行一些研究(2~3天)。通常一個(gè)語(yǔ)言專(zhuān)家可以為兩個(gè)到三個(gè)外科醫(yī)生服務(wù)。
以上就是如何參照外科手術(shù)隊(duì)伍對(duì)10人的編程團(tuán)隊(duì)進(jìn)行專(zhuān)業(yè)化的角色分工。
如何運(yùn)作
文中定義的開(kāi)發(fā)團(tuán)隊(duì)在很多方面滿足了迫切性的需要。十個(gè)人,其中七個(gè)專(zhuān)業(yè)人士在解決問(wèn)題,而系統(tǒng)是一個(gè)人或者最多兩個(gè)人思考的產(chǎn)物,因此客觀上達(dá)到了概念的一致性。
要特別注意傳統(tǒng)的兩人隊(duì)伍與外科醫(yī)生-副手團(tuán)隊(duì)架構(gòu)之間的區(qū)別。首先,傳統(tǒng)的隊(duì)伍將工作進(jìn)行劃分,每人負(fù)責(zé)一部分工作的設(shè)計(jì)和實(shí)現(xiàn)。在外科手術(shù)團(tuán)隊(duì)中,外科醫(yī)生和副手都了解所有的設(shè)計(jì)和全部的代碼。這節(jié)省了空間分配、磁盤(pán)訪問(wèn)等的勞動(dòng)量,同時(shí)也確保了工作概念上的完整性。
第二,在傳統(tǒng)的隊(duì)伍中大家是平等的,出現(xiàn)觀點(diǎn)的差異時(shí),不可避免地需要討論和進(jìn)行相互的妥協(xié)和讓步。由于工作
和資源的分解,不同的意見(jiàn)會(huì)造成策略和接口上的不一致,例如誰(shuí)的空間會(huì)被用作緩沖區(qū),而事實(shí)上最終它們必須整合在一起。而在外科手術(shù)團(tuán)隊(duì)中,不存在利益的
差別,觀點(diǎn)的不一致之處可以由外科醫(yī)生單方面來(lái)統(tǒng)一。這兩種團(tuán)隊(duì)組建上的差異——
對(duì)問(wèn)題不進(jìn)行分解和上下級(jí)的關(guān)系—— 使外科手術(shù)隊(duì)伍可以達(dá)到客觀的一致性。
另外,團(tuán)隊(duì)中剩余人員職能的專(zhuān)業(yè)化分工是高效的關(guān)鍵,它使成員之間采用非常簡(jiǎn)單的交流模式成為可能,如圖3-1所示。
Baker的文章[3]提出了專(zhuān)一的、小規(guī)模的測(cè)試隊(duì)伍。在那種情況下,它能按照所預(yù)期的進(jìn)行運(yùn)作,并具有良好的效果。

圖3-1 10人程序開(kāi)發(fā)隊(duì)伍的溝通模式
團(tuán)隊(duì)的擴(kuò)建
就目前情況而言,還不錯(cuò)。然而,現(xiàn)在所面臨的問(wèn)題是如何完成5?000個(gè)人年的項(xiàng)目,而不是20或30個(gè)人年
規(guī)模的系統(tǒng)。如果整個(gè)工作能控制在范圍之內(nèi),10人的團(tuán)隊(duì)無(wú)論如何組織,總是比較高效的。但是,當(dāng)我們需要面對(duì)幾百人參與的大型任務(wù)時(shí),如何應(yīng)用外科手術(shù)
團(tuán)隊(duì)的概念呢?
擴(kuò)建過(guò)程的成功依賴于這樣一個(gè)事實(shí),即每個(gè)部分的概念完整性得到了徹底的提高——
決定設(shè)計(jì)的人員是原來(lái)的1/7或更少。所以,可以讓200人去解決問(wèn)題,而僅僅需要協(xié)調(diào)20個(gè)人,即那些“外科醫(yī)生”的思路。
對(duì)于協(xié)調(diào)的問(wèn)題,還是需要使用分解的技術(shù),這在后續(xù)的章節(jié)中會(huì)繼續(xù)進(jìn)行討論。在這里,可以認(rèn)為整個(gè)系統(tǒng)必須具
備概念上的完整性,要有一個(gè)系統(tǒng)結(jié)構(gòu)師從上至下地進(jìn)行所有的設(shè)計(jì)。要使工作易于管理,必須清晰地劃分體系結(jié)構(gòu)設(shè)計(jì)和實(shí)現(xiàn)之間的界線,系統(tǒng)結(jié)構(gòu)師必須一絲不
茍地專(zhuān)注于體系結(jié)構(gòu)。總的說(shuō)來(lái),上述的角色分工和技術(shù)是可行的,在實(shí)際工作中,具有非常高的效率。