内容简介:10x开发者不是神话
英文原文: http://www.ybrikman.com/writing/2013/09/29/the-10x-developer-is-not-myth/
更新:你可以 在这里找到本文的西班牙语翻译 。
昨天晚上,我在Twitter发布了以下内容:
我被“10x”或者“摇滚明星开发者”是神话的说法所迷惑。明星运动员、艺术家、作家,或者摇滚明星是神话?
— Yevgeniy Brikman (@brikis98) September 29, 2013
我收到了大量的回复和问题,但Twitter是个糟糕的讨论媒介,所以我写这篇博文作为补充。
有大堆的文章[ 1 、 2 、 3 、 4 ]声称10x开发者不存在。反对的理由通常分成3种:
- 原来的10x数字来自单个的有缺陷的研究(Sackman,Erikson和Grant(1968))。
- 生产率是个模糊的事情,很难测量,所以我们不能做出任何10x的声明。
- 人才有分布,但没有单个工程师可以做10倍的工作。
我不同意所有这些。让我们逐个地检查这些理由。
这不是一个研究
虽然Twitter和Hacker News上的空谈科学家喜欢严厉谴责已被同行评审的研究,但在那种情况下的证据是相当有吸引力的,不仅限于单项研究。请允许我引用这个问题 在Stack Overflow上的讨论 的最顶部的回复:
...发现个体编程生产力的巨大差异的原始研究是在20世纪60年代末由Sackman、Erikson和Grant(1968)进行的。他们研究了平均7年经验的专业程序员,发现最佳和最差 程序员 之间的初始编码时间的比例约为20:1;调试时间超过25:1;程序大小5:1;并且程序执行速度约为10:1。他们发现程序员的丰富经验与代码质量或生产率之间没有任何关系。
对Sackman、Erikson和Grant的发现的详细检查显示出其方法论的一些缺陷。但是,即使考虑到这些缺陷,他们的数据仍然显示出最佳和最差程序员之间的差距超过10倍。
在原始研究之后的几年中,“程序员之间存在数量级差距”的一般性发现已经被许多其它对专业程序员的研究所证实(Curtis 1981、Mills 1983、DeMarco和Lister 1985、Curtis等人1986、Card 1987、Boehm和Papaccio 1988、Valett和McGarry 1989、Boehm等人2000)...
如果你不能测量它,你仍然可以推理它
即使你忽略上面的研究,并宣称“编程生产力”很难测量——它是的——我们仍然可以讨论10x程序员。只是因为某些东西难以测量并不意味着我们无法推理它。
例如,你是如何为最近的项目挑选编程语言的?你有没有查阅“证明”这门语言比其它语言更有效的研究?就个人而言,我不需要实验来证明,Ruby比起C在构建网站时会是有一个数量级的更有生产力的选择。你可以胡乱拼凑些粗略的指标(库可用性、社区支持、文档),但现实是,大多数人基于直觉推理而不是双盲研究来做出这类语言决策。尽管缺乏过硬的数据,但我敢打赌,大多数时候,采用 Ruby 而不是C进行网站开发都将是正确的决策。
当然,编程不是唯一这样的事情:什么“指标”可以告诉你一位作家、艺术家、老师或者哲学家比另外一位更好?仅仅观察他们,我不能给出表明莎士比亚、纳博科夫或奥威尔比普通作家好一个数量级的“生产力指标”,但是绝大多数人都会同意这点。
编程不是体力劳动
抗拒10x程序员的最大问题是有些人认为编程是手工劳动,而程序员是装配线工人。有些程序员比其他程序员好些,但可以肯定的是,单个程序员不可能持续接近其他程序员的10倍!10个人的团队总是胜过单个编码者!9个女人不能在1个月内生产婴儿!
上面的逻辑听起来像是编程生产力只关乎打字速度。仿佛10x程序员只是能够生产平均水平的10倍代码。这种推理无视编程是创造性行业,不是体力劳动:解决同样问题的方法有很多种。停止简单地类比,更多地考虑罪案解决的类比:10名普通侦探与夏洛克·福尔摩斯。谁能更快地解决罪案?
10x开发者具有洞察力,能找到普通程序员永远不会找到的解决方案。他们将避免花费普通程序员大量时间的整类问题。编写正确代码的单个工程师绝对可以胜过编写错误代码的10个工程师。
编程是关于选择
考虑构建单个软件产品(如网站)的决策有多少:你用哪种语言?什么Web框架?你用什么数据存储?你用什么缓存?你在哪里托管站点?你怎么监控它?你如何推进新的变化?你如何存储代码?你安排什么样的自动化测试?
10个普通程序员将在每个步骤中做出“平均”质量的决策,这些决策的成本或收益将倍增。想象下流量以指数级增长,而这个普通的团队维护着普通的网站,数据存储引擎难以分片,没有足够冗余的主机,版本控制没有正确备份,没有CI环境,也没有监控。如果他们花费所有的时间去灭火,这10个编码者的效率如何?
如果程序员可以以减少一个数量级的工作量的方式对问题进行建模,那么单个程序员可以胜过这个10人团队。从多年的经验来看,伟大的程序员会知道,以后修复错误要花费更多。通过在前面作出良好的决策,10x程序员可以避免几个月的工作。
它不是编写更多的代码,它是编写正确的代码。成为10x程序员不是通过做一个数量级的更多工作,而是通过做出比平常一个数量级的更好的决策。
这不是说10x程序员根本不犯错误。程序员每天都要做出很多选择,而伟大的程序员做出正确的选择比普通程序员多得多。
编程不是唯一这样的事情。你愿意有10名普通科学家还是艾萨克·牛顿?10名普通科学家没有提出运动定律、重力理论、二项式系列、微积分等,艾萨克·牛顿做到了。你愿意让你的球队有迈克尔·乔丹还是10名普通球员(注意:乔丹获得了NBA平均薪水的10倍)?你愿意让史蒂夫·乔布斯(Steve Jobs)或者伊隆·马斯克(Elon Musk)经营一家公司还是把钥匙交给10个普通企业家?
10x程序员很少见
重要的是以正确的角度看待事情。明星的程序员、运动员、作家和科学家极其少见。我不推荐围绕只雇佣“摇滚明星”来制定招聘策略,它会使你看起来很愚蠢和孤独。不要让完美成为好的敌人:聘请你能得到的最好工程师,并给他们充足的机会去发展和变得更好。
但是,不要陷入所有程序员生而平等的谬误。任何创造性行业都有广泛的能力。一方面是会让组织陷入困境的雇员类型,用他们编写的每行代码积极增加技术债务。另一方面,有些人可以编写带来更多可能的代码,并且具有比平均水平大一个数量级的影响。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Text Processing in Python
David Mertz / Addison-Wesley Professional / 2003-6-12 / USD 54.99
Text Processing in Python describes techniques for manipulation of text using the Python programming language. At the broadest level, text processing is simply taking textual information and doing som......一起来看看 《Text Processing in Python》 这本书的介绍吧!