|
在軟件工程研究中,被驗(yàn)證得最多的結(jié)論就是對(duì)于同等經(jīng)驗(yàn)的兩個(gè)不同程序員,在效率和質(zhì)量上可能會(huì)有10倍的差距。研究人員還發(fā)現(xiàn),這種差距也適用于團(tuán)隊(duì)級(jí)別上,也就是說在同一行業(yè)內(nèi)不同的團(tuán)隊(duì)也是如此。
軟件開發(fā)中個(gè)人效率的變化
首先發(fā)現(xiàn)不同的人在編程生產(chǎn)力上的巨大差距的研究,是1960年由Sackman、Erikson以及Grant三個(gè)人完成的。他們研究了工作經(jīng)驗(yàn)平均在7年的專業(yè)程序員,并發(fā)現(xiàn)最好和最差的程序員寫新代碼的時(shí)間比為20:1;調(diào)試次數(shù)是25:1;程序大小是5:1;程序的執(zhí)行效率是10:1。他們還發(fā)現(xiàn),程序員的經(jīng)驗(yàn)和代碼質(zhì)量或效率并沒有關(guān)系。
在詳細(xì)地研究了Sackman、Erickson以及Grant的研究結(jié)果之后,我們可以發(fā)現(xiàn)他們所使用的方法中有很多缺陷,例如把使用低級(jí)程序語言和高級(jí)程序語言的程序員合在一起研究等。但是,即便把這些缺陷考慮進(jìn)來,他們的數(shù)據(jù)也仍然表明,最好的程序員和最差的程序員之間的差距能達(dá)到10倍以上。
那次研究之后,還有很多其他關(guān)于專業(yè)程序員的相關(guān)研究都證明了一個(gè)結(jié)論:程序員的水平也分三六九等。
除些之外,很多軼事傳聞也支持這種觀點(diǎn)。在20世紀(jì)80年代中期,當(dāng)我還在波音公司工作的時(shí)候,有個(gè)約80個(gè)程序員組成的項(xiàng)目組正面臨著無法按時(shí)完成一項(xiàng)關(guān)鍵任務(wù)的風(fēng)險(xiǎn)。這個(gè)項(xiàng)目對(duì)于波音來說至關(guān)重要,所以他們把項(xiàng)目上80個(gè)人中的一大半換成了另外1個(gè)人,而這位仁兄單槍匹馬地完成了所有的編程工 作,并按時(shí)交付了軟件。我并沒有在這個(gè)項(xiàng)目組中工作,也不認(rèn)識(shí)這位天才,但是這個(gè)故事是一位我所信任的人告訴我的,所以我相信這是真的。
這種差距并不僅限于軟件行業(yè)。Norm Augustine的一份研究指出,在各行各業(yè)中,包括寫作、橄欖球、發(fā)明、警務(wù)工作等,都存在一個(gè)情況,那就是行業(yè)中位列前20%的頂尖人才的產(chǎn)出占到 了該行業(yè)總產(chǎn)出的50%,無論這些產(chǎn)出是得分、專利、偵破的案件還是軟件 。你可以想想看,這還是有道理的。我們都知道,有的學(xué)生就是比其他學(xué)生優(yōu)秀,運(yùn)動(dòng)員、藝術(shù)家甚至家長(zhǎng)也是如此。既然這種差別存在于所有人群中,那么軟件開發(fā)又怎么會(huì)例外呢?
巨大的差距帶來的負(fù)面影響
Augustine的研究發(fā)現(xiàn),由于有些人完全沒有任何實(shí)質(zhì)的貢獻(xiàn)(例如不能得分的前鋒、沒有專利的發(fā)明家、無法破案的警探等),人與人之間的差距的實(shí)際情況可能比上文提到的數(shù)據(jù)還要大。
在軟件行業(yè)中似乎就是這樣。在多個(gè)已發(fā)表的關(guān)于軟件開發(fā)效率的研究項(xiàng)目中,大約有10%的實(shí)驗(yàn)參與者無法完成實(shí)驗(yàn)任務(wù)。這些研究報(bào)告常常會(huì)這樣說 道:“所以我們從數(shù)據(jù)集中排除了這些參與者的結(jié)果。”但是在現(xiàn)實(shí)生活中,如果某個(gè)人“無法完成任務(wù)”,你就不能簡(jiǎn)單地“從數(shù)據(jù)集中排除他們的結(jié)果”了。你或者得等他們完成,或者得另外指派一個(gè)人完成他們的工作,等等。這里有一個(gè)有趣(而又可怕)的暗示,那就是在軟件行業(yè)中,差不多有10%的人對(duì)項(xiàng)目產(chǎn)出的貢獻(xiàn)是負(fù)數(shù)。
和此前一樣,這也和我們?cè)诂F(xiàn)實(shí)生活中的感受一致。我相信很多人都能夠在共事過的人中找出符合這個(gè)描述的人。
什么造就了真正的“10倍程序員”
很多人并不喜歡被貼上“10倍”這樣的標(biāo)簽,因?yàn)樗麄冇X得人們會(huì)說:“我們團(tuán)隊(duì)中曾有個(gè)超級(jí)程序員,他牛哄哄的,每個(gè)人都不愿和他來往,要是沒有他整體效率反而還要高些。”
通常來說,任何對(duì)10倍程序員的實(shí)用定義都必須考慮這樣的程序員對(duì)于團(tuán)隊(duì)其他人員的影響。我也知道的確有牛哄哄的超級(jí)程序員。但更多的時(shí)候,那些牛哄哄的超級(jí)程序員其實(shí)只是普通水平的一般程序員而已,甚至還達(dá)不到普通水平。他們只是用牛哄哄的外表來讓自己的表現(xiàn)看上去不那么差而已。我所共事過的真正的超級(jí)程序員們除了技術(shù)水平以外,通常還有很好的團(tuán)隊(duì)精神(雖然有時(shí)也有些例外)。
測(cè)量程序員的個(gè)人生產(chǎn)力的問題
由于很多研究都指出不同程序員的效率可以有10倍的差距,導(dǎo)致很多人產(chǎn)生了一個(gè)想法,那就是測(cè)量他們?cè)谧约航M織內(nèi)的個(gè)人效率。無論如何,這種想法所涉及的測(cè)量“活的”程序員的生產(chǎn)力和一般研究中所說的生產(chǎn)力有很大不同。
軟件工程研究通常用完成某個(gè)任務(wù)所需的時(shí)間、每小時(shí)或每個(gè)月能寫多少行代碼或者其他一些標(biāo)準(zhǔn)來測(cè)量生產(chǎn)力。但如果你嘗試在商業(yè)環(huán)境中用這些標(biāo)準(zhǔn)來測(cè)量生產(chǎn)力,那就會(huì)碰到很多問題。
生產(chǎn)力=每月產(chǎn)出的代碼行數(shù)嗎
軟件設(shè)計(jì)是一件非確定性的事情,對(duì)同樣的一個(gè)問題,不同的設(shè)計(jì)師/開發(fā)人員會(huì)做出完全不同的解決方案。如果我們用每月產(chǎn)出的代碼行數(shù)(或者類似的標(biāo) 準(zhǔn))來衡量生產(chǎn)力,那么我們就默認(rèn)了用10倍的代碼來解決同樣的問題的程序員就有10倍的生產(chǎn)力。顯然事情并非總是如此。比如某個(gè)程序員可能會(huì)有一個(gè)絕妙的設(shè)計(jì)想法,結(jié)果只用10%的代碼就解決了普通程序員需要100%的代碼才能解決的問題。
有人曾斷言,偉大的程序員寫的代碼總是更簡(jiǎn)短。事實(shí)上,編程水平和代碼的簡(jiǎn)潔性之間可能有著某種關(guān)聯(lián),但我現(xiàn)在并不想做這樣一個(gè)寬泛的結(jié)論。我只想說,偉大的程序員總是努力把代碼寫得更清楚,而結(jié)果通常就是更簡(jiǎn)短的代碼。不過有時(shí)候,最清楚、最簡(jiǎn)單和最明顯的設(shè)計(jì)和那些更“巧妙”的設(shè)計(jì)相比,需要更多一點(diǎn)的代碼。在這種情況下,我認(rèn)為偉大的程序員也會(huì)用稍微多一點(diǎn)的代碼來避免太過于取巧的設(shè)計(jì)。無論怎么說,用“每月產(chǎn)出代碼行數(shù)”來衡量生產(chǎn)力的想法都是有問題的。
Dilbert漫畫中有一個(gè)故事:老板說每發(fā)現(xiàn)一個(gè)bug就獎(jiǎng)勵(lì)10塊錢,大家都高呼這次賺到了,還有人想通過這個(gè)辦法“寫出輛小貨車”來 。故事正好說明了這個(gè)問題,即如果你用代碼的產(chǎn)出量來衡量生產(chǎn)力,有的人就會(huì)利用這一點(diǎn),寫很多很多也許完全沒有必要的代碼。這里的問題并不在于“代碼量”這個(gè)標(biāo)準(zhǔn),而在于舊式的管理思想,即“人們只會(huì)做會(huì)被考察的事情”。但你必須小心不要考察錯(cuò)東西。
生產(chǎn)力=功能點(diǎn)嗎
“每個(gè)月的代碼產(chǎn)出”所帶來的問題有一部分可以依靠功能點(diǎn)的標(biāo)準(zhǔn)來衡量程序規(guī)模。功能點(diǎn)是一套“合成”的測(cè)量程序大小的標(biāo)準(zhǔn)。包括輸入、輸出、查詢、文件數(shù)量等都被考慮進(jìn)來,作為確定程序大小的參數(shù)。低效的設(shè)計(jì)/編程風(fēng)格并不能產(chǎn)生更多的功能點(diǎn),所以功能點(diǎn)這個(gè)標(biāo)準(zhǔn)不涉及代碼量的問題。但是它卻有 一個(gè)更實(shí)際的問題,那就是你需要專業(yè)人士來計(jì)算功能點(diǎn)(很多公司并無這種人才),而且功能點(diǎn)和個(gè)人產(chǎn)出的對(duì)應(yīng)也非常粗略,所以無法用于確定程序員的個(gè)人生 產(chǎn)力。
復(fù)雜度呢
管理者常說:“我總是把最困難、最復(fù)雜的編程任務(wù)交給最好的程序員去做。所以無論用什么方法來衡量,他的生產(chǎn)力好像總是比別人低,但是如果同樣的事情讓別人來做,就可能花上兩倍的時(shí)間。”這種現(xiàn)象很正常,但是也會(huì)影響我們定義和測(cè)量生產(chǎn)力的方式。
到底有沒有辦法可以測(cè)量個(gè)人生產(chǎn)力
前文提到的這些困難讓很多人認(rèn)為:要想測(cè)量個(gè)人生產(chǎn)力簡(jiǎn)直困難重重,沒人可以做到。但我認(rèn)為要想正確地測(cè)量個(gè)人生產(chǎn)力是可能的,只是需要注意以下幾點(diǎn)。
- 不要指望僅用一個(gè)單獨(dú)的衡量標(biāo)準(zhǔn)就能了解個(gè)人生產(chǎn)力的實(shí)際整體狀況
你可以參照一下那些在體育比賽中搜集的統(tǒng)計(jì)數(shù)據(jù)。我們甚至無法用一個(gè)單獨(dú)的標(biāo)準(zhǔn)來確定棒球比賽中擊球手的水平。我們必須考慮打擊率、全壘打、跑壘得分、上 壘率以及其他種種因素。而且僅有這些數(shù)據(jù)還不夠,我們還得去證明這些數(shù)據(jù)的意義。如果擊球手的優(yōu)劣無法用簡(jiǎn)單的標(biāo)準(zhǔn)來評(píng)斷的話,難道程序員的個(gè)人生產(chǎn)力這樣復(fù)雜的事情就可以嗎?我們應(yīng)該用的不是一個(gè)單獨(dú)的標(biāo)準(zhǔn),而是一整套標(biāo)準(zhǔn)的組合。這套組合標(biāo)準(zhǔn)的任務(wù),就是讓我們對(duì)個(gè)人生產(chǎn)力有更深入的了解。比如,這套標(biāo)準(zhǔn)可能包括準(zhǔn)時(shí)完成任務(wù)的百分比、管理者的評(píng)分1~10、同事的評(píng)分1~10、每個(gè)月產(chǎn)出的代碼行數(shù)、每行代碼的平均缺陷數(shù)量、不當(dāng)修復(fù)的比率,等等。
- 不要認(rèn)為只要有了某種標(biāo)準(zhǔn)(無論單獨(dú)或者組合)就可以對(duì)不同個(gè)體的生產(chǎn)力進(jìn)行細(xì)致的鑒別了
要記住一點(diǎn):這些個(gè)人生產(chǎn)力的標(biāo)準(zhǔn)只是為你找出問題,但是并不會(huì)回答這些問題。對(duì)這些標(biāo)準(zhǔn)的不當(dāng)使用,比如用來進(jìn)行績(jī)效評(píng)估,不但會(huì)帶來管理上的問題,也會(huì)造成統(tǒng)計(jì)上的問題。
- 整體的趨勢(shì)常常比某個(gè)時(shí)間點(diǎn)上的測(cè)量結(jié)果更重要
將這些測(cè)量結(jié)果在不同個(gè)體間進(jìn)行橫向比較往往是得不出任何有意義的結(jié)論的。更有用的做法應(yīng)該是將某個(gè)人的測(cè)量結(jié)果進(jìn)行縱向分析,看看這個(gè)人有沒有隨著時(shí)間的推移而進(jìn)步。
- 你要問自己:我測(cè)量個(gè)人生產(chǎn)力到底是為什么
在研究環(huán)境中,研究員們需要評(píng)估不同技術(shù)的效率,所以需要測(cè)量個(gè)人生產(chǎn)力。相對(duì)于研究環(huán)境,在現(xiàn)實(shí)項(xiàng)目中使用同樣的測(cè)量標(biāo)準(zhǔn)產(chǎn)生的問題就要多得多了。在現(xiàn)實(shí)項(xiàng)目環(huán)境中,你想要用這些測(cè)量標(biāo)準(zhǔn)來做什么?績(jī)效評(píng)估?這主意不行,原因剛剛才說過。分配任務(wù)?但我所訪問過的大部分管理者都說他們不必測(cè)量也知道誰是他們團(tuán)隊(duì)中的明星成員,這一點(diǎn)我也相信。做預(yù)算?不行,不同設(shè)計(jì)方法導(dǎo)致的差距、不同的任務(wù)難度以及其他相關(guān)的原因使得我們無法有效利用這些標(biāo)準(zhǔn)來做項(xiàng)目預(yù)算。
在現(xiàn)實(shí)項(xiàng)目中,個(gè)人生產(chǎn)力的標(biāo)準(zhǔn)很難找到一個(gè)對(duì)項(xiàng)目管理有益而又符合統(tǒng)計(jì)學(xué)規(guī)則的用處。根據(jù)我的經(jīng)驗(yàn),除了做研究之外,人們想對(duì)個(gè)人效率進(jìn)行測(cè)量的動(dòng)機(jī)通常來自一些在統(tǒng)計(jì)學(xué)上不能成立的結(jié)論。也就是說,雖然我知道在研究中對(duì)個(gè)人效率的測(cè)量非常有意義,但是我認(rèn)為在實(shí)際項(xiàng)目中卻很難找到它的合理用處。
軟件開發(fā)中的團(tuán)隊(duì)生產(chǎn)力差距
軟件專家們很早就已經(jīng)發(fā)現(xiàn),團(tuán)隊(duì)生產(chǎn)力的差距和個(gè)人生產(chǎn)力的差距一樣大,是以數(shù)量級(jí)為單位的。這里有一部分原因是因?yàn)槲镆灶惥郏艘匀悍郑@一點(diǎn)已經(jīng)由一次對(duì)來自18個(gè)組織機(jī)構(gòu)的166個(gè)職業(yè)程序員的研究證明了。
又比如,在一次對(duì)7個(gè)完全相同的項(xiàng)目的研究中,研究人員發(fā)現(xiàn),在這些團(tuán)隊(duì)中耗費(fèi)精力最多的是最低的3.4倍,而對(duì)于程序的大小,最大的是最小的3倍 。雖然生產(chǎn)力有一定差距,但是這次研究中的程序員都來自相似的背景。他們都是科班出身的職業(yè)程序員,而且都有多年的經(jīng)驗(yàn)。我們可以合理地推測(cè),如果研究對(duì)象的背景差異再大一些,那么他們之間的差距會(huì)更大。早期的一份對(duì)編程團(tuán)隊(duì)的研究曾指出,對(duì)于同樣的項(xiàng)目,不同團(tuán)隊(duì)所提交的程序大小的比例可以達(dá)到 5∶1,而所需時(shí)間的比例可以達(dá)到2.6∶1。
Barry Boehm等研究人員為了確立COCOMO II成本估算模型而研究了超過20年的數(shù)據(jù),并總結(jié)到:對(duì)于同樣的程序,能力評(píng)分在15+的團(tuán)隊(duì)需要的時(shí)間是得分為90+的團(tuán)隊(duì)的3.5倍(以100分算)。 如果一個(gè)團(tuán)隊(duì)比另一個(gè)團(tuán)隊(duì)在程序語言或者應(yīng)用領(lǐng)域上更有經(jīng)驗(yàn),那么這個(gè)差距還會(huì)更大。
一個(gè)具體的例子就是 Lotus 1~2~3 第三版和微軟 Excel 3.0 開發(fā)團(tuán)隊(duì)之間的生產(chǎn)率差距。兩者都是在1989~1990這個(gè)時(shí)間段發(fā)布的桌面電子表格應(yīng)用程序。由于很少看到兩個(gè)公司公布相似項(xiàng)目的數(shù)據(jù),所以這 種死對(duì)頭之間的對(duì)比就顯得尤其有趣了。這兩個(gè)項(xiàng)目的數(shù)據(jù)如下:Excel的工作人員總共消耗了50個(gè)工年 ,共寫了649, 000行代碼 。而Lotus 1~2~3消耗了260個(gè)工年,共寫了400,000行代碼 [13]。Excel的團(tuán)隊(duì)每個(gè)工年的代碼產(chǎn)出是13,000行代碼。而Lotus的團(tuán)隊(duì)每個(gè)工年的產(chǎn)出只有1500行代碼。兩個(gè)團(tuán)隊(duì)之間的生產(chǎn)力差距超過了8倍,正好證明了我們此前的主張,即團(tuán)隊(duì)的生產(chǎn)力也 有差距,并且有著更大量級(jí)的差距。
有趣的是,這些量化的結(jié)果和局外人對(duì)于這些項(xiàng)目的感覺非常貼近。Lotus 1~2!3第三版當(dāng)時(shí)是出了名的跳票王,比預(yù)期的時(shí)間至少晚了兩年才發(fā)布。而在微軟內(nèi)部,Excel大受贊揚(yáng),被譽(yù)為是微軟最成功的項(xiàng)目之一。對(duì)于真實(shí)公司的 真實(shí)項(xiàng)目,這種程度的同類比較恐怕已經(jīng)是能做到的極致了。
如前所述,這個(gè)例子說明了造成生產(chǎn)力差距的各種因素。Lotus和微軟都煞費(fèi)苦心地為各自的項(xiàng)目招募了頂級(jí)的人才,所以我懷疑團(tuán)隊(duì)生產(chǎn)力的差距并不只是由于團(tuán)隊(duì)成員的能力差距造成的,還牽扯到了很多組織結(jié)構(gòu)上的因素,比如產(chǎn)品遠(yuǎn)景是否清楚、客戶需求是否明確以及成員之間是否能同心協(xié)力,等等。
組織的因素會(huì)影響團(tuán)隊(duì)生產(chǎn)力的發(fā)揮。杰出的組織中個(gè)人能力平庸的團(tuán)隊(duì)可以超越平庸組織中個(gè)人能力杰出的團(tuán)隊(duì)。當(dāng)然,像杰出的組織+杰出的團(tuán)隊(duì)或者平庸的組織+平庸的團(tuán)隊(duì)這樣的組合也不是沒有的。在這種時(shí)候,團(tuán)隊(duì)生產(chǎn)力(或者叫組織生產(chǎn)力)和個(gè)人生產(chǎn)力一樣相差10倍也就不足為奇了。
本文摘自《軟件之道:軟件開發(fā)爭(zhēng)議問題剖析》
it知識(shí)庫:程序員編程生產(chǎn)力相差10倍意味著什么?,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。