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

简介:

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

有些人议论所谓“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程序员非常稀有

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

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


来源:51CTO

相关文章
|
6月前
|
人工智能 程序员 知识图谱
程序员-你得把自己卖出去
程序员-你得把自己卖出去
|
程序员 开发者
只有程序员才能懂的暗号是什么?
俗话说:隔行如隔山,如何用一句话不露痕迹地向别人展示自己程序员的身份呢?众所周知,程序员这个职业并不是像医生、律师、老师等职业那样被大家广泛认知和了解的。在社交场合中,我们常常需要向别人说明自己的职业身份,而这时候,如果能够使用一些行业黑话或者暗号,就可以更加自然地向别人展示自己的程序员身份。那么接下来就来简单聊一下。
205 0
只有程序员才能懂的暗号是什么?
|
程序员 项目管理 微服务
一个程序员的思考
或许,如同传闻所说,程序员这碗饭吃的就是青春,35岁就濒临被辞的风险,甚至于说程序员已然过度饱和,不再有过多机会给予新人入圈。而面对这种现状,作为一位普通二本院校出身的学生,更是没有所谓的学历优势,不过,幸好,学历对于程序员来说并非真正看重的一点,技术力才是正确的关键词,而这,也是我喜欢程序员的理由之一。我明白,这是一个不容易的开始,但也请相信,决不会草草结束。
99 1
|
程序员 uml
1024-程序员
1024-程序员
89 0
|
架构师 程序员 Android开发
35岁以上程序员都去哪里了?
人这一辈子没法做太多的事情,所以每一件都要做得精彩绝伦。 你的时间有限,所以不要为别人而活。不要被教条所限,不要活在别人的观念里。不要让别人的意见左右自己内心的声音。 最重要的是,勇敢的去追随自己的心灵和直觉,只有自己的心灵和直觉才知道你自己的真实想法,其他一切都是次要。 身边好几个年轻的同事都在说房价,很多人抱怨房价太高了买不起怎么办好迷茫…
35岁以上程序员都去哪里了?
|
小程序 算法 Unix
优秀的程序员,必须知道的
昨天看到一则新闻,一对夫妻起诉一家婚庆公司,缘由是这家婚庆公司盗用了他们的婚庆典礼创意,最终取得了胜诉 这不禁让我想到,作为程序员,代码就是我们的产品,应该如何保护自己的权益, 另外版权对我们来说已经是绕不开的话题了,特别是游戏 APP 的开发者,必须具有软件著作权才能发布 那么今天我们就聊一聊关于版权的那些事儿吧
176 0
优秀的程序员,必须知道的
|
数据采集 算法 程序员
有哪些话一听就知道一个程序员是个水货?
这可能是一个假的程序员,但凡写过一句print(“hello world”) 也不至于说出这样的话 另外,现在各种技术类工作面试,都有对应的面试宝典,堪称技术类的八股文
115 0
|
架构师 Java 程序员
其实,咱们程序员过了30岁,还可以更牛逼!
程序员干到30岁,好不容易从码奴混到了白领,却再也干不动了,还时时面临失业的危险。30岁,是一个程序员伤不起的年龄。明天,何去何从? 一.30岁现象 在官场上,曾经有一个59岁现象,就是官员们会在59岁时,会使劲捞上一把。
1372 0
|
Dubbo Java 程序员
程序员是什么让你停滞不前—是安逸,还是....
  1、前言 前段时间面试了一位三年工作经验的程序员,期望薪资10k。在程序员这行业,三年工作经验,又是一线城市,这期望薪资算是一般。
1508 0
|
程序员
如何成为一名成功的程序员
编程是一个仅靠兴趣仍不足以抵达成功彼岸的领域。你必须充满激情,并且持之以恒地不断汲取更多有关编程的知识。只是对编程感兴趣还不足以功成名就——众所周知,我们工作起来像疯子。
871 0

相关实验场景

更多