关于程序员开发效率的悖论
程序员看起来应该都是一帮非常高产的人。
你总能看到他们在电脑桌前噼里啪啦的敲着键盘;他们焦急的等待会议结束,希望马上能回去编程。当被问起,他们总是说没有足够的时间编写出这些程序,需要立刻开始编码,这样才能及早完成。
看来,敲代码一定是最重要的事情了,不是吗?
如果一个普通水平的程序员每天能写出50行代码。一个5万行代码的程序将会需要1000人/天来开发。把5万行代码输入电脑里,一个程序员每天能录1000行,也就需要50人/天。
那么,剩下的950天这些程序员都在干什么?
在搞清楚这个问题前,让我们先看一些简单的资料。 Capers Jones研 究了数万个软件项目,他通过比较其中的各种软件开发方法(RUP,极限编程,敏捷开发,瀑布开发等等)和各种编程语言,发现,一个程序员每月平均写出的代 码大概是325行到750行,比我们上面说到的每月1000行还要少。就算是程序员不是每天只写50行代码,但下面两点是清楚的。
-
开发方法的差异不能解释程序员代码生产量上的不平衡
-
使用的编程语言无关程序员代码生产量上的不平衡
实际情况是,只有很小一部分的程序员的时间是花在写代码上的。如果一个程序员的所有时间都在敲代码,那他一定是在尝试不同的代码组合,直到找到好用的代码组合。
更准确的说法是,找到看起来是符合需求的“代码组合”——如果测试人员或业务分析师不来告知说这些代码是有问题的。
这 就是为什么在把手放到键盘上前喜欢先计划代码如何写的程序员会比其他程序员效率高的原因。事实上,不仅仅只有很少数的程序员在写代码前先计划,很多即使有 多年编程经验的老程序员也不知道这个道理。一项持续40年的研究表明,程序员的开发效率并不会随阅历的增加而增加。(参考 No Experience Required!)
多年的编程阅历并不是必然导致高开发效率
十分有趣的是,各种强调 编码前先计划的软件开发方法论都已经存在很长时间了。比如Personal Software Process (PSP),创始人 Watts Humphrey根据统计数据说:
PSP能提高21.2%的生产效率和31.2%的质量水平
像这样优秀的实践方法有很多。总之,就像作家动笔前先要构思好文章的结构和内容一样,程序员在按动键盘前如果不先琢磨一阵,很可能发生的情况是他的开发效率不会很高。
[英文原文: The Programmer Productivity Paradox ]