别再说什么“10 倍开发者”了!
摘要:2019 年,由印度初创公司投资人 Shekhar Kirani 提出的“十倍工程师”的概念在圈内引起热议。他提出,有些程序员能以一当十,创业有了这类人,成功率将大幅提升。对于这个说法,多数人持反对态度,但直至如今,有关“十倍工程师”的讨论依旧没有停歇。
原文链接:https://earthly.dev/blog/stop-10x-developer/
声明:本文为 CSDN 翻译,未经授权,禁止转载。
作者 | Adam Gordon Bell
“10倍开发者”这个说法源自一则推特:
10倍工程师很少查看类或方法的帮助文档。拿到一个产品功能后,他们只需一杯含咖啡因的饮料,没有任何人打扰,就可以坐下来连续工作4~6个小时编写出整个功能。
10倍工程师很讨厌开会,认为那是在浪费生命,会议上讨论的事情都是显而易见的。
大多数10倍工程师都是全栈工程师。但是,我很少看到他们做UI的工作。
以上观点由一位印度初创公司投资人 Shekhar Kirani 提出,并建议初创公司牢牢把握住10倍工程师——虽然我不同意这个看法,但“10倍工程师”这个话题并不会消失。
在本文中,我们来深入剖析一下这个概念,看看“10倍工程师”究竟有什么意义,也许我们能找到一种更好的方式来描述天才工程师。
定义
“10倍开发者”这个概念源自Tom Demarco的研究。他研究了600多名开发人员的编程练习结果,发现有些人的效率是其他人的10倍(在相同研究条件之下)。
10倍开发者指的是,有些开发人员的生产力是该领域具有同等专业知识水平的其他开发人员的10倍。也就是说,一位10倍开发者可以完成10倍的工作量,而且在相同条件下他们编写的代码质量是团队其他成员的10倍。究竟谁才是10倍开发人员,如何才能成为10倍开发者?
网上经常讨论的一个问题就是:10倍开发人员是否真的存在?毕竟,现在不是1984年,整个编程领域的水平也提高了。所以,我们先来解决这个问题。
95倍开发人员
同一个地方不可能同时出现两位10倍工程师,否则就会引发生产力奇点。
—— Xanda Schofield
开发技术千变万化,而且可以不断提高,这一点没有争议。但是,能够完成10倍工作量的人真的比那些不称职的同事好10倍吗?事实上,我认为“10倍”这个数字太小了。
下面,我们来看一个例子,虽然这个例子很极端,但很有启发性。
Leetcode网站上的问题表明开发人员的技术力有着数量级的差异。在LeetCode上,竞赛选手的评分可以转化为他们能够解决问题的概率。具体来说,在实践中,如果你遇到一个评分与你个人评分相同的问题,这就意味着你能够解决该问题的概率为50%。LeetCode使用了ELO排名,这个排名可以直接等同于成功系数。虽然LeetCode不会公开问题的评分,但有一位用户计算了各个问题的评分,并分享到了GitHub上(https://github.com/zerotrac/leetcode_problem_rating/blob/main/ratings.txt)。
通过这则信息,再加上概率表,我可以告诉你,对于LeetCode上的问题“Count Ways to Make Array With Product ”(https://leetcode.com/problems/count-ways-to-make-array-with-product/),排名3000的用户中有95%的人可以解决这个问题,但排名1700的用户中只有大约1%的人能够解决。
想象一下,Jira面板由2500个困难问题组成,如果LeetCode的规则非常贴近我们的实际工作,那么一位排名3000的用户的效率相当于95位排名1700的用户,那他们就是所谓的“95倍开发者”。所以,可以肯定的是,如果LeetCode中存在95倍开发者,那么只要难度上限足够高,任何领域都有可能存在10倍开发者。
但是,日常工作的难度是否给了技术牛人大展拳脚的空间呢?
豪斯医生,10倍医生
技术力的差异并不是软件开发领域独有的。如果说真的有10倍开发者,那么就会有10倍医生和10倍机械师。但是,一种能给团队或组织带来重大影响的技术,一定会成为限制因素。
如果《豪斯医生》中的主角在一家小诊所工作,每天的工作是打流感疫苗和抗生素,那么他的效率不一定会比一个平庸的医生更高。同样,如果你们团队没有遇到高难度的编程问题,那么即便是LeetCode冠军也不会有突出的表现。如果说10倍开发者应该完成10倍的工作,那么前提是你能抛出一些具有挑战性的问题。
(个人认为:许多团队更需要的是具有10倍沟通能力的开发者。)
所以说,有些开发人员的效率确实更高,但这并不一定意味着完成更多的工作,除非高技术力能够提高团队的工作效率,或者解决团队的瓶颈。时间和技术力在量上是不可互换的。但是,10倍开发者的思想还有一个更大的问题:技术力不是孤立存在的。
你不能通过一个单一的“尺度”(比如LeetCode的评分)衡量开发者的技术力,开发者又不是跳高运动员,不能根据能否跳过某个高度的栏杆来判断他们的技术力。软件开发是一个多样化的领域,从事固件开发与构建游戏引擎所需的技术力完全不同,而他们掌握的技术类型也不同于前端JavaScript开发人员。软件开发和大多数领域一样,不是单一的田径比赛。这些角色需要不同的技术,比如系统设计、测试、调试等等。所以说,开发人员更像是体育比赛中的现代五项全能。
关于软件开发的极端说法
10倍开发者的说法太极端了。比如我的日常工作都是很简单的任务,那就算是Fabrice Bellard(著名的计算机程序员,因FFmpeg、QEMU等项目而闻名业内,曾在国际C语言混乱代码大赛中三度获胜)来了,也不能说就可以完成10倍类似的工作量。反之,如果给我足够的时间,我可能也能像Fabrice Bellard一样构建出FFmpeg和QEMU。
此外,10倍开发者这个概念还暗示着各种技术力都是可以互换的——优秀的数据库内部专家就应该能构建出色的微服务架构吗?这显然不合理。
那么,我们应该如何描述10倍开发者呢?比如专家,“某某人是视频编码专家”;或者专业人士,“我曾与postgres专业人士有过合作”;再比如天才,“我需要一些出色的编译器后端天才来帮助我设计增量式编译”。
我认为,我们不应该用“10倍”这样的词语来笼统地描述开发者的技术力,我们应该更具体一点。技术千变万化,人们的技术力也在不断提高,我们不应该把人才神化。