首页 > 编程学习 > 程序员编程生产力相差10倍意味着什么?

在软件工程研究中,被验证得最多的结论就是对于同等经验的两个不同程序员,在效率和质量上可能会有10倍的差距。研究人员还发现,这种差距也适用于团队级别上,也就是说在同一行业内的不同的团队也是如此。

软件开发中的个人效率的变化

首先发现不同人在编程生产力上的巨大差距的研究,是1960年由Sackman、Erikson以及Grant三个人完成的。他们研究了工作经验平 均在7年的专业程序员,并发现最好和最差的程序员写新代码的时间比为20∶1;调试次数是25∶1;程序大小是5∶1;程序的执行效率是10∶1。他们还 发现,程序员的经验和代码质量或效率并没有关系。

在详细地研究了Sackman、Erickson以及Grant的研究结果之后,我们可以发现他们所使用的方法中有很多缺陷,例如把使用低级程序语 言和高级程序语言的程序员合在一起研究等。但是,即便把这些缺陷考虑进来,他们的数据也仍然表明,最好的程序员和最差的程序员之间的差距能达到10倍以 上。

那次研究之后,还有很多其他关于专业程序员的相关研究都证明了一个结论:程序员的水平也分三六九等(具体内容参见本书中的参考文献)。

除些之外,很多轶事传闻也支持这种观点。在20世纪80年代中期,当我还在波音公司工作的时候,有个约80个程序员组成的项目组正面临着无法按时完 成一项关键任务的风险。这个项目对于波音来说至关重要,所以他们把项目上80个人中的一大半换成了另外1个人,而这位仁兄单枪匹马地完成了所有的编程工 作,并按时交付了软件。我并没有在这个项目组中工作,也不认识这位天才,但是这个故事是一位我所信任的人告诉我的,所以我相信这是真的。

这种差距并不仅限于软件行业。Norm Augustine的一份研究指出,在各行各业中,包括写作、橄榄球、发明、警务工作等,都存在一个情况,那就是行业中位列前20%的顶尖人才的产出占到 了该行业总产出的50%,无论这些产出是得分、专利、侦破的案件还是软件 。你可以想想看,这还是有道理的。我们都知道,有的学生就是比其他学生优秀,运动员、艺术家甚至家长也是如此。既然这种差别存在于所有人群中,那么软件开 发又怎么会例外呢?

巨大的差距带来的负面影响

Augustine的研究发现,由于有些人完全没有任何实质的贡献(例如不能得分的前锋、没有专利的发明家、无法破案的警探等),人与人之间的差距的实际情况可能比上文提到的数据还要大。

在软件行业中似乎就是这样。在多个已发表的关于软件开发效率的研究项目中,大约有10%的实验参与者无法完成实验任务。这些研究报告常常会这样说 道:“所以我们从数据集中排除了这些参与者的结果。”但是在现实生活中,如果某个人“无法完成任务”,你就不能简单地“从数据集中排除他们的结果”了。你 或者得等他们完成,或者得另外指派一个人完成他们的工作,等等。这里有一个有趣(而又可怕)的暗示,那就是在软件行业中,差不多有10%的人对项目产出的 贡献是负数。

和此前一样,这也和我们在现实生活中的感受一致。我相信很多人都能够在共事过的人中找出符合这个描述的人。

什么造就了真正的“10倍程序员”

很多人并不喜欢被贴上“10倍”这样的标签,因为他们觉得人们会说:“我们团队中曾有个超级程序员,他牛哄哄的,每个人都不愿和他来往,要是没有他整体效率反而还要高些。”

通常来说,任何对10倍程序员的实用定义都必须考虑这样的程序员对于团队其他人员的影响。我也知道的确有牛哄哄的超级程序员。但更多的时候,那些牛 哄哄的超级程序员其实只是普通水平的一般程序员而已,甚至还达不到普通水平。他们只是用牛哄哄的外表来让自己的表现看上去不那么差而已。我所共事过的真正 的超级程序员们除了技术水平以外,通常还有很好的团队精神(虽然有时也有些例外)。

测量程序员的个人生产力的问题

由于很多研究都指出不同程序员的效率可以有10倍的差距,导致很多人产生了一个想法,那就是测量他们在自己组织内的个人效率。无论如何,这种想法所涉及的测量“活的”程序员的生产力和一般研究中所说的生产力有很大不同。

软件工程研究通常用完成某个任务所需的时间、每小时或每个月能写多少行代码或者其他一些标准来测量生产力。但如果你尝试在商业环境中用这些标准来测量生产力,那就会碰到很多问题。

Copyright © 2010-2022 ngui.cc 版权所有 |关于我们| 联系方式| 豫B2-20100000