昨晚,我发了如下微博:有人评论说,所谓的“10x”或“超级”程序员就是传奇。但是那些著名的运动员、艺术家、作家、呃、摇滚明星都是神话吗?—YevgeniyBrikman(@brikis98)2013年9月29日我收到了大量的回复和问题,但Twitter不是讨论问题的地方,所以我写了这个博客来进一步讨论。有很多文章声称10x程序员不存在。反对的观点大致分为以下三类:最初的10倍数字来自一项研究(Sackman、Erikson和Grant(1968)),这不是很有说服力。生产力是一个难以衡量的模糊概念,因此我们不应该宣称10倍这样的指标。个人才能确实各不相同,但一个程序员的工作效率不可能是另一个程序员的10倍。我不同意以上所有观点,让我逐一讨论这些论点。【译者注】:10xprogrammers(10x效应来自一个有趣的观察:伟大的程序员的生产力不仅比普通程序员低15-20%,很可能是10倍甚至更多)。www.forbes.com和www.tempobook.com上有不止一项关于10x程序员的研究虽然微博和HackerNews上的摇椅学者喜欢反驳他们同行的发现,但10x程序员的证据相当有说服力且不受限制到一个单一的研究。请允许我引用来自StackOverflow的投票最多的回复:Sackman、Erikson和Grant在1968年进行的最初研究发现程序员的生产力存在巨大差异。他们研究了平均有7年经验的专业程序员,发现最好和最差的程序员第一次写代码所花费的时间之比约为20比1;调试时间约为25比1;程序大小约为5比1.1;程序执行速度大约是10比1。他们还发现程序员经验和代码质量之间没有关系。对他们的发现的详细检查揭示了一些方法上的缺陷。..然而,即使考虑到这些缺陷,他们的数据仍然可以显示最佳和最差程序员之间的差距超过10倍。在***研究之后的几年里,“程序员之间的乘数差距”的发现得到了许多其他专业程序员研究的证实(Curtis1981,Mills1983,DeMarco和Lister1985,Curtis等人1986,Card1987,Boehm和Papaccio1988,Valett和McGarry1989,Boehm等人2000)...您可以在这里和这里阅读更多内容。即使不能测量,也可以推断。即使您忽略上述研究并声称“编程效率”难以衡量——这意味着我们仍然可以谈论10倍高效的程序员。仅仅因为某些东西难以衡量并不意味着我们无法衡量它。例如,您是如何为最新项目选择编程语言的?您是否搜索过证明这种语言比其他语言更有效的研究?就我个人而言,不用经验也能说Ruby建站效率比C高很多倍。你可以抛出粗略的指导方针(图书馆可用性、社区支持、文档等),但现实是大多数人选择语言是基于直觉推理,而不是双盲研究。尽管缺乏数据,但我敢打赌,在大多数情况下,选择Ruby而不是C进行Web开发将被证明是正确的决定。当然,编程并不孤单:用什么指标来判断一个作家、艺术家、教师或哲学家比另一个好?我不能给你一个“生产力指标”,说莎士比亚、纳博科夫或奥威尔仅仅通过观察比普通作家好几倍,但大多数人会同意他们是。编程不是体力劳动10x程序员最大的问题是,有些人认为编程只是体力劳动,程序员只是流水线上的工人。有些程序员可能比其他人更好,但一个程序员不能始终如一地解决比其他人多10倍的问题。一个10人的团队永远胜过一个程序员!9个女人一个月内生一个孩??子是不可能的!上面的逻辑听起来编程效率就是打字速度;好像10倍的程序员只是比普通程序员多生产10倍的代码。这种推理忽略了一个事实,即编程是一种创造性的职业,而不是体力劳动。解决同一个问题的方法有很多种。多考虑法医级推理而不是简单的婴儿推理:10名普通侦探对1名夏洛克。谁能更快破案?10x程序员具有普通程序员无法解决问题的能力和洞察力;他们将避免所有消耗普通程序员大量时间的问题。10个编写糟糕代码的工程师肯定比1个编写正确代码的程序员更糟糕。编程是选择。想想你需要做出多少决定来构建一个软件,比如一个网站:你要使用什么语言?使用什么样的架构?用来存储数据的是什么?缓存什么?网站托管在哪里?如何监控?如何推动新变化?如何存储代码?需要设置什么样的自动化测试?10个普通程序员可以在每个阶段以乘法成本或收益做出“平均”级别的决策。想象一下,流量呈指数级增长,但这个普通的团队建立了一个普通的网站,难以分区的数据存储,缺乏足够冗余的托管,没有适当备份的版本控制,没有持续集成环境,也没有监控。如果这10个程序员的时间都花在到处救火上,他们的工作效率会有多高?如果单个程序员能够以将工作量减少2倍的方式对问题进行建模,那么该单个程序员的表现优于10人团队。根据我多年的经验,一个伟大的程序员知道这些错误事后修复的成本更高。通过预先做出好的决定,10x程序员可以避免数月的工作。编程不是写更多的代码;这是关于编写正确的代码。成为一个10倍的程序员并不是因为你做了好几倍的工作,而是因为你更频繁地做出更好的决定。这并不是说10x程序员完全不会犯错误;只是程序员每天都会做出很多选择,而伟大的程序员比一般程序员做出正确选择的次数更多。这不仅仅是关于编程。您愿意拥有10个普通科学家还是牛顿?10个普通科学家都想不出运动三大定律,万有引力,二项式,微积分等等;一个牛顿就可以做到。您更愿意在您的团队中拥有迈克尔乔丹还是10名普通球员?(注:乔丹持有NBA球员平均工资的10倍)?你愿意让史蒂夫乔布斯或埃隆马斯克经营公司,还是将钥匙交给10名普通企业家?10x程序员非常罕见放眼长远很重要。明星程序员、运动员、作家和科学家极为罕见。我不推荐只雇用这些“摇滚明星”的招聘系统;它只是看起来愚蠢和孤独。不要让坏人成为最好的敌人:聘请你能找到的最好的工程师,并给他们机会变得越来越好。但是,不要陷入所有程序员生而平等的谬论。在任何创造性的职业中,都存在着广泛的能力。一方面是可以毁掉组织的员工类型,他们编写的每一行代码都会增加技术债务。在光谱的另一端是那些可以编写任何可能的代码并且比普通人好很多倍的人。
