Uncle Bob:代理时代,代码为何仍要整洁

从业逾五十年的《代码整洁之道》作者 Uncle Bob 谈 AI 代理实战:代理和人类一样会被烂代码拖垮;长提示词不如测试、变异测试、依赖规则等确定性工具;TDD 等人类纪律需放宽阈值;详尽前期规划必败,应回归敏捷小步迭代。

罗伯特·C·马丁

导语

从 1964 年十二岁写下第一个程序算起,Uncle Bob(罗伯特·C·马丁)已经写了超过半个世纪的代码,《代码整洁之道》是他被引用最多的著作。在这场与 Matt Pocock 的直播对谈中,他身披标志性浴袍出镜,复盘自己过去大半年与 AI 代理协作的实战教训:代理为什么会被烂代码拖垮、长篇提示词为什么不如确定性检查、多代理流水线如何分工,以及新手如何在代理时代学做战略程序员。

大纲与深读 10 章

展开「深读」看每一段讨论的问题与论据。

01

浴袍开场与半世纪编程路

  • 浴袍梗源自两年前凌晨六点在前院吐槽SQL注入问题的即兴视频,意外走红后成为固定节目
  • 1964年12岁时用小白管在木桩上为三位有限状态机写出人生第一个程序,从此被吸引
  • 靠父亲买的Fortran、Cobol、PL/1书籍自学,18岁成为职业程序员并持续一线工作超过半个世纪
  • 《代码整洁之道》已出第二版,是其被引用最多、影响力最大的著作
深读这一段

讨论的问题:非开发者该如何认识这位穿浴袍直播的编程传奇

论据 / 案例:1964年、12岁、三位有限状态机;超过半个世纪编程经历;《整洁代码》第二版被引最多

02

初遇代理:快而脏的协作

04:50
  • 去年十二月圣诞期间尝试早期Grock代理,代码写得很糟糕但确实能写,于是拉进自己进行中的项目
  • 代理速度快却不断留下混乱,人类一直在清理残局,反而被拖慢
  • 意识到代理不在乎工作枯燥、会执行一切吩咐,可以承担人类负担不起的质量任务
深读这一段

讨论的问题:代理的速度优势能否抵消其糟糕的代码质量

论据 / 案例:早期Grock代理;十二月圣诞期间的时间线;速度与混乱并存的观察

03

CRAP与变异测试的复活

07:50
  • 2000年代初的CRAP工具结合代码覆盖率与环形复杂度给函数打分,当年发现大量糟糕函数但逐一修复成本过高被搁置
  • 变异测试逐个翻转负号、比较符等运算符并跑全套测试,当年要运行一整夜,产生大量存活变异体却修不完
  • 转念让代理执行这些枯燥检查:变异测试从整夜缩至约30分钟,再令其修补漏洞、补齐测试
  • 新目标是完全不查看代码、完全信任代理操作,靠质量分数与定期抽查来验证
深读这一段

讨论的问题:二十年前因成本被放弃的质量工具如何借代理复活

论据 / 案例:CRAP公式(覆盖率×环形复杂度);四分钟测试套件整夜跑数百次;变异测试从整夜缩至30分钟

04

坏代码让代理失控

15:30
  • 代理在混乱代码中开始变慢并陷入改一处、坏一处的循环,越修越乱
  • 曾目睹单个代理直接放弃,同事转述它再也无法处理下去了
  • 结论是代码混乱存在阈值,超过后代理和人类一样失控,整洁代码对代理同样关键
深读这一段

讨论的问题:既然代理又快又聪明,为什么还要在意坏代码

论据 / 案例:Grock代理陷入修改循环直至放弃的实例;十二月时间线上的逐步观察

05

确定性工具取代提示灌输

19:40
  • 多数人往ClaudeMd等配置里堆指令属于引导,鲍勃选择确定性的自动化检查
  • 早期5-10页整洁代码规则提示被代理当成加勒比海盗式的指导方针随意软化
  • 迷失在中间现象使长上下文中段规则失效,初始提示必须精简到最小
  • 借用智能区与哑区概念:前150k标记较可靠,之后注意力稀释如拥挤房间里人声嘈杂
深读这一段

讨论的问题:为什么用规则文档驯化代理行不通

论据 / 案例:lost in the middle研究;dexory的智能区/哑区术语;150k标记分界;5-10页提示失效

06

五阶段多代理流水线

27:25
  • 多代理可并行且各自上下文聚焦,代理完成任务后消亡、新代理获得干净上下文,代价是每次约10-15秒启动
  • 流水线为规范器转Gherkin与QA文档、编码器写单元测试与实现、清理器做CRAP与常规审查、硬化器做变异测试、QA代理转可执行脚本
  • 硬化器不留情面地变异每个等号与变量并达到100%覆盖率,通过全流程即得可靠程序
  • 轨迹概念:同一上下文窗口会持续沿既有方向走偏(如咖啡话题被路过者污染成肥皂剧),只有清空窗口才能清除
深读这一段

讨论的问题:多代理如何分工交接并管住上下文窗口

论据 / 案例:单代理5分钟任务全流程约1小时、对比人类半天;4-5倍生产力;保持2-4倍速度差;Gherkin验收格式

07

模块架构与依赖规则

37:00
  • 架构此前靠手动:让代理先构建整体再询问模块结构,答案令他吓得不轻,随后人工设计模块划分
  • 让代理搭出UML架构查看器,可点击模块、子模块层层下钻直达代码
  • 确定性依赖工具生成紧凑规范文件,规定依赖流向,代理违反即须用倒置依赖、插入接口或拆分模块修复
  • 奥斯特豪特的深模块(小接口、大隐藏)正合模型只读接口的习惯,书末附录收录两人长篇辩论
深读这一段

讨论的问题:模块结构与接口设计为什么对代理同样是杠杆

论据 / 案例:UML架构查看器;依赖规范文件与检查器;深模块概念;与John Ousterhout的YouTube辩论

08

为代理调整代码纪律阈值

44:45
  • 代理短期记忆近乎完美,可承受更高复杂度:CRAP阈值从人类的4放宽到6,正尝试提高到8
  • 环形复杂度即函数内路径数,配合100%覆盖率确保所有路径被测试
  • TDD源于人类思维限制,代理即使被要求也会退回先写函数再补测试的方式
  • 结论:向代理灌输人类价值观没错,但施加人类纪律与阈值需要调整
深读这一段

讨论的问题:《整洁代码》的哪些纪律要为代理修改

论据 / 案例:阈值4→6→8;环形复杂度=路径数;代理无法坚持单行TDD的反复观察

09

规划的诱惑与敏捷回归

50:05
  • 详细前期规划再交代理执行是70年代瀑布的老诱惑,本周再试仍是灾难,执行者无法遵循原计划
  • 代理热爱写计划且写得精美详细,最终却崩溃;规格是短暂易变的,不存在人类维护的最终规格,源代码已不再由人编写
  • 变更成本已跌至接近零,应回归敏捷:做几个故事、评审架构、手动整理、再继续,并不断获取反馈
  • 庞大规格交给代理的解读命中率仅约5%-20%,而代理写的内容人类根本不会读;建议让代理分析他的工具后为你重新生成
深读这一段

讨论的问题:什么才算规范驱动开发,前期规划该做到什么程度

论据 / 案例:瀑布与敏捷的历史对照;房屋改建每处改动多花美元的比喻;20%过于乐观、可能仅5%的规格命中率

10

战略编程与新人培养

57:50
  • 奥斯特豪特的战术vs战略框架下,代理擅长战术、战略仍弱,新手应先持续写代码一整年了解代理在处理什么
  • 入职后把新人当作代理对待,分配同样任务并接受同样的确定性工具考验数月,通过后才可管理自己的代理
  • 学习路径从二进制、汇编、C到Python再到代理与工具,辅以Tom DeMarco、《务实的程序员》等经典老书
  • 软件是人类尝试过最复杂的事物,基础原理是组织复杂性的方法,对基于人类训练的模型同样适用;每次抽象层升级的末日预言从未应验
深读这一段

讨论的问题:AI接管战术编程后,新人如何学习战略层能力

论据 / 案例:迪克斯特拉论软件最复杂;把新人当代理的培训法;柏拉图担心写作让人变蠢的名言;周末写汇编的类比;1500人同时观看

金句

  • “它们可能很快,可能相对聪明,但它们和人类一样会遇到混乱的代码。”
  • “我会非常努力达到无需查看代码的地步,完全信任它们的操作。”
  • “强加人类纪律可能是错误的。向代理灌输人类价值观并无错误,但可能需要调整某些阈值。”
  • “软件是人类尝试过的最复杂的事物……基础原理是组织这种复杂性的方法,使其可被构想——不仅对人类,也对我们的模型而言。”
  • “你扔掉的规则,一年后你会从地上捡起来,擦拭并记住为何需要它们。”

原文链接

查看完整访谈

完整内容见原文:ChHsich · Uncle Bob:代理时代,代码为何仍要整洁