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