当前位置: 首页 > 科技观察

一个程序员不是传奇

时间:2023-03-15 15:58:50 科技观察

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