【译】现场编程糟透了
有些人喜欢现场编程面试。但我不是其中之一。
两天前,我在领英上刷到一篇帖子:

BaxEnergy Yokogawa 首席技术官 | 前 Stack Overflow、Toptal 员工
我们会给每位候选人出一道简单的编程题。比如:“给定一个数字列表,返回其中偶数的总和。”这道题本就不该难,也无需什么巧思,理论上不该用来淘汰任何人。
这只是个基本检查而已。一个有6到10年经验的开发人员或系统可靠性工程师,闭着眼睛都该能做出来,对吧?但显然并非如此。
约75%的候选人会失败。而且不只是初级申请者。我说的是那些头衔里带“资深”的人,那些说自己指导初级员工的人,那些声称有多年生产经验的人。
乍一听很离谱。为什么一个写了多年代码的资深工程师,会在这么简单的基础算法题上栽跟头?难道他们突然忘了怎么编程了?或许吧。但我有不同的看法。
一个小故事
四年前,我申请了Toptal的职位。我通过了初始阶段的考核,也通过了90分钟的Codility评估(我记得有三道题)。但之后,在一场时长约30分钟的现场编程测试中,我没能完成题目。几小时后我重新看了那道题,很快就解出来了。
这太让人困惑了。那道题其实真的不难。我明明能解出来,却在现场编程环节失败了。
这激起了我的好奇心,当时我做了些研究。结果发现,这在科学文献中是个众所周知的现象。一切都与压力有关。
压力下的大脑
当你处于像现场编程这样高风险、时间紧迫的情境中,你的大脑反应和面对其他威胁时一模一样。杏仁核被激活,皮质醇水平飙升。负责复杂推理和工作记忆的前额叶皮层会受到损害。损害程度因人而异,取决于个人的压力耐受基线,可能是轻微、中度或严重的。
工作记忆是我所知道的最能代表流体智力的指标,流体智力指的是你的推理、解决新问题和抽象思考的能力。我认为,这正是通过现场编程测试最需要的能力。当前额叶皮层因压力受损时,你的工作记忆容量就会缩小。
对于有些人,尤其是那些有轻微表现焦虑的人,清晰思考几乎变得不可能。你的注意力范围缩小,无法在脑中记住多个步骤,几秒钟前刚输入的内容都可能忘记。感觉自己的智商下降了30分。事实上,感觉自己就像变成了另一个人,一个笨得多的人。
权威论文
在写这篇帖子时,我发现了一篇让我十分惊讶的论文。这是一项针对现场编程表现的严谨科学研究。
这篇论文名为《压力会影响技术面试表现吗?》,由微软的研究人员共同撰写。他们让参与者在两种环境下解决一道编程题:
- 私人环境:独自在房间里,没人观看。
- 公开环境:在监考人员面前,边思考边说出来。

任务相同,时间限制相同,只是压力水平不同。
他们的研究结果是:在被观察的情况下,参与者的得分只有独自答题时的一半。
公开环境下的认知表现平均得分更低,且差异更大(方差更高),这表明有些候选人在压力下受到的损害极大,而另一些人则表现如常,甚至略好一些。这就是为什么现场编程如此不公平。
这些发现对我来说并不意外。但有个发现很惊人:在公开环境中,没有一位女性通过测试,而在私人环境中,所有女性都通过了。 所以,如果你的公司想要“支持科技行业的女性”,却还在采用现场编程面试……恭喜你,你正在运行一个经科学验证的筛选排除机制。
压力下的表现
我倾向于认为现场编程是衡量压力下表现的一个指标。我刚才提到的那篇论文也持同样观点。
有些公司确实在乎这一点,有些甚至会在职位描述中提到。他们想要能在压力下表现良好的候选人。如果是这样的话,那么现场编程或许有用。
但大多数公司并非如此。
大多数招聘不会提到抗压能力,不会把工作描述成“高压”的,也不是在寻找“能在压力下表现良好”的人。他们只是想要优秀的工程师。
在30分钟的LeetCode测试中僵住的工程师,可能正是那个能默默写出完美代码、写出出色文档、调试复杂系统的人。 你拒绝的不是一个糟糕的工程师,而是一个在被注视时表现不佳的人。
而这并非大多数工作所需要的技能。
公司把现场编程说成是对编程技能的测试,这是误导。更糟糕的是,这会加剧表现焦虑,让候选人觉得这种测试是衡量他们编程技能的可靠标准。但对大多数工程师来说,绝非如此。
现场编程无法衡量我们想让它衡量的东西。它更准确地衡量的是压力下的皮质醇水平,而非编程技能。
缓解压力
我们无法改变现场编程是科技行业面试常见做法这一事实。但我们可以尝试缓解它带来的压力。
让大脑对压力脱敏的最佳方法是反复接触。进行模拟真实场景的现场编程练习:可以使用Pramp、Interviewing.io或LeetCode的模拟评估等平台。
你也可以设定计时器,录制自己(模拟被“观看”的场景),并边思考边说出来。逐渐增加压力(比如邀请朋友观看)。
我也一直在考虑尝试一些我认为可能有助于在压力下表现的补充剂。
- L-酪氨酸:压力会消耗儿茶酚胺,这可能是压力情境下认知能力下降的原因。补充L-酪氨酸可能有助于在压力下补充这些神经递质。
- L-茶氨酸:茶叶中含有的一种氨基酸,能促进放松。有研究表明它能减轻压力,提高专注力。
我还没在面试中试过这些,也不鼓励任何人这么做。但我觉得或许值得一试,尤其是如果你有表现焦虑的话。你一定要先在练习中测试。每个人都不一样,对一个人有效的方法,对另一个人可能无效。
不擅长现场编程不代表你不是个好工程师。这只能说明你是个普通人。

浙公网安备 33010602011771号