学习站 / ai-coding / uncle-bob-ai-workflow

Uncle Bob 的 AI 编码工作流:AI 全权写码,人守质检门

《Clean Code》作者 Robert C. Martin 在 Matt Pocock 的播客里交代了自己的极限实验:代码全部交给 AI 智能体,人不再逐行评审,改用八道自动化门禁兜底质量——五站流水线跑下来,效率仍是人工的 4–5 倍。但架构规划这一环,他承认「全自动化还没走通」。UML 之父 Grady Booch 站在对面:信任但要核验,一行都不放过。

受访 Uncle Bob(Robert C. Martin,1964 年初触编程,从业五十余年) 主持人 Matt Pocock 中文整理 InfoQ · 褚杏娟 归档 2026-09-16

中文整理:完全相信AI代码的Uncle Bob,坦诚这条路还没走通(InfoQ)
原始访谈:Matt Pocock 播客 · YouTube(「晨间浴袍吐槽」始于两年前门廊上对 SQL 注入的即兴吐槽)


立场 · 同一个问题的两种答案

把「读代码」换成「跑关卡」,可行吗?

AI 代码普及之后,软件工程两位奠基人物给出了截然相反的答案。这也是整篇访谈的张力所在:自动化指标,到底能不能替代资深工程师几十年练出来的问题识别能力?

Uncle Bob ·《Clean Code》作者

门禁替代评审

「只要 AI 生成的代码全部通过一道道关卡,即便没人读过一行函数内部实现,我们也有充分理由相信代码的正确性。」
  • 代码全权交给智能体,人只核查 CRAP 评分、不定期抽查、跑全套定制测试;
  • 八道门禁(见下文)构成唯一质量关卡;
  • 自述实测:叠加全部约束后,效率仍是人工的 2–4 倍。

Grady Booch · UML 联合作者

信任,但要核验

「作为经验丰富的开发者,我可以凭直觉分辨代码好坏。但没有任何智能体,能够拥有同等的实战积累与业务上下文,做到这件事。」
  • 会完整审核智能体生成的全部代码;
  • 指标能给出功能正确性信心,但发现不了:安全漏洞、悄悄侵蚀可维护性的无效死代码、被漏掉的性能攸关的逻辑拆分。

本文按访谈原貌整理两边观点,不代下裁决;末节「边界与争议」汇总了这套方案的适用前提。

太长不看 · 七问七答

先给结论速览

  1. 现在的工作模式是什么?全权交给 AI 智能体执行开发、运行各类检测工具;终极目标是彻底不用手动查看代码,完全信任 AI 的输出结果。
  2. 为什么还要费力管代码质量,而不是快速迭代?AI 和人一样扛不住极度混乱的代码——容错阈值不同,但上限真实存在;混乱一旦突破阈值,迭代卡顿、漏洞激增、原地打转。
  3. 哪些传统理念要调整?复杂度阈值放宽(人 CRAP≤4 → AI 6,或放宽到 8);TDD 是适配人类的工作准则,不该强行约束 AI——它总会回归「先开发、后补测试」。
  4. 做多少前置规划?彻底放弃重度前置规划,拥抱敏捷小迭代:做完一小轮,人工复盘重构架构,再进下一轮。
  5. 怎么看「需求驱动开发」?如今编程修改成本趋近于零,没必要花大力气打磨完美需求文档;快速迭代、持续优化才是最优解。
  6. 新人怎么培养敏锐度?研读经典老书(DeMarco、Yourdon、《程序员修炼之道》)——架构思维、工程理念、战略逻辑永不过时,再结合 AI 实战体感建立战略思维。
  7. AI 时代还要学底层原理吗?底层基础的价值从未改变。「鼓吹基础无用的人,终究会付出代价。」

机制 · 为什么不靠提示词

明文规范在 AI 眼里只是「参考建议」

大多数人的做法是给智能体补提示词、加规则。Uncle Bob 一开始也这么干:把 TDD 规范、整洁代码准则整成数页文档,几乎把《Clean Code》核心录入提示词。结果发现,模型对待这些明文规则,就像《加勒比海盗》里的准则——可遵守可不遵守。

背后的核心技术现象叫 lost in the middle(中间信息丢失):上下文窗口的注意力开头和结尾权重高,中间内容被弱化。规范提示词一长,大部分规则恰好落进中间区域,直接被模型无视;随着迭代推进、上下文累积,模型更无法筛选全部有效规则。行业里把这叫「智能区」和「迟钝区」(Dex Hardy 的概念):前段词元判断力强,越往后注意力越稀释。

核心规则放开头 · 智能区 迟钝区 · 几十条规范在这里被无视 最近消息 · 智能区 上下文位置(词元不断累积)→ ↑ 注意力权重

lost in the middle · 注意力在上下文两端强、中段弱。对策:初始提示词只保留最核心的规则,让关键信息全部落在高优先级区域;其余规范约束,全部后置成交确定性工具——规则固定、执行确定,不吃上下文机制,可以无限叠加。

约束也不是越多越好:叠加过多会拖慢迭代,得不偿失。判据很简单——只要 AI 的生产效率仍高于人类,这套约束就值得。他的实测是,叠满之后 AI 效率依然是人类的 2–4 倍。

机制 · 八道质检门

没人读代码时,靠什么兜底

这套想法不是凭空来的。21 世纪初有两项「理念很好但算不起」的技术让他念念不忘:CRAP 评分(结合圈复杂度与测试覆盖率的复合评分,判定函数劣质程度)和变异测试。当年他在大型项目里试过:CRAP 检出一堆劣质函数,但海量重写得不偿失;变异测试单次全量四分钟、要重复跑数百次,只能通宵挂机。去年圣诞前后他突然想通:AI 速度快、不怕枯燥、精准执行指令,正好让这两件事变得算得起——原来通宵的活,现在三十分钟左右跑完,还能自动修补漏洞、补齐覆盖。由此搭出八道门:

GATE 01

单元测试

编码智能体随码产出

GATE 02

Gherkin 验收测试

高阶验收标准

GATE 03

QA 测试流程

模拟用户操作的全系统方案

GATE 04

圈复杂度阈值

CRAP 评分把关

GATE 05

模块大小限制

防单模块膨胀

GATE 06

依赖结构分析

依赖规则配置化校验

GATE 07

变异测试

检验测试本身的有效性

GATE 08

测试覆盖率要求

加固阶段拉到 100%

阈值要跟着换人:CRAP 从 4 放宽到 6,可能到 8

AI 的短期记忆容量更大、精度更高,能处理更复杂的逻辑分支,所以复杂度阈值要重新标定:

人类开发者 · 他多年的要求

≤ 4

圈复杂度 4 意味着函数只有 4 条独立逻辑分支,人脑轻松hold住。

AI 开发 · 当前阈值

6

CRAP 6 = 函数 6 条独立逻辑分支且全部被测试覆盖;他与 AI 多次验证,适配性良好。

AI 开发 · 可能放宽到

8

随模型能力继续上调,前提依然是全量覆盖兜底。

第二个要调整的是TDD 的落地方式:「写一行测试、写一行业务代码」的节奏是人类为自己设计的,硬写进提示词也没用——AI 最终总会回归「先完成函数开发、再补对应测试」,和 John Ousterhout 提倡的节奏一致。他的结论:编程的价值理念依然通用,但开发行为规范和操作阈值,要针对 AI 全面调整,不能照搬。

变异测试:给测试本身做质检

原代码 if (a < b) { total = a + b; }
变异体 · 运算符被系统性反转 if (a <≥ b) { total = a +− b; }
→ 全套测试报错 ⇒ 变异体被「杀死」:测试有效 ✓
→ 测试依旧通过 ⇒ 存活变异体:这里存在测试漏洞,必须补测试 ✗

逻辑被改动后测试必然报错;若还能通过,说明这段代码的测试有漏洞。它的严谨程度超过绝大多数团队的人工评审——这正是 Uncle Bob 敢不读代码的底气来源之一,但也意味着把测试套件当唯一质量关卡,需要极强的工程纪律,绝大多数团队并不具备,也很难快速建立。

机制 · 五站流水线

五个智能体接力,每站一道门

单智能体五分钟出的活质量参差;他把流程拆成五站接力,每站职责单一、规则精简,用一小时换回远高于人工的质量。

01

需求解析

把人工撰写的需求文档转成结构化验收标准。

Gherkin 用例QA 流程

02

编码

按结构化用例开发业务代码、写单元测试,先过基础验收。

业务代码单测

03

清理

跑 CRAP 检测、做常规评审,清掉上游产出的冗余劣质代码。

CRAP 检测评审

04

加固

执行严苛变异测试,覆盖率拉满,逐一修掉逻辑漏洞。

变异测试100% 覆盖

05

QA

把 QA 流程转成可执行脚本,全自动操作系统、输出确定性结果。

可执行脚本确定性报告

五站闭环 · 流程末尾附一道 PASS:代码必须连过八道门才算交付。配套两个用法:一台笔记本并行跑 3 个以上编码智能体;智能体「即用即毁」——单次任务完成即销毁,下一轮用全新实例,保证上下文干净。代价是每次启动 10–15 秒初始化、重读任务上下文,加上多智能体通信开销。

单个智能体

≈ 5 分钟 · 质量参差

五站流水线

≈ 1 小时 · 质量稳定

人类开发(对照)

≈ 半天

以人工半天 ≈ 4 小时为基准流水线 ≈ 人工的 4–5 倍效率

为什么分层分工有效?主持人 Matt Pocock 给了个精准概括:迭代轨迹。AI 会话一旦定下调子,后续所有修改都会延续这个方向——让智能体做界面测试,它后面的改动都会默认附带界面测试逻辑;只有清空上下文才能打破轨迹。让开发智能体的轨迹是「优先实现功能」、加固智能体的轨迹是「极致完善测试覆盖」,分层恰好规避了轨迹混乱。Uncle Bob 的回应:完全契合,这在非编程场景同样存在,保持上下文方向统一就能有效规避幻觉与逻辑错位。

动机 · AI 也怕代码腐烂

不清理劣质代码,智能体会自己「停摆」

「为什么要管质量、而不是快速迭代等着漏洞自愈?」他在去年底就拿到了答案:让 Grok 智能体持续迭代,不及时清理劣质代码、一味堆新功能,冗余和漏洞持续累积,随之而来的是:

结论:AI 智能体速度快、智能化程度高,但和人一样无法应对极度混乱的代码。它们的容错阈值和人类略有不同,上限真实存在;混乱突破阈值,就会卡顿、漏洞激增、彻底无法推进。这就是全部质量管控工作要回答的「为什么」。

边界 · 还没走通的那一环

架构设计,仍然是人主导

标题里「这条路还没走通」指的就是这里。就在访谈前一个月,架构设计还是他人工负责:让 AI 完成基础开发后,主动向它问询系统结构、模块关联、依赖关系——很多时候 AI 给出的架构答案漏洞百出,他会基于经验重新规划模块拆分、定义模块间通信规则,输出明确方案再交回 AI 执行。

为了提升管控效率,他搭了两件工具:

他正在尝试把整套架构规划流程全自动化,暂时没有取得理想效果。

边界清晰、接口规范、分工明确的模块,无论人类开发者还是 AI 智能体,都能轻松理解、精准把控。—— Uncle Bob 谈优质模块化的核心价值

这里与 John Ousterhout 的深度模块理论呼应:劣质的浅层模块接口繁杂、内部单薄;优质的深度模块接口极简、内部封装大量核心逻辑。这套理论在 AI 时代反而更吃香——AI 只需读懂极简接口就能高效开发,还会通过读测试用例理解系统功能,代码结构和模块设计越规范,AI 对业务的理解就越精准,开发质量自然越高。这既是优势也是风险点:只要底层逻辑统一规范,就能规避风险、放大优势。(两人这本书的附录里有一场专门辩论。)

方法 · 规划观

放弃完美图纸:小步迭代 + 每轮人工复盘

「极致前置规划」他本周刚好又测了一次,结果与以往一样:彻底失败。无论前期规划多细致,人类无法穷尽所有场景,AI 也不具备全局思考能力;执行中必然出现规划外偏差,只能反复暂停、重构、重试,效率极低。他的替代方案是一套小迭代循环:

STEP 01

挑一个单个小需求

不一次规划全部,交给 AI 完成一轮迭代

STEP 02

人工复盘架构

优化结构、调整模块与依赖,自动化尝试暂未突破

STEP 03

进入下一轮

逐步完善整体系统

循环往复 · 每轮都不跳过人工复盘

敏捷小迭代 · 建房类比:如果修改设计的成本极低,你不会先花高价买完美图纸再一次性施工——先打地基、再调格局,边搭、边改、边完善。如今编程的修改成本无限趋近于零,重度前置规划失去了经济学依据。

对流行的「需求驱动开发」(多个 AI 反复打磨完美需求文档再开发),他的判断很直接:AI 非常擅长写需求文档,还会主动丰富细节、美化方案,看起来无可挑剔,但落地执行时一定漏洞百出。所以:

建议 · 给新人的路径

把自己当成「人类智能体」

AI 极擅长战术编码,却不具备战略思维;而战略编程的反馈周期长,传统模式下架构失误可能半年后才暴露,新人常常等不到反馈就转行了。AI 时代反而加速了流程——战略失误会快速暴露。他的成长路径分三步:

01 · 先当过程序员

亲手写代码

不用太长,但要完整经历编码、调试、排错;否则永远看不懂 AI 面对的底层问题,建立不了顶层思维。

02 · 再当智能体

接受和 AI 一样的门禁

在重度用 AI 的团队里,资深工程师管战略,新人承接 AI 级别的任务、接受同样的自动化检测约束——效率低,但实战积累最快;熬过这阶段,才有资格把控 AI、做战略设计。

03 · 补历史经验

底层 + 经典书

从二进制、汇编、C 学起,逐层搭到高级语言与 AI 协作;读 Tom DeMarco、Ed Yourdon 与《程序员修炼之道》,补上 AI 时代被缩短的「历史踩坑经验」。

软件是人类创造过最复杂的事物。软件工程的底层基础,本质是用来拆解、组织、梳理复杂系统的方法论——这套逻辑不仅适配人类,也适配仿生人类的 AI 模型。鼓吹基础无用的人,终究会付出代价。AI 只是延缓了问题暴露的时间,并非彻底消除了问题。—— Uncle Bob,引 Dijkstra 并作结

主持人补了一句行业规律:从二进制到汇编、编译器、再到大模型,每次抽象层级升级都有人高呼「底层无用」,最后都被验证是错的——所有被抛弃的底层规则,终会被重新拾起。Uncle Bob 的回答只有四个字:「没错,亘古不变。」

边界与争议 · 使用前先读

这套方案的适用前提

数字均为自述。2–4 倍、4–5 倍、30 分钟等效率数据都出自 Uncle Bob 本人在播客中的实测自述,无第三方复现;复制前先想清楚自己的基线怎么量。