最近关于 10 倍程序员的事又开始在各个社交平台火了起来,CODING 作为国内领先的一站式 DevOps 解决方案,今天也来讨论一下 10 倍程序员到底存不存在和这个概念到底意味着什么。
这个话题之所以会时不时被拿出来讨论,主要是因为它触及了一个比较深的意识形态问题:有些人是否比其他人更有才华,以及为什么会这样(这是天生还是后天可以改变的)。如果答案是肯定的,我们应该如何正确对待这件事。
因此,在各个社交平台的激烈讨论主要分成了两派,一边认为 10 倍程序员只是一个传说,是对程序员群体的刻板印象,而且比起讨论这个问题还有更重要的事去做,比如好好写文档或者带带实习生。而另一边则会翻个白眼告诉你 10 倍程序员当然是存在的,那些不愿意承认的人都是被各种正义宣传洗了脑,或者是一个不想承认自己的失败的自卑者。
关于 10 倍程序员的传说究竟如何,让我们来稍微解密一下。
关于 10 倍程序员的研究
这次风波的起因是在 7 月 11 日,Shekhar Kirani(在 Accel 印度的基金担任合伙人职位)发了一条微博:
声称 10 倍程序员是一种稀有物种并建议创业公司的 CEO 寻觅这种罕见的程序员,如果能找到一个 10 倍程序员作为你初始团队的前几名程序员之一,可以显着提高你的启动成功几率。并且还列举了诸如“仇恨会议”,“高度不规则”的工作时间,“可以高效将想法转化为他们心中的代码”,知道已经投入生产的“每行代码”,笔记本电脑屏幕背景颜色是黑色的等几条 10 倍程序员的特征。
我们暂且不讨论他的论断是否正确,其实在过去关于 10 倍程序员这个概念有着很多的讨论,其中比较有名的是 Steve McConnell 在八十年做的研究:Productivity Variations Among Developers and Teams: The Origin of 10x。从中我们可以提取出几个关键点:
1.10 倍程序员指的是最优秀的程序员和最差的程序员之间的差距,而不是和平均相比
这样其实更好让人接受,在我看来,更容易相信最好的开发人员比平均水平高出 3 倍,而最差的开发人员的生产力要低 3 倍。这样可以让你达到 10 倍的整体差价。
也许我们应该将“x”重新定义为平均值,称之为“3 倍程序员”,这样就不用吵来吵去了。
2. 10 倍程序员的概念的确是基于研究而来,但这并不代表研究是完美的
McConnell 在上面提到的文章中详细总结了之前关于 10 倍程序员的研究,但是这些研究在今天看来都略显过时并存在一定的缺陷,比如总样本量相对较小,并且并没有很好的把控变量。其中一些研究是在几十年前(第一次是 1968 年)完成的,当时计算机、编程语言和开发任务都和现在有很大不同。虽然他们采用了一些还不错的度量方式,比如任务完成时间,但是大部分度量方式是值得商榷的,例如每天的代码行数,并且在某些情况下,他们认为代码行数是负面影响因子(对于给定的任务,更少的代码量被认为是会更好)。
总的来说,虽然有些瑕疵,但还是有明显的证据表明,个人之间的生产力差异很大。
3. 10 倍只是一个粗略估计
不同研究发现的生产力差距存在一定的范围,通常在 5 至 25 倍之间。这与刚刚讨论的研究的局限性相结合,意味着我们不能说“大致数量级”。“10 倍”并不准确,它只是一种方便的方式来记住生产力的差异存在并且很大。
4.10 倍的数字仅仅是对代码生产力的衡量
它并非旨在完全衡量程序员对组织的价值,也不能用于此目的。也就是说,这些仍然是有意义和重要的措施。
5.这些研究并没有揭露造成差距的原因
据我所知,McConnell 的调查至少没有解决重要的问题,例如:个人的生产力水平是否随时间稳定? 它是否因环境而异?工作环境对生产力的影响程度如何? 它会因为项目的不同或工作内容的变化而变化吗? 它会随着经验而增长吗? 可以通过学习进步吗?(McConnell 表示最初 1968 年的研究“发现程序员的经验和代码质量或生产力之间没有任何关系”,但这并不意味着生产力不会随着时间的推移而增长,只是它不一定会这样做)。
生产力的差距是确实存在的
以下四个想法不仅基于研究,而且基于我们日常的观察:
1. 生产力的差异是真实的、重要的,并且可能被低估。
即使差异不是“十倍”,但是很多时候也会举足轻重,而且我相信这个现象不仅仅存在于软件行业。McConnell 本人就指出过这一点,引用 Norm Augustine 的一项研究:“在各种职业,无论写作,足球,发明,警察工作还是其他职业,一定都是前 20% 的人产生了约 50% 的产出, 无论是橄榄球中的达阵还是专利,解决案例或软件。”
2. 工作环境至关重要
在现实世界中,生产力其实很大程度是受工作环境制约的。程序员是否明确了目标和优先事项? 他们是否相信自己做的事情?他们有动力吗?他们能否相互信任?他们可以集中注意力吗?他们必须随机参加会议吗?他们有良好的基础设施和工具吗?等等。
3. 生产力是自身特征和后天技能的结合
也就是说,高生产力是可以通过学习来部分提高的。可获得的技能包括从调试特定工具到思维模式和解决方式等,通过这些来提高自己的生产力。但是自身的特性暂时还是不能(或者说还不知道如何)有效的识别和通过学习来习得的,这与个人自身的智力和思维模式有很大关系。
4. 生产力并不和过往经历强相关
有非常高效的初级程序员,也有非常平庸(或更糟糕)的高级程序员。因此即使可以通过学习来提高自身的生产力,但是学习的过程也不会自动发生,固步不前的程序员在我们的行业中也是很常见的。
最终还是归结到人与人之间的关系
关于 10 倍程序员的讨论归根结底是在讨论如何雇佣、奖励员工以及我们如何对待彼此。
所以我们总结出了如下的结论,希望对企业的研发团队有些帮助:
- 招聘环节至关重要: 尽可能地花更多的心思和时间去寻找最优秀的候选人。
- 创造良好的工作环境: 努力创造一个良好的工作环境,有很多生产力的问题都是由工作环境的问题造成的。
- 赏罚得当: 能正确地辨识工作的价值,让创造更多价值的人获得相应的报酬。
- 不要认为生产力的原因仅仅在于人: 在一个环境中生产力不足的人可能在不同的项目或不同的团队或公司中卓有成效。在解雇对方之前最好仔细分析一下问题所在。
- 即使是 10 倍程序员也不能放任自流: 这个应该是原则问题,不言而喻。
另外,再说一下开头提到的整场讨论的起因——我们认为发现 10 倍程序员的规律或者特质并不存在,他们不是什么特殊物种,不可能通过终端的颜色,键盘上的磨损,或任何其他刻板印象来识别它们。
Reference:
https://yourstory.com/2019/07/10x-engineers-accel-shekhar-kirnani-startups
https://jasoncrawford.org/10x-engineers
https://www.construx.com/blog/productivity-variations-among-software-developers-and-teams-the-origin-of-10x/