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

标签: 以一当十 程序员 传说 | 发表时间:2015-02-25 13:02 | 作者:
出处:http://news.cnblogs.com/

英文原文: 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 程序员非常稀有

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

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

本文链接

相关 [以一当十 程序员 传说] 推荐:

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

- - 博客园_新闻
英文原文: The 10x developer is NOT a myth . 有些人议论所谓“10x”或者“超级”的程序员都是传说. 可那些著名运动员,艺术家,作家,呃,还有摇滚明星的都是神话吗. 我收到了大量的回复和问题,但微博不适合讨论问题,所以我写了这篇博格来进一步讨论. 已经有 一  堆  的  文章号称 10x 的程序员根本不存在.

[来自iPc.me] 传说中的《程序猿装B指南》,程序员童鞋们请认真学习

- han - iPc.me
最近似乎某些装B指南比较火,刚好周五的晚上闲着没事,于是我也随便写一个《程序员装B指南》,话说装B是一种能延年益寿的好习惯,大家随便看看,开心就好……. [ 请大家更新订阅地址 http://feed.ipc.me ]. iPc.me 猜你可能还会喜欢:为什么我们程序员晋升要这么难. 2011程序员薪资调查报告出炉.

普通程序员、文艺程序员、2B程序员

- 可可 - 宇宙的心弦
希望能引起广大苦逼的正在学或者已经学过c++人的共鸣和会心一笑吧. 如何辨别自己在现实还是虚拟世界.

如何面试程序员?

- bluesnail - 阮一峰的网络日志
你要面试一个程序员,应该问他什么问题. 有人在Hacker News的讨论区里,请求指点,怎么才能在面试中发现合格的人. 众人纷纷出主意,有很多高质量的回帖,我觉得挺有启发,就整理出了下面这篇文章. 首先,最重要的是,你自己一开始就应该想清楚:. 哪些途径和方法可以发现这样的人. 只有明确这些根本性的问题,才能正确高效地完成面试.

程序员的本质

- Allen - 译言-电脑/网络/数码科技
来源What do programmers really do?.   很多人(包括我岳母)认为计算机变得如此智能,所以在不久的未来将不再需要程序员. 另外一些人认为程序员是天才,他们在电脑前能不断地解决复杂的数学难题. 甚至不少程序员对他们是做什么的都没有清晰的概念.   在这篇文章中,我想给不知情的人解释一下程序员到底是做什么的:.

程序员人生之路

- myartings - 博客园-首页原创精华区
   程序员人生之路(强烈推荐,分析的透彻. ),某程序达人的人生感悟,估计没有半个甲子的时间,是绝对不可能感悟出来的.    相对同时刚出校门同学从事其它行业而言优厚的薪水,以及不断学习更新的专业知识不仅仅让你感到生活的充实,更满足了你那不让外人知的虚荣心. 在刚出校门的几年中,你经常回头看看被你落在后面的同学们,在内心怜悯他们的同时,你也会对自已天天加班的努力工作感到心里平衡:“有付出才会有回报”这句话在那几年中你说的最多,不管是对自已的朋友们还是自已的爱人.

程序员装B指南

- Qing-Run - 博客园-首页原创精华区
1.电脑不一定要配置高,但是双屏是必须的,越大越好,能一个横屏一个竖屏更好. 一个用来查资料,一个用来写代码. 总之要显得信息量很大,效率很高. 2.椅子不一定要舒服,但是一定要可以半躺着. 3.大量的便签,各种的颜色的,用来记录每天要完成的事务,多多益善. 沿着电脑屏幕的边框,尽量贴满,显出有很多事情的样子.

程序员收入报告

- diaoxsh - cnBeta.COM
最近,波兰的程序员Chris(也叫KreCi)公布了他的第十四期程序员收入报告. 数据显示,上月是目前为止他收入最多的一个月. Chris的收入并不是指他的工资或薪水,Chris是一个自由职业者. 他的收入也不是来自个人承包软件工程的收入,他更像是一个果农,种了优良的果树,只要不断的给这些果树施肥浇水,这些果树会给他带来源源不断的财富.

程序员的利器-SourceInsight

- Alex - 博客园-首页原创精华区
作为程序员,大部分时间是在已有的代码上代码工作. 要对已有的代码进行调整,首先就要搞清楚当前代码中蕴含的逻辑关系. 所以常常有程序员调侃说花了大半天时间看代码,最后写代码的时间只有几分钟. 所以,对已有代码的分析质量将影响(甚至会决定)最终代码修改的质量. SourceInsight在代码分析上给予程序员极大的帮助.