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