跳到主要内容

那些被 AI Agent 悄然终结的编程面试

· 阅读需 11 分钟
Tian Pan
Software Engineer

两个小时的课后作业和 45 分钟的算法面试从来都不是重点。它们只是代标(proxies)。课后作业代表的是“这个人能否交付功能”,而白板面试代表的是“这个人能否在压力下分解问题”。二十年来,这些代标运作得相当不错,以至于大多数团队都停止了对它们的质疑。它们的管理成本低、易于评分,并且与你真正关心的能力大致正相关。

编程 Agent 破坏了这种相关性,但没有破坏形式。面试照常进行。它仍然会产生一个分数。这个分数看起来仍然像是有意义的信号。但面试所衡量的东西与工作所需的能力之间的差距已经拉大到如此地步,以至于一个合格(green)的结果几乎证明不了任何东西——而大多数招聘流程还没有意识到这一点,因为表面上没有任何失败的迹象。

这是一种悄无声息的失效。不是过程崩盘了,而是一个过程在它的假设前提不再成立后仍在继续运行。

代标的坍塌

一个好的代标之所以奏效,是因为造假的成本与拥有底层技能的成本是同步的。在白板上反转链表曾是一个可用的信号,部分原因是流畅完成它的唯一方法是进行过足够的数据结构练习,以至于你可能也已经内化了真正的技能。代标和目标是同步波动的。

Agent 切断了这种联系。一个完全缺乏独立判断力、每月支付 20 美元订阅费的应聘者,现在可以提交一份整洁、经过测试、符合规范且带有注释的课后作业。公开销售的面试辅导工具可以在不到五分钟的时间内解决标准的课后挑战,甚至还能为你没写的代码提供人性化的解释。这个代标仍然在衡量“某些东西”——但那个东西现在变成了“是否拥有模型的访问权限”,而这正是每个在职工程师都已经拥有的。

调查数据让这种坍塌变得具体。一项针对超过 1.9 万场技术面试的分析发现,AI 辅助作弊在 2025 年下半年大约翻了一番,从约 15% 的应聘者上升到约 35%,趋势表明到 2026 年底这将成为主流行为。当三分之一或更多的应聘者可以通过工具而不是技能获得一个看起来不错的得分时,这个分数就不再是一个分类器,而是带有良好生产价值的噪声。

然而,深层的问题不在于作弊。作弊是显而易见的。悄无声息的版本是,即使是一个诚实的应聘者,在做着他们在工作中完全会做的事情时,现在也会使面试失效。要求一名优秀的工程师完成你的课后作业,他们会——正确且专业地——求助于 Agent,因为现在的工作就是这样完成的。他们不是在作弊,而是在演示实际的工作。而面试是为了隔离无辅助能力而设计的,根本不知道该如何给这种情况评分。

你在筛选一种工作中已不再独立存在的技能

这里有一个显而易见的陷阱。课后作业是真实工作的代标。而现在的真实工作是运行在编程 Agent 之上的。因此,如果你在课后作业中禁止使用 Agent,你就不再是在测试真实的工作——你是在测试应聘者在没有辅助的情况下完成你的团队成员在没有辅助的情况下不再去做的事情的能力。你已经把面试变成了一个已经过时的、博物馆式的过往工作流展示。

这种筛选不仅仅是没能衡量正确的东西,它还在主动剔除正确的人。那些最充分内化了 Agent 辅助开发的工程师——他们本能地委托样板代码,并养成了审查生成差异(diffs)的强健习惯——在人为设定的无辅助环境下,看起来会比那些死记硬背模式且从未适应新工具的应聘者更慢且表现更差。你正在颠倒自己的信号,奖励了错误的适应方向。

而且这种颠倒从招聘流程内部看是不可见的。你的漏斗指标看起来很健康。Offers 照常发出。没有人会针对面试流程提交 Bug。成本会在几个月后在其他地方显现:一个在无辅助课后作业中表现出色的新员工,却无法在复杂的真实代码库中驾驭 Agent,无法辨别 Agent 自信的输出在何时存在微妙的错误,也无法将模糊的需求分解为 Agent 可以执行的任务。面试评价是“强”,但实际工作表现却并非如此。等到你把这两个事实联系起来时,同样的错误代标已经运行了另外三个招聘周期。

现在的资深判断力究竟是什么样的

如果“在无辅助的情况下编写正确的代码”不再是区分点,那什么是呢?诚实的答案是,面试需要衡量那些无法转移给模型的技能——而这些主要是判断技能,它们一直存在,但总是隐藏在编码任务背后。

重要的信号已经从“你是否能产出代码”转向了“你是否能评估代码”。在 Agent 辅助的工作流中,资深工程师阅读 diffs 的时间远多于编写代码行的时间。那些有价值的、不可委派的技能集中在以下几个方面:

  • 规格说明 (Specification)。 将模糊的问题转化为足够精确的描述,以便 Agent 执行——并知道哪些歧义必须在编写任何代码之前由人类解决。
  • 存疑审查 (Review under doubt)。 阅读看起来合情合理但可能存在微妙 Bug、遗漏边界情况、安全漏洞或六个月后代价昂贵的架构选择的生成代码。由于模型优化的正是“合理性”,这比审查初级程序员的代码更难。
  • 知道何时覆盖 (Knowing when to override)。 识别 Agent 自信的输出在何时是错误或不必要的复杂,拒绝它并进行引导——而不是因为它能编译通过且测试通过就接受它。
  • 分解与排序 (Decomposition and sequencing)。 将大型变更分解为 Agent 大小的单元,决定哪些部分需要确定性的保证,哪些部分留给模型,并在 Agent 填充内容时在脑中保持整体设计。
加载中…
References:Let's stay in touch and Follow me for more thoughts and updates