
一句话:工程原则要保留,人的习惯不必照搬!
你有没有这种感受:Agent 写代码越来越快,但项目质量好像并没有跟着提升——反而更容易失控了?
很多人以为 AI 时代要做的是学会写更好的 Prompt,或者把《Clean Code》的规则一条条喂给 Agent。
Uncle Bob(Robert C. Martin)的做法是:把软件工程纪律拆成确定性工具 + 短命窄职责 Agent + 人守边界,别靠长 Prompt 训话。
下面 7 个原则,每一个都跟『常识』对着干,而且都经过了大规模代码库的检验。

常识 既然 Agent 改代码这么快,何必在意代码整洁?直接冲,Bug 让 Agent 修就行。
反直觉的是 Agent 和人一样会被混乱代码拖垮。坏代码累积后,Agent 会陷入『修改 A 破坏 B → 修 B 带回 A』的循环,甚至干脆放弃任务。
Agent 的高速,让过去因成本太高而无法落地的质量工具终于可以日常运行了。
过去跑一次变异测试要整夜,现在半小时够了。
CRAP 分析(综合圈复杂度和测试覆盖率评估代码风险)可以在每次提交后自动触发。
速度快,不是混乱的借口,而是需要纪律的前置放大器。
常识AI 写出烂代码,应该继续补 Prompt、加 Clean Code 规则。
反直觉的是 长 Prompt 会被模型当成『海盗准则』——参考意见,不是铁律。而且会遭遇 Lost in the Middle 效应:上下文越长,中间规则越容易被忽略。
把能程序判断的要求变成测试、复杂度检查这类硬工具。 Agent 可以忘掉第 80 条提示词,却绕不过一个失败的测试。
规则写在 Prompt 里是建议,写在 CI 门禁里是法律。

常识 用多个 Agent 是为了同时干更多活。
反直觉的是 多 Agent 的第一个实际价值是让每个 Agent 只负责一种任务,完成后就退出,下一个 Agent 从干净上下文开始,不继承前一个 Agent 的偏见和混乱思路。
这直接解决了单 Agent 上下文无限增长导致的『脑雾』问题。Uncle Bob 把这套机制叫做 Gauntlet(闯关接力)——每个角色生→干→死,用 git worktree 或交接文件传物,不累积思维残渣。
常识AI 既然能写代码,应该也能设计模块边界。
反直觉的是 自动测试能检查行为,却不能自动给出好的模块边界。Uncle Bob 仍然亲自划分模块,然后建立依赖检查工具强制规则。
更反直觉的一点是:好的模块化设计不只帮人,也特别适合 Agent。 深模块(窄接口、宽实现)的接口小,Agent 只需理解接口就能动手,不必加载全部代码,从而减少分心。
浅模块暴露多却隐藏少,Agent 反而容易迷失。
常识 开始编码前应该让 AI 做详细规划,避免走弯路。
反直觉的是 Agent 极其热爱写计划,文档写得完整又漂亮,但一旦进入实现就会暴露大量未知细节,计划随之崩塌。这像极了 20 世纪 70 年代的瀑布开发。
小步实现、快速反馈。因为 Agent 已经把代码修改成本压得极低,前期计划并没有同步变得更准确。敏捷,反而重新变得划算了。
常识 初级程序员应该先学怎么用 AI 工具提效。
反直觉的是 新人需要先亲手写一年代码,再被当作一个 Agent 来约束——接受测试、复杂度检查等——在密集的失败反馈中理解代码为什么不行,之后才运行自己的 Agent。
更反直觉的是:新人还需要学汇编语言。 因为不理解底层抽象,就容易把高层当魔法。而资深程序员能识别出 Agent『正在挣扎』,这种判断力只能来自亲身踩坑。
常识 要把《Clean Code》里的规则全部教给 Agent。
反直觉的是 价值可以保留——可测试、低复杂度、清楚边界,这些都没变。但执行阈值和操作习惯需要重新测试。
例如:圈复杂度上限从人的 4 放宽到 Agent 的 6 甚至 8;不强迫 Agent 模仿 TDD 的『先写测试再写实现』节奏,因为 Agent 短期记忆更强,先写代码再补测试可能更符合它的特点。
原则不变,阈值可变。 这是工程纪律在 AI 时代最务实的姿态。

综合圈复杂度和测试覆盖率计算代码风险分数,找出高风险函数优先重构程序员的工作会离代码远一点,离工程更近一点——尽量不逐行阅读 Agent 生成的代码,而是定义模块边界、选择质量阈值、把模糊要求变成可执行检查。
那些被嫌弃为『过时』的规则,恰恰会在 Agent 把项目推到失控边缘时,被人重新捡回来。