關(guān)于程序員開(kāi)發(fā)效率的悖論
程序員看起來(lái)應(yīng)該都是一幫非常高產(chǎn)的人。
你總能看到他們?cè)陔娔X桌前噼里啪啦的敲著鍵盤;他們焦急的等待會(huì)議結(jié)束,希望馬上能回去編程。當(dāng)被問(wèn)起,他們總是說(shuō)沒(méi)有足夠的時(shí)間編寫出這些程序,需要立刻開(kāi)始編碼,這樣才能及早完成。
看來(lái),敲代碼一定是最重要的事情了,不是嗎?
如果一個(gè)普通水平的程序員每天能寫出50行代碼。一個(gè)5萬(wàn)行代碼的程序?qū)?huì)需要1000人/天來(lái)開(kāi)發(fā)。把5萬(wàn)行代碼輸入電腦里,一個(gè)程序員每天能錄1000行,也就需要50人/天。
那么,剩下的950天這些程序員都在干什么?
在搞清楚這個(gè)問(wèn)題前,讓我們先看一些簡(jiǎn)單的資料。Capers Jones研究了數(shù)萬(wàn)個(gè)軟件項(xiàng)目,他通過(guò)比較其中的各種軟件開(kāi)發(fā)方法(RUP,極限編程,敏捷開(kāi)發(fā),瀑布開(kāi)發(fā)等等)和各種編程語(yǔ)言,發(fā)現(xiàn),一個(gè)程序員每月平均寫出的代碼大概是325行到750行,比我們上面說(shuō)到的每月1000行還要少。就算是程序員不是每天只寫50行代碼,但下面兩點(diǎn)是清楚的。
- 開(kāi)發(fā)方法的差異不能解釋程序員代碼生產(chǎn)量上的不平衡
- 使用的編程語(yǔ)言無(wú)關(guān)程序員代碼生產(chǎn)量上的不平衡
實(shí)際情況是,只有很小一部分的程序員的時(shí)間是花在寫代碼上的。如果一個(gè)程序員的所有時(shí)間都在敲代碼,那他一定是在嘗試不同的代碼組合,直到找到好用的代碼組合。
更準(zhǔn)確的說(shuō)法是,找到看起來(lái)是符合需求的“代碼組合”——如果測(cè)試人員或業(yè)務(wù)分析師不來(lái)告知說(shuō)這些代碼是有問(wèn)題的。
這就是為什么在把手放到鍵盤上前喜歡先計(jì)劃代碼如何寫的程序員會(huì)比其他程序員效率高的原因。事實(shí)上,不僅僅只有很少數(shù)的程序員在寫代碼前先計(jì)劃,很多即使有多年編程經(jīng)驗(yàn)的老程序員也不知道這個(gè)道理。一項(xiàng)持續(xù)40年的研究表明,程序員的開(kāi)發(fā)效率并不會(huì)隨閱歷的增加而增加。(參考No Experience Required!)
多年的編程閱歷并不是必然導(dǎo)致高開(kāi)發(fā)效率
十分有趣的是,各種強(qiáng)調(diào)編碼前先計(jì)劃的軟件開(kāi)發(fā)方法論都已經(jīng)存在很長(zhǎng)時(shí)間了。比如Personal Software Process (PSP),創(chuàng)始人Watts Humphrey根據(jù)統(tǒng)計(jì)數(shù)據(jù)說(shuō):
PSP能提高21.2%的生產(chǎn)效率和31.2%的質(zhì)量水平
像這樣優(yōu)秀的實(shí)踐方法有很多??傊?,就像作家動(dòng)筆前先要構(gòu)思好文章的結(jié)構(gòu)和內(nèi)容一樣,程序員在按動(dòng)鍵盤前如果不先琢磨一陣,很可能發(fā)生的情況是他的開(kāi)發(fā)效率不會(huì)很高。
英文原文:The Programmer Productivity Paradox
譯文鏈接:http://www.vaikan.com/the-programmer-productivity-paradox/