尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

AI 时代,软件基本功真的过时了吗?——Uncle Bob 的实战经验与深度思考

AI 时代,软件基本功真的过时了吗?——Uncle Bob 的实战经验与深度思考 AI 时代软件基本功真的过时了吗——Uncle Bob 的实战经验与深度思考当 AI Agent 能在一分钟内写出上百行代码我们还需要关心圈复杂度、模块设计、测试覆盖率吗《代码整洁之道》作者 Robert C. MartinUncle Bob在一次直播中给出了他的答案并用一套完整的 Agent 流水线证明软件基本功不仅没有过时反而是驾驭 AI 的关键。一、背景一场跨越半个世纪的对话2026 年初TypeScript 专家 Matt Pocock 邀请 Uncle Bob 进行了一场深度对谈。Bob 从 12 岁开始编程1964 年至今仍活跃在一线。他在 2023 年底开始认真使用 AI Agent并在短短几个月内构建了一套令人惊叹的多 Agent 协作系统。本文将从技术角度拆解 Bob 的核心观点与实践探讨 AI 时代软件工程的基本原则为何依然重要以及我们该如何调整策略。二、AI Agent 的混乱与速度悖论2.1 Agent 的典型问题快速制造混乱Bob 坦言早期使用 Agent 时它就像一个快速拉屎的小狗——写得很快但留下一堆垃圾。更致命的是当混乱累积到一定程度Agent 自己也会被困住它会陷入修 A 破坏 B → 修 B 又破坏 A的死循环甚至直接放弃。这背后的技术原因是Agent 的上下文窗口有限且存在迷失在中间效应。当代码库变得杂乱Agent 无法在有限上下文中理解全局其推理能力急剧下降。2.2 解决方案用确定性工具替代模糊指令Bob 的做法是不再试图用长篇规则约束 Agent而是使用确定性工具进行事后检查。方法缺点在 prompt 中写 10 页规则Agent 会遗忘中间部分将其视为建议而非命令使用静态分析 / 变异测试工具工具不受上下文长度影响结果确定Agent 必须服从例如Bob 引入CRAP 指标代码复杂度与覆盖率的综合评分和变异测试让 Agent 在完成任务后自动运行这些检查若不达标则必须修复。技术要点CRAP (圈复杂度²) × (1 - 覆盖率)³ 圈复杂度。Bob 对 Human 设定阈值为 4对 Agent 放宽至 6~8但前提是覆盖率必须达到 100%。三、五道 Agent 流水线从混乱到可靠Bob 设计了一套高度结构化的多 Agent 流水线每个 Agent 只负责一个明确任务上下文窗口短小从而避免了迷失在中间。[规范器] → [编码器] → [清理器] → [硬化器] → [QA Agent]3.1 规范器Specifier输入人类编写的需求文档自然语言输出Gherkin 格式的高层验收测试Given-When-ThenQA 流程文档面向用户的操作步骤3.2 编码器Coder任务根据 Gherkin 编写单元测试和实现代码使场景通过特点不追求完美允许留下混乱3.3 清理器Cleaner任务静态分析、代码审查、重构工具ESLint、SonarQube、自定义复杂度检查目标降低 CRAP 分数拆分过长函数消除重复3.4 硬化器Hardener核心武器变异测试原理自动翻转源码中的符号→、→!等运行测试套件若测试未失败则说明变异体存活代表测试不足Bob 的经验以前跑一夜现在 Agent 只需 30 分钟3.5 QA Agent任务将 QA 文档转化为可执行脚本模拟真实用户操作输出确定性测试结果效率对比单个 Agent 5 分钟完成但不可靠完整流水线约 1 小时但质量极高相当于人类半天的产出生产力提升 4~5 倍。四、模块设计Agent 也需要深模块4.1 什么是深模块John Ousterhout 在《A Philosophy of Software Design》中提出深模块指接口小而功能强大的模块浅模块则接口大但隐藏信息少。Bob 发现Agent 在处理深模块时表现远优于浅模块。因为 Agent 只需要理解接口契约无需关心内部实现细节这大大降低了上下文负担。4.2 如何确保模块结构良好Bob 开发了一个架构查看器能自动生成 UML 图并配合一个确定性依赖规则工具# 依赖规则示例rules:-from:domainto:[infrastructure,application]direction:inward# 依赖指向核心层-from:infrastructureto:[]# 基础设施不能反向依赖Agent 若违反规则工具会阻止提交并要求修复如反转依赖、插入接口。五、TDD 与 Agent该不该强制5.1 人类 TDD ≠ Agent TDDBob 明确指出TDD 是人类认知局限的产物先写测试将问题锁定在短期记忆中。Agent 的短期记忆远超人类强行模仿人类 TDD 节奏写一行测试→写一行代码毫无意义。5.2 正确的做法灌输价值观而非纪律✅ 允许 Agent 先写完整函数再为其编写测试✅ 要求最终覆盖率达标通过硬化器强制执行❌ 强制要求测试先行的步骤顺序核心原则强加人类纪律可能是错误的但向 Agent 灌输人类价值观并没有错。六、战略 vs. 战术人类的新角色6.1 Agent 擅长战术人类负责战略战术编程解决眼前具体问题Agent 的强项战略编程决定整体方向、模块划分、技术选型人类主导6.2 新人如何成长Bob 提出了一个有趣的训练方案先学底层从二进制、汇编、C 语言开始理解计算机本质成为 Agent 的下属让新人接手 Agent 的任务使用相同的确定性工具体验 Agent 的局限性阅读经典《代码整洁之道》《务实的程序员》《人月神话》等汲取战略思维逐步授权经过数月训练后才允许新人管理自己的 Agent警示如果完全依赖 Agent 写代码而不理解底层你可能会在关键时刻无法诊断问题——就像只会用高级语言却不理解内存泄漏的开发者。七、常见误区与反思7.1 误区一前期规划越详细越好Bob 直言先计划再交给 Agent 执行是瀑布模型的翻版。计划永远赶不上变化Agent 在执行中会发现未预见的依赖或冲突。正确做法是让 Agent 先跑几个 Story获取反馈再调整架构。7.2 误区二规范驱动开发Spec-Driven Dev这个词很容易被滥用。Bob 认为规范应该是短暂的、可变的。真正的规范是最终生成的代码本身。与其维护一份永不更新的规范文档不如让 Agent 产出结果后人类根据结果调整后续方向。7.3 误区三自动化检查越多越好过多的检查会拖慢 Agent使其效率低于人类。Bob 的经验是只要 Agent 仍比人类快 2~4 倍检查就是值得的。一旦接近平衡点就需要优化检查流程。八、结语基础原理永不过时回顾软件发展史从二进制到汇编从汇编到高级语言再到今天的 AI Agent每一次抽象层提升都伴随着基础无用论的喧嚣。但事实是抽象层越高底层原理越容易被忽视也越致命模块化、测试、复杂度控制、清晰接口——这些原则既服务于人类也服务于模型正如 Bob 所说“你今天扔掉的规则一年后可能会从地上把它捡起来掸掉灰尘然后想起当初为什么需要它。”AI 不会淘汰软件工程师但会淘汰那些放弃基本功的工程师。本文基于 Matt Pocock 与 Uncle Bob 的直播对话整理并结合相关技术概念进行了扩展。如果你想深入了解 CRAP 指标、变异测试或深模块设计欢迎留言讨论。
返回列表