一名软件工程师对所谓的“10倍工程师”神话提出质疑
作者:Charity Majors(Honeycomb.io 联合创始人兼 CTO)

我们大多数人都遇到过一些能力超群的软件工程师,他们似乎拥有近乎魔法般的技能。他们的头脑能够驾驭复杂的模型,总能迅速找到既巧妙又非凡的解决方案,写出的高质量代码速度惊人。

在我的职业生涯里也遇到过不少这样厉害的人,这大概解释了“10倍工程师”这个概念为何如此流行。所谓“10倍工程师”,指的是那些工作效率或能力比普通工程师高出十倍的人。这个说法早已变成了一种流行的段子,但其实它的科学依据很弱。许多人为了支持“10倍工程师”理论,做出了很多滑稽甚至荒谬的论断,比如“10倍工程师喜欢使用黑色背景、不喜欢做用户界面设计、不擅长当导师”,或者干脆直接套用一些刻板印象(例如只招“年轻穿连帽衫、类似扎克伯格”的男生)。但奇怪的是,这个概念却总让我们觉得“有那么一点真实”。

我并不否认确实有的工程师效率远超其他人,但我想强调两个问题:

一、如何衡量生产力?

首先,你到底是怎么测量“生产力”的?我不同意存在一个统一的“绝对标准”,能让你准确判断谁的生产力高、谁的生产力低。因为工程师的能力包含太多因素:

  • 你工作的领域是什么?是芯片设计、物联网、数据库、Web 服务,还是移动应用?

  • 你使用什么编程语言?Golang、Python、Cobol 还是 Lisp?用哪个版本、哪些框架和库?

  • 除了编程之外,你还需要懂哪些东西?比如设计、安全、市场营销、金融、法律?

  • 你开发的软件处在哪个阶段?服务于多少用户?是开发火星探测车的软件,还是开发卖出去后再也无法修改的软件?

而且,人的技能和能力并不是一成不变的。我以前可能算是个很厉害的数据库工程师,甚至可能在某些方面达到“10倍工程师”的水准,但现在肯定不是了,因为我已经好几年没有碰过数据库优化了。

“10倍工程师”的概念让人误以为生产力是某个人身上永恒不变的特质。但实际上,一个人在某些方面表现突出,在其他更多方面却可能只是普通甚至较差。我认识不少世界级工程师,但从未遇到过任何一个人,在所有情况下都比其他人强十倍。

二、工程师不拥有软件,团队才拥有软件

其次,也是更重要的:即便真的有“10倍工程师”,那又怎样?软件并不是由某个单一工程师拥有,而是由整个工程团队共同拥有的。个别工程师写代码再快、再厉害,也没办法独自推动整个产品。团队的整体速度才是关键,团队如何共同编写代码、测试、审查、发布、维护、改进、架构设计才是真正重要的。

公司里所有人都使用同一个软件发布流程。如果你们公司最慢的工程师提交一行代码需要花5个小时,那最快的工程师也得花同样的5个小时。大部分情况下,写代码的时间远远少于处理其他开发流程(如沟通、审查、测试等)的时间。

如果你公司的软件或服务完全依赖某个“天才工程师”,那么这个人就会成为公司最大的风险点。

在初创公司,单独一个工程师负责软件并不少见,因为初创公司的生存压力巨大,必须快速行动。但是随着公司逐渐壮大,软件必须交由团队负责,因为任何一个人都会生病、休假甚至离职,公司必须保证自身能正常运转。

因此,对于工程主管来说,比起寻找一个“10倍工程师”,打造一支“10倍效率”的团队才更重要。

最好的工程团队由普通工程师组成

当人们谈论“世界一流”的工程团队时,经常想到的是由顶级工程师组成的团队,比如大量聘用来自顶尖名校、硅谷科技巨头的员工。但我认为真正优秀的团队,是那些普通工程师也能发挥巨大作用的团队。

一个真正优秀的工程团队,不要求你非得是顶尖的工程师才能发挥巨大价值,而是普通的、拥有适当技能和正常能力的工程师也能快速交付代码、迅速响应用户需求、理解系统、持续推动业务向前发展。

任何人都可以靠世界顶级工程师取得一些成功,这并不难做到。但过于强调个人能力,反而会让管理者逃避责任。真正有竞争力的是,创建一种环境,让资历不深的普通工程师也能把他们的精力和努力转化为业务成果。唯一真正有效的生产力衡量标准,是你是否有效地推动了业务发展。

而真正优秀的团队,往往会在不经意间培养出大量世界级的软件工程师。但这是后话了。

我们谈谈“普通”工程师吧

许多技术人员都把自己视作天生的聪明人,这种心态在科技行业尤其明显,例如 Netflix 宣称自己只招聘全球最优秀的10%人才,Coinbase 甚至希望招募全球前0.1%的人才。但我想挑战一下这种心态,让我们把这些包袱放下,把自己看作普通人。

把自己当普通人看待,也许会有点难以接受,但我们大多数人确实就是普通人,这并没有什么不好的。即使在某些方面很聪明的人,在其他很多领域也都是普通的,比如音乐、语言、体育或者情绪管理。

软件工程师的技能确实倾向于某些特定的智力,比如抽象推理能力,但没有人生来就是优秀的软件工程师。优秀的工程师不是天生的,而是在后天培养出来的。

为普通人设计“社会技术系统”

在招聘时,我们当然应该关注每个人独特的长处。但是当我们设计软件开发流程和工具时,应该考虑到普通人的局限性。

普通人都有各种认知偏差,比如确认偏差、近期偏差、事后诸葛亮效应。我们可能非常努力、关心工作,但也会健忘、失去耐心、走神。当我们反复看到同样的文字时,就会不再认真阅读它。

我们不是机器,会疲劳、会压力大。如果凌晨三点被报警电话吵醒,我们出错的概率一定远远大于下午三点正常工作时。

当你设计的系统充分考虑普通人的这些特点时,你的团队才能真正发挥他们的创造力,把更多精力放在产品本身,而不是浪费在和工具的斗争上。

优秀团队创造世界级工程师

真正优秀的工程团队,不需要你成为世界上最好的工程师就能产生巨大影响。但讽刺的是,这种优秀团队恰恰能够源源不断地培养出世界级的工程师。

因为这样的环境不仅吸引最优秀的人才,更吸引普通但希望提升技能的工程师。他们能不断进步,逐渐成为顶尖人才,这才是真正优秀团队的标志。

别总想着招“最优秀”的人,要招合适的人

公司过于关注“找到最优秀的人”,结果往往加剧了行业内的偏见和不平等。机会并非人人平等。

真正应该关注的是招募“对的人”,看重的是团队整体组合、包容性、团队协作和不同成员的独特优势,而不是不断强调找没有缺点的人。

这种开放、包容、鼓励每个人发挥特长的团队才是真正能吸引并培养世界级人才的地方。