这一年多的时间以来,AI Coding 已经从一个新潮的编程方式变成了默认方式,每个人都用着近乎相似的模型,相似的设备,相似的 Agent,理论上所有人产出的代码水平也应该相似,但如果你在一线工作过,你会发现实际情况恰恰相反,大家的代码产出水平方差反而比以往更大。这是一个相当有意思的话题,但是我却发现在互联网上鲜有人讨论。

为什么大家明明用着一样的编程方法,但是产出质量却会有如此大的差异?特别是当我反思自己每天跟 AI 的对话的时候,我觉得没有任何技术含量,我既没有什么魔法的提示词,也没有装什么花里胡哨的 Skills,纯粹就是把 AI 当作一个伙伴一起协作完成工作。我认为每个人的工作方式也都是如此,但是为什么还会存在个体差异?

在研究这个问题许久后,我认为我找到了一个很少有人讨论,但是在我看来是 AI Coding 核心要义的工作方法,我把它叫做「尽职编程」,用更口语化的表述就是「得靠谱」。

如果你和 HR,物业,政府机关等社会人员打交道多了,你就会知道在这个社会,要求这些行政人员帮你办成一件事有多难。但是我相信每个人的社交圈都会存在一种特能帮你办成事的能人,在古代,他们有另一种名字,叫做乡绅或者师爷,他们的工作就是两个字「办事」。需要注意的是,这类人自己往往并没有具体的专业知识,事情也多半不是他们自己执行的,但是他们就是有能力让别人高高兴兴把事情办成了。

在我看来,AI Coding 需要的就是这种能力。这个时代由于编程的速度极大地提升,工作分配的颗粒度也大大加粗,上一个时代每个人分到的活可能只是写某个模块甚至是某个函数,你不需要关心最后大家工作内容合并做成的事情是什么。但是如今更多时候是要让你把某件事情做成。而做成一件事情可能分一百个子事情,AI 有能力做完每件子事情,但是 AI 没有能力决定要做哪一百件子事情,这个的上下文可能在老板与你的沟通中,也可能存在你历史积累的工作经验里,还可能是你生活的常识,甚至还可能要预测未来的发展。而 AI 完全没办法通过你聊天窗口那几句话知道这么多上下文信息。

我在上一家公司接触过一种我觉得最可怕的人,甚至我都一度想申请让公司禁止他写代码,那就是他会让 AI 来决定,做成某件事情,需要做哪一百件事情,然后让 AI 全完成了。这就引出了今天的主题,那就是「尽职编程」。在我看来,他最大的错误就是没有做到「尽职」。坦率讲,AI 在自主决策的时候,正确率其实也不低,但绝对没有达到 100% 的地步。你和 AI 说要写一个文章编辑功能,如果不提供其他信息,AI 会自己决策是实时保存还是点击按钮保存,编辑框是固定大小还是会随着内容变长。但是 AI 依然会漏掉一些细节,比如多人同时编辑会如何。因为你给他的提示词就几个字符,他只会把它当简单的需求完成,况且如果 AI 思考过多可能还有过度设计的嫌疑。这时候,非常依赖人在其中多思考,多反问 AI,更重要的是,虽然代码不是你写的,但是你要能够回答得出在技术评审的时候别人的提出 —— 这是我认为的达到了「尽职编程」的标准。

如果只是为了实现需求,我甚至感觉在 AI Coding 时代到来后,我每天只需要工作 2 小时。但我其他时间其实往往是花在了「理解 AI 的设计」上。我会通过让 AI 画架构图,设计文档的方式,来理解 AI 写出来的代码而不是阅读代码本身,我甚至有一个百试不爽的魔法提示词是让 AI 写一个「面向产品经理」的文档,这样甚至连枯燥的技术语言都不需要阅读就能理解 AI 的设计了,还能把这个文档丢给产品经理让其他人也能理解系统的实现。

但「尽职」是一个主观行为,且没有尽头。什么样的需求需要尽职到什么程度才够,这完全凭个人自己的理解。比如近期我写的一个用来评测 Agent 质量的系统, 我就没做太多「尽职」工作,因为他的代码并非核心代码,且极容易推翻重改。但如果你要写一个 Agent 的核心代码,尽职就没有止境了,它不仅仅在你提交代码之前要 review,每过一段时间,随着代码的持续演进,还需要反复对系统进行「回归尽职调查」,才能对系统有最新的认识。而这些工作内容,不会产出可看见的工作结果,做与不做,全凭个人,做了也不一定有立竿见影的效果,不见得每家公司都能容纳这种工作方式尤其是大公司那种不懂行的中层领导的团队里。

尽管如此,也还是有一些方法可以在 AI Coding 工作流里,注入一些客观工具,鼓励这种「尽职精神」在公司内开枝散叶。比如我最近在我们的主仓库加了一个 Codex 自动 Review 代码的插件。注意,这个不是网上那些浅显的看几行代码评价几个无关痛痒问题的那种插件。而是会把代码库 clone 下来,结合代码库看修改本身产生的所有副作用,然后再给出 review 意见。而它的 Agent 上下文,完全独立用户 AI Coding Agent 的上下文,所以它会评价的非常客观。如果你就是执意要在一个 Get 接口修改数据,Claude Code 会因为你的命令而偏袒让你这么干,Review 的 Agent 不知道你的固执,所以依然不会让你这么干。由于你每一次修改都会有 Review 意见产生,你就会被迫进行多轮修改,或者你要直说你不同意 Review 意见。而且 github 上能看得到你的「尽职」过程,review 你代码的人本质上也是在 review 你的尽职过程。这就把主观的决策变成了客观可见的努力。我的体验下来,这个 Review Agent 不知道是不是因为提示词的原因已经有点演化成 Review 喷子了,但是在这个每个人都被 AI 阿谀奉承的时代需要喷子。

当我发现了这种在同样的工具下,产生不同的个体差异的现象时,说实话我有点松了一口气,至少 AI 短期内还没有那么容易能替代我的工作。我们和 AI 的区别在于,我们想把事情干成,AI 只想让这个对话完成,而干成事情的能力,在历史的长河里一直是稀缺品,从来没有因为工具的进步而被取代过。