以一当十的程序员不是传说

>>>  技術話題—商業文明的嶄新時代  >>> 簡體     傳統

  英文原文:The 10x developer is NOT a myth 

  昨晚,我发了下面的微博:

有些人议论所谓10x或者超级的程序员都是传说。可那些着名运动员,艺术家,作家,呃,还有摇滚明星的都是神话吗?

Yevgeniy Brikman (@brikis98) September 29, 2013

  我收到了大量的回复和问题,但微博不适合讨论问题,所以我写了这篇博格来进一步讨论。

  已经有   文章号称 10x 的程序员根本不存在。反对观点一般分为以下三种:

  1. 最初 10x 这个数字来自一个研究(Sackman,Erikson, and Grant (1968)),不是很有说服力。
  2. 生产力是个很难测量的模糊概念,所以我们不应该声称诸如 10x 之类的度量。
  3. 个人才华确有高低不同,但一个程序员不可能比另一个程序员高出 10 倍的工作能力。

  我不同意以上的这些观点,我来逐条看一下这些论点。

  [译者注]:10x 程序员(10x 效应来自一个有趣的观察:伟大的程序员相比普通程序员的生产力不仅是 15-20% 的差距,很可能会 10 倍甚至更多)的说法最初来自于 www.forbes.comwww.tempobook.com

  对 10x 程序员的研究不只有一个

  尽管微博和 Hacker News 里那些坐在摇椅里的学术专家喜欢驳斥同行的研究结果,然而 10x 程序员的证据相当令人信服而且并不限于单个研究。请允许我引用来自 StackOverflow 里得票最多的回复

Sackman, Erikson, and Grant 在 1968 年进行的最初研究发现程序员的编程效率有巨大的差异。他们研究了平均有 7 年经验的专业编程人员,发现最好和最差的编程人员初次写代码所用的时间比率大概是 20 比1;调试时间大概是 25 比1;程序大小大概是 5 比1;程序执行速度大概是 10 比1。他们还发现,编程者的经验和代码质量的好坏并没有关系。

对他们的发现进行详细的考证,可以看出一些方法论上的缺陷。。。然而,即使考虑了这些缺陷,他们的数据依然可以呈现出最好和最差的程序员之间不止 10 倍的差距。

在首个研究之后的几年里,程序员之间倍数级的差距这一发现被其他许多专业程序员的研究所验证(Curtis 1981, Mills 1983, DeMarco and Lister 1985, Curtis etal. 1986, Card 1987, Boehm and Papaccio 1988, Valett and McGarry 1989, Boehm etal 2000)

  在这里 and 这里你可以读到更多。

  即使不能测量,依然可以推理

  即使你无视上面的研究,声称编程效率很难测量-那也表示我们依然可以讨论下 10 倍效率程序员。仅仅是因为一个东西很难测量并不代表我们不能测量。

  比如,你是如何为你最近的项目挑选编程语言的?你有去搜索证明这种语言比其他更有效率的研究吗?个人来讲,我不需要经验就可以证明 Ruby 在构建网站方面比C高效了好多倍。你可以抛出一些粗略的准则(程序库的可利用性,社区支持,文档等),但现实是大多数人会基于直观推理来选择语言,并不是什么双盲研究。尽管缺少数据资料,我打赌选 Ruby 而不是C去做网站开发大多数时候都会被证明是一个正确的决定。

  当然,编程并不是个例:什么样的度量标准可以判断某个作家,艺术家,教师或者哲学家比另外一个好?仅通过观察,我不能给你一个生产力度量标准说莎士比亚,纳博科夫,或者奥威尔比一般的作家好了好几倍,但是大多数人会同意他们是的。

  编程不是体力劳动

  针对 10 倍效率程序员的最大问题是有些人认为编程不过是体力劳动,程序员也不过是流水线上的工人。一些程序员可能会比其他人好一些,但是,一个程序员必定不可能持续地比其他人解决 10 倍多的问题。10 个人的团队总是会胜过一个程序员!9 个女人一起也不可能在一个月内就生出一个孩子啊!

  上面的逻辑听起来就像编程效率就是打字速度;好像 10x 程序员只是简单地比普通程序员多产了 10 倍的代码。这种推理无视了编程其实是一个创造性的专业,并不是体力劳动。解决同一个问题有许多许多种方式。更多地考虑刑侦级推理而不是简单的婴儿式推理:10 个普通的侦探对一个夏洛克。谁可以更快地破案?

  一个 10x 程序员有普通程序员无法企及的解决问题的能力和洞察力;他们将会避开耗费普通程序员大量时间的所有问题。10 个写错误代码的工程师肯定不如一个写正确代码的程序员。

  编程是选择

  想一想一个软件的构建需要做多少决定,比如一个网站:你要采用什么语言?采用什么样的架构?用什么存储数据?用什么来高速缓存?在哪里托管站点?如何监测?如何推动新的改变?怎么存储代码?需要设置什么样的自动化测试?

  10 个普通程序员在每个阶段都可以做出平均水平的决定,这些决定的成本或者收益会累乘。设想流量呈指数增长,但是这个普通的团队构建了一个普通的网站,难以分区的数据存储,缺少足够冗余的托管,没有合适备份的版本控制,没有持续集成环境,以及没有监测。如果他们的时间全在忙于到处灭火,这 10 个程序员能有多高效?

  如果一个程序员可以以倍数级降低的工作量的方式来建模这个问题,那么这一个程序员就胜过一个 10 个人的团队。从我多年的经验来看,一个伟大的程序员知道那些事后修补更为昂贵的错误。预先做出一个好的决定,一个 10x 程序员可以避免数月的工作。

  编程不是写更多的代码;是要写正确的代码。成为一个10x程序员并不是因为你做了几倍多的工作,而是因为你更为经常地做出更好的决定。

  这不是说 10x 程序员就完全不会犯错;而是程序员每天都要做出许多选择,伟大的程序员会比普通的程序员更为经常地做出正确的选择。

  而且这并不只是说编程。你是更想要 10 个普通科学家呢还是牛顿?10 个普通科学家可不会提出运动三定律,万有引力,二项式序列,微积分等;一个牛顿就做到了。在你的团队里你是更想要一个迈克尔乔丹呢还是 10 个普通球员?(注意:乔丹拿着 10 倍于 NBA 球员的平均薪资)?你是更想让史蒂夫乔布斯或者艾伦马斯克运作公司或者把钥匙交给 10 个普通的企业家?

  10x程序员非常稀有

  把目光放长远一点很重要。明星程序员,运动员,作家以及科学家是极为稀有的。我并不推荐仅雇佣这些摇滚明星的招聘体系;这只会看起来愚蠢又孤独。不要让完美成为不错的敌人:雇佣能找到的最好的的工程师,给他们变得越来越好的机会。

  然而,不要掉入所有的程序员生来平等的谬论。在任何一个创造性的专业都存在一个巨大的能力谱图。一端是可以毁掉一个组织的雇员类型,每行他们写下的代码都增加了技术负债。另一端,则是那些可以写出任何可能的代码,而且数倍地优秀于普通人的人。


Cnblogs 外刊IT评论 2015-08-23 08:57:30

[新一篇] 為什么用了這么多社交軟件,你還是要回家相親

[舊一篇] 你應該在大學學到的10個方面的知識
回頂部
寫評論


評論集


暫無評論。

稱謂:

内容:

驗證:


返回列表