在之前的一篇文章中,Redis 之父 Salvatore Sanfilippo 列出了 10x 程序员应该具备的 9 种素质。Salesforce 的首席工程师 Rudy Rigot 从另一个角度解读 10x 程序员。以下内容翻译自作者的博文。
最近,我一直在为一个矛盾的想法感到烦恼:我感觉某一天的工作效率高得离谱,但我也发现我花在工作上的时间并没有减少。而这又催生了另一个矛盾的想法:我看到一些成功的软件公司追捧神奇的 10x 程序员,同时也鼓励那些花很多时间在个人事情上从而避免被掏空的员工。
这些悖论让我感到相当疑惑,我绞尽脑汁,最后得出一个结论,这个结论很好地解释了这些看起来似乎是对立面的现象。
我之所以用“似乎”这个词,是因为我认为它们其实并不算是真正的对立面。简单地说,虽然我们使用相同的词汇描述程序员的效率,但其实我们讨论的是两种非常不同的效率。
- 一方面,效率是指在最短的时间内交付最多的产出。这个可以通过代码量(提交次数、代码行数等)或与开发相关的工作量(文档页数、其他可交付的东西等)来衡量。工作时间越长就意味着更多的产出。
- 另一方面,效率是指使用最短的时间和最少的投入产出最多的业务价值。这个可以通过程序员的工作能够为利益相关者(客户、同事等)带来多少真正的利益来衡量。我一直认为,程序员的职责不在于解决技术问题,而是通过技术手段解决业务问题。
之所以会出现混淆,是因为大多数工作的投入和产出在一定程度上是呈线性关系的。最简单的例子:如果你在工厂上班,那么你工作时间越长,你就会生产出越多的产品。更多的时间等于更多的价值。但在软件开发工作中,时间和价值不一定划等号,而且我敢说,有时候它们甚至是相互对立的。
时间和价值之间不能完全划等号,有很多原因。有时候一个问题把你卡住了,你抓狂了整整一个礼拜,感觉一事无成,直到最后找出问题的根源,并在 10 分钟内解决了问题。你可能花一个小时来自动化一个流程,虽然你因此搁置了其他的一些工作,却为其他团队每周节省了数个小时的时间。你可能突然冒出一个想法,为公司的结账通道引入了一个新的变化,从而提升转化率,哪怕是 1% 的转化率也可能意味着数百万的利润。
有时候,时间和价值是相互对立的(更多的工作时间意味着更少的价值产出),因为如果以“业务价值”KPI 为前提,那么你的产出将取决于很多难以掌控的未知因素。你可能花了一整天尝试解决某些问题,然后回家休息了一个晚上,第二天早上回来继续工作,居然在 5 分钟之内把问题解决了,或许你会因此认为充分的休息更为重要。
“10x 程序员”和“快速进展”
现在让我们回到“10x 程序员”的话题上来。作为一个“老油条”,我认为 10x 程序员只是神一般的存在,或许你们也是这么认为的。不过,如果是以业务价值作为 KPI,那么 10x 程序员是可能存在的。我可以告诉你们的是,现今有很少工程师能够真正给他们的公司带来业务价值。他们解决技术问题,只是因为它们很有趣或者很有挑战性,他们缺乏这方面的经验,而且不是以价值为驱动,所以他们容易跑偏,而他们的领导也不懂得如何更好地调整他们的工作优先级。如果是以价值作为 KPI,那么那些正在创造业务价值的工程师就有可能是 Nx 程序员!
如果是以这样的 KPI 为前提,那么“快速进展并突破”可以理解为“在最短的时间内提升创造业务价值的能力,不要太过满足于已经创造的价值,它们仍然有提升的空间”。如果“提升创造业务价值的能力”意味着减少工作量并获得充足的休息以便产出高能的价值,那么“快速进展并突破”也并不会给你带来任何压力或投入更多的工作时间。
行业现状
当然,并不是所有的公司都会同意我的观点。有些公司是一个极端,比如 Uber、Apple 等,他们希望顶级的工程师能够全力以赴,最大化他们的产出,以便达成他们想要的业务价值。而另一个极端,比如 Facebook、Salesforce 等,他们坚持认为工程师应该知道自己应该在什么时候放慢脚步,在必要的时候减少工作时间,以更聪明更周全的方式工作,因为他们相信他们的工程师因此能够在更少的时间里以更少的投入产出更多的价值。
当然,也有同时持有两种观点的公司,他们也很成功,所以我不认为它们哪个会比哪个更正确。我的观点的核心在于:
- 后者并不是悖论,对于这些公司的员工来说,这样做也并非缺乏职业素养。因为软件工作的特殊性,在某些有利条件下产出高能价值是有可能的。
- 作为软件行业的工程师,你有在这两种文化(以及它们的折中)中做出选择的权利,与其他行业的从业人员相比,我们真的算幸运的。
结论
或许你会问:“10x 程序员都会经常打盹吗”?实际上并不全是,可能是刚好让你给撞上了。不过我所看到的很多“业务价值 10x”的程序员反而经常这样,因为他们很清楚自己的极限,他们知道什么时候该做一些与工作无关的事情,在得到充分休息之后继续回来工作,然后产出高能的业务价值。他们当中有些人会选择打盹,长时间的打盹,而对于你来说,你需要找到适合你自己的方式(在适当的时候出去散步、通过玩游戏放空你的脑袋、和你的小孩一起玩……)。
那么接下来该怎么做?如果你不清楚该怎么在实际工作当中应用这些想法,可以参考这些必杀技:注意观察当你使用少量的代码解决了一个很重要的业务问题时都发生了什么;注意观察日常工作中是什么让你的产能倍增;不断地了解你自己的极限,改进你的健康状况和精神状态,提升你的效率;遵循你找到的这些模式。
查看英文原文: 10x engineers take long naps
感谢郭蕾对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ , @丁晓昀),微信(微信号: InfoQChina )关注我们。
评论 1 条评论