一切从一个说不清的"感觉"开始

用 AI 写代码久了,我注意到一件怪事。

论能力,AI 比我强。它的知识广度、写代码的速度、能记住的细节,我都比不了。但奇怪的是,它给不出那个"一眼看到底、直接最优"的方案。真正把一份代码打磨好的,往往是我在 review 时挑出来的问题——有时候我甚至说不出哪里不对,就是"感觉这里有点问题"。然后顺着这个感觉去测、去改,来回几轮,最好的方案才浮出来。

于是我开始琢磨:这个"感觉"到底是从哪来的?为什么 AI 没有?

想清楚这一个问题,后面一连串关于 AI 编程的判断,就都通了。

"感觉"不是玄学,是被压缩过的经验

那个 review 时冒出来的"不对劲",一点都不神秘。它是被压缩过的经验

我写过的代码、踩过的坑、被线上故障从床上叫起来的那些夜晚、某个当时觉得"无所谓"的设计后来狠狠反噬我——这些带着真实后果的经历,在脑子里沉淀成了一种不需要逐条推理、瞬间就能触发的模式识别。所以那个"感觉",其实是大脑在极短时间内,把眼前的代码和过去成百上千个"出过事的相似场景"做了一次匹配,然后给我发了一条低带宽、但高精度的警报。我说不清理由,但它准。

关键词是两个:后果,和反馈闭环

直觉不是读出来的,是"做决定 → 承担结果 → 痛 → 修正"这个循环磨出来的。痛过,才长记性;长了记性,才有直觉。

AI 缺的,正是这一环

理解了"感觉"的来历,就能理解 AI 为什么给不出它。

它优化的是"看起来最可能对",不是"被现实验证过"。 AI 生成的方案,本质是"在我见过的海量代码里,这种情况下最常见、最合理的写法"。这是一个均值——一个通用最优解。可你的项目有自己的约束、自己的历史包袱、自己的性能边界,这些恰恰是均值覆盖不到的长尾。而人的"感觉",专门工作在这条长尾上。

它没有切身利害(skin in the game)。 AI 不会因为某个方案出事而痛,所以下次也不会本能地回避。它的"直觉"来自统计规律,不来自后果。没有后果,判断就会不断回归到"常见情况",而真正的坑,往往就埋在不常见的地方。

它其实没有真的"眼观全局"。 看起来它读了你全部的代码,但它的理解是局部拼接、当下临时重建的,不像你脑子里那个用很多年养出来、统一连贯的"系统心智模型"。专家之所以强,不是因为信息多,而是因为有那个压缩得极好的内部模型。

还有最关键的一半,是你没说出口的东西。 很多决定性的约束从来没进过 prompt——“这个接口下游其实有人在依赖”“老板真正在意的是 X,不是 Y”。你 review 时补上的,正是这些 AI 拿不到的隐性信息。

所以,"我写一版 → 凭感觉挑刺 → 反复优化"这个流程,根本不是我能力不如 AI 的证明。它恰恰是最优分工:AI 负责快速铺开广度,我负责用经验做高精度的方向校正。那个"感觉"是整个闭环里最贵的东西,因为它是用真实代价换来的——而 AI 从没付过那笔代价。

顺便厘清一个误会:我不反对自动化测试

往下推之前,得先拆掉一个容易混淆的点。

承认"没有上帝视角的完美设计",不等于反对自动化。敏捷、迭代、重构,本质上都是在承认同一件事:完美的前置设计不存在,最优解只能在反馈中逼近。这是几十年的行业共识。

但"需要人来把方向"和"要不要自动化测试",是两个层面的问题,它们不打架。自动化测试不是用来代替我那个"感觉"的,它是用来保护"感觉"的成果的。 我凭经验优化出一个好方案,自动化测试保证我下次改别处时,不会把它悄悄破坏掉。它管的是回归,不是设计。

一句话:自动化测试是护栏,不是司机。 该反对的是"让护栏来当司机",而不是护栏本身。

我真正不信的,是"自动化编码"

我要反对的,是另一样东西——自动化编码:从需求到上线整条流程全交给 AI、人彻底退场的那种"黑灯工厂"式开发。认为这条路现在走得通的人,我觉得是把问题想简单了。三个理由:

第一,没有人,就没有判断层——而判断层正是 AI 的结构性短板。 黑灯工厂能成立,前提是"被加工的对象有确定规格、误差可量化"。可软件开发里最要命的部分——这个设计对不对、这个抽象合不合理、用户到底要什么——根本没有确定规格。没有规格,就没法无人化。

第二,验证的尽头还是人。 测试只能覆盖"有人想到要测的失败模式"。一旦无人化,"想到要测什么"也交给了 AI,于是它只会测它想得到的,测不到它想不到的——而真正会炸的,永远是没人想到的那种。这是一个闭环验证不了自己盲区的死结。

第三,误差会累积,而不是收敛。 真正的黑灯工厂能跑,是因为每一步的误差可测、可纠、不累积。AI 编码恰恰相反:早期一个错误的理解,会被后续所有自动步骤当成"对的"继续放大,中间没有人喊停。无人流程缺的,就是那个"等一下,这不对劲"的打断点——也就是人的那个"感觉"。

说到底,相信黑灯工厂的人,犯了一个很具体的认知错误:他们把软件开发当成了制造业。 制造业可以无人化,因为规格确定、误差可量化、流程会收敛。但软件开发的核心难点不在"造",而在"决定造什么、造得对不对"——这是判断密集,不是执行密集。他们想自动化掉的,恰恰是唯一不能被自动化的那一部分。

那 harness engineering 算什么?

聊到这里绕不开 harness engineering——围绕大模型搭起来的那套"挽具":上下文管理、工具调用、反馈回路、验证环节、护栏、编排逻辑。如果说裸模型是一匹马,harness 就是缰绳、马鞍和挽具。

我的看法是:它和我上面的观点,本质上是统一的,甚至就是这套观点的工程化实现。 harness 之所以存在,正是因为它承认裸模型会跑偏、拿不到上下文、没有后果反馈,所以要在模型外面搭一套系统去补这些缺口。spec 是 harness(给模型注入意图和约束),测试是 harness(给它一个接近"后果"的验证信号),工具和检索是 harness(补它的局部视野),人在回路里 review,同样是 harness 的一环。我现在用的 vibe + spec,本质就是一套以人为最高校验节点的 harness

分歧只藏在一个点上:harness 能不能完善到把人挤出去?

  • 弱版本说:用工程手段约束、校验、纠偏模型,但人始终是顶层那个校验节点。——这个我完全认同。
  • 强版本说:harness 做得足够好,就能自我闭环,最终把人也"工程化"掉,实现黑灯工厂。——这个我反对。

所以我的观点,其实是 harness engineering 的边界条件:在"用工程把 AI 约束好"这件事上,我们一致;在"工程能不能完整到取代人的判断"这件事上,我划出了它永远到不了的那条线。

更深一层:完美规则既追不上,又很脆

harness 强版本的底层信仰是——规则可以无限完善,最终逼近一套"无缺陷的规则系统"。我认为这个信仰有两处硬伤。

硬伤一:规则永远滞后于现实,追不上。

规则是后验的,问题是先验的。每一条 harness 规则,都是某次出事之后总结出来的——它本质是"已知失败"的化石。可开发的本质,是不断走进没走过的状态空间,持续生产新的、还没有对应规则的失败。你想用一套静态规则,去罩住一个不断生成新问题的动态过程,这在结构上就注定追不上。这其实就是"感觉"那件事的延伸:感觉能应付没见过的情况,规则不能。

硬伤二:规则系统是脆的,而自动化会放大它的漏洞。

有人在的系统,遇到"规则说该这么做,但明显不对劲"的时候,人会停下来——这就是韧性。可纯规则驱动的自动系统不会停,它会忠实地把那个漏洞一路执行到底,而且因为是自动化,执行得又快又彻底,于是一个小漏洞瞬间被放大成大事故。

这里有一个反直觉、但我觉得很硬的结论:在没有人的前提下,自动化程度和系统韧性是负相关的。 越自动、人越不在回路里,系统就越脆——因为再也没有那个"等一下"的打断点了。

我不是这个领域的理论家,但我后来发现,自己从写代码里摸出来的这点直觉,其实早有人从别的路径验证过:

  • Gödel 式的局限:一个系统没法只靠自身内部的规则,去证明自身的完备和无矛盾。harness 想用规则系统自证完备,本就做不到。
  • 自动化的反讽(automation irony):高度自动化的系统把人挤到边缘,结果出事的时候,人反而丧失了介入的能力。越自动化,人越关键,可人也越没准备好。
  • 脆弱与反脆弱:规则系统是脆的(意外让它崩溃),而有人判断的系统是韧的、甚至是反脆的(意外反而让它学习、改进)。

还有一个现实账:就算完美 harness 理论上可能,覆盖那些长尾失败模式的边际成本也是指数级上涨的——覆盖 80% 的情况也许花 20% 的力气,可要覆盖到 99%,得花上百倍。所以 99% 的团队做不到,不是因为不够努力,而是因为这件事在经济上根本不划算。对绝大多数团队来说,正确策略从一开始就该是:让自动化干执行,让人守判断,把省下来的成本投在"让人能更快介入"上

几句必要的自我修正

把话说满之前,得给自己泼两盆冷水,否则这套观点很容易被人钻空子。

我反对的是"对规则完备性的迷信",不是规则本身。 规则是好东西——它是经验的固化、是杠杆、是让你不必每次重新踩坑的护栏。错的只是强版本那个预设:“规则可以完整到不需要人了”。更准确的说法是:一套 harness 的价值上限,取决于它是否承认自己永远不完整。把人当成顶层兜底判断者的 harness 是健壮的;把"消灭人的介入"当目标的 harness,是在亲手拆掉自己唯一的韧性来源。

"判断层全部归人"是当下的结论,不是永恒真理。 它成立的前提,是"AI 没有后果反馈、视野是局部的"。哪天真出现了能持续获得真实后果反馈、能维持统一系统心智模型的 AI,这条边界就会移动。但就现在而言,这个前提还牢牢成立,所以结论也成立。

结论

把这一路想下来的东西串起来,是这样一条链:

  1. 所谓"感觉",是带着后果反馈、被压缩成的经验直觉,它能应付没见过的情况;
  2. AI 在结构上缺这个——没有后果、判断回归均值、视野局部;
  3. 所以判断层不能无人,能自动化的只是执行层;
  4. 于是全自动编码(黑灯工厂)不成立——它想自动化的,恰是唯一不能自动化的那部分;
  5. harness 是这套人机协作的工程化,但它的强版本有双重硬伤:规则追不上现实,规则系统又脆、自动化还会放大它的漏洞,而且 99% 的团队在经济上也到不了;
  6. 最终的落点是:人不是 harness 里那个待优化掉的临时环节,而是它不可移除的顶层韧性来源。

落到我自己的实践上:现在这套 vibe + spec 的流程,不是什么"半自动化的妥协",而是目前唯一在认知上站得住的协作结构——人始终待在判断层,AI 在执行层放大产能,自动化测试在后面守住回归。

一句话收尾:自动化是护栏,不是司机。判断层归人,执行层归机器。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐