整洁且能工作的代码——增强编程保留了传统软件工程的全部标准,同时利用 AI 来更高效地达到这些标准。
—— Kent Beck
项目动机与目标
MOTIVATION AND PROJECT SCOPE
本页要点
Beck 选择重新挑战 B+ Tree 这一经典数据结构,将项目范围从完整数据库缩减为单一的 B+ Tree 库。目标有两个:产出可上线的代码,并在过程中学会 Rust。
Kent Beck
我回忆起过去那些技术上超出自己能力范围的项目——有些半途而废,有些勉强完成但心里总不满意。这次我最初的设想是用 AI 构建一个专用数据库引擎,但着手之后很快意识到一个关键问题:我对 B+ Tree 的理解远不够深入,无法给 AI 有效的设计指导。于是我把范围缩减到只做 B+ Tree 库这一块——它足够复杂,能真正检验增强编程的极限,同时又足够聚焦,不会让项目失控。
本页要点
Python 版本的 B+ Tree 在性能上存在先天劣势。Beck 让 AI 生成了一个 C 扩展,将关键操作的性能提升到接近 Python 内置数据结构的水平,几乎消除了性能差距。
Kent Beck
Python 版本跑通之后,AI 建议说可以写一个 C 扩展来让 Python 版本达到有竞争力的性能。听到这个建议的瞬间,我的肩膀都垮了——写 C 扩展?但紧接着我意识到:这活不用我来干!AI 写了 C 扩展,结果相当惊人:加上 C 扩展后的性能几乎和 Python 内置的数据结构一样快,性能差距基本消失了。
Kent Beck
这件事说明了一个有趣的现象:AI 可以在多个技术层级上工作。从高层的 Python 算法设计,到底层的 C 性能优化,你可以在同一个项目中灵活切换。以前这种跨层级的开发需要完全不同的技能集,现在 AI 把这个门槛大幅降低了。
琐碎配置工作彻底消失了
YAK SHAVING BASICALLY DISAPPEARED
本页要点
曾经需要几小时处理的Yak Shaving——那些和核心任务无关的环境配置和工具链问题——在 AI 辅助下几乎消失了。AI 还能主动运行覆盖率测试工具并提出新测试建议。
Kent Beck
Yak Shaving 基本消失了。以前你想改一个功能,结果发现要先配置 CI/CD,然后要更新 ESLint 规则,然后要解决一个依赖冲突……两个小时后你才回到最初的任务。现在?直接告诉 AI 去处理这些琐事就行了。
整个 B+ Tree 项目前后花了大约四周时间。其中大部分时间是在旅途中或脑震荡恢复期完成的——这本身就说明了增强编程的低门槛。有一天我连续编程了13个小时,完全停不下来。这东西真的会上瘾(addictive)!当你每一分钟都在做有趣的决策,而不是和工具链搏斗时,时间过得飞快。
~4
周总时长
~13h
单日最高时长
3
次迭代
稳定
每小时提交率
这东西真的会上瘾。
—— Kent Beck
原理与过程补充解析(上)
DEEPER ANALYSIS - PART 1
1. 为什么 TDD 在 AI 时代比以往更加重要
如果没有 TDD,AI 生成的代码就像没有合同的外包——你不知道它是否真正满足需求。测试就是合同:它用代码的形式定义了什么叫「完成」。Beck 的三次迭代清楚地证明了这一点:前两次失败的根本原因不是 AI 不够聪明,而是缺乏严格的测试约束,导致 AI 在没有边界的情况下不断膨胀代码。第三次成功,恰恰是因为 TDD 为 AI 划定了严格的行为边界。
2. Python→Rust 翻译策略背后的元逻辑 LLM 在不同编程语言上的能力差异很大——它在 Python 上的训练数据远多于 Rust,因此用 Python 编程时更稳定、更少犯错。Beck 的策略本质上是利用了 AI 的能力分布差异:先用 AI 最擅长的语言完成最困难的部分(算法设计),再借助 AI 的跨语言翻译能力迁移到目标语言。这是一种值得广泛应用的元策略。
3. Rust 的所有权系统为何让 AI 犯难 Rust 的所有权系统要求每一块内存在任何时刻只有一个「所有者」,借用检查器在编译期就会阻止违规操作。这个机制对于简单的数据结构问题不大,但 B+ Tree 需要在节点之间频繁移动和共享数据——分裂、合并、平衡操作涉及复杂的所有权转移。AI 往往在同时处理算法逻辑和所有权规则时顾此失彼,导致编译错误或过度使用不安全代码。
5. 增强编程与氛围编程的本质区别 氛围编程的哲学是放手让 AI 自由发挥,开发者只关心结果是否符合预期。增强编程的哲学是用工程纪律来约束 AI 的行为,确保产出的代码不仅能工作,还能长期维护。两者不是非此即彼的——Beck 的洞察在于:探索阶段可以用氛围编程来快速试错,但一旦进入生产开发阶段,就必须切换到增强编程的严格模式。
6. 「每小时更多有意义的决策」到底意味着什么
编程的核心本质不是打字——而是决策。每一行代码背后都隐含着一个设计选择。当 AI 消除了Yak Shaving和样板代码的负担后,开发者可以把全部认知资源投入到高价值决策上:架构选择、接口设计、性能权衡、抽象层次的取舍。这不是「AI 替代人类」的故事,而是「AI 让人类重新回归编程本质」的故事。
7. C 扩展案例揭示的多层级 AI 开发模式
Beck 在同一个项目中让 AI 工作在三个技术层级:高层的 Python 算法设计、中层的 Rust 系统编程、底层的 C 扩展性能优化。这种跨层级的灵活切换在过去需要三套截然不同的技能,现在 AI 大幅降低了这个门槛。这暗示着未来的软件开发可能会更加频繁地混合使用不同层级的工具和语言。
8. 社区讨论:工匠精神的消亡与新生
Beck 的文章引发了活跃的社区讨论。有读者表达了对 LLM 生成代码的抵触,认为逐渐失去了对代码的手感和工匠精神。也有开发者分享了自己做的 TDD 可视化浏览器扩展——用颜色标记来区分红、绿、重构三个阶段的提交。这种工具让红绿重构的节奏可视化呈现,帮助团队更直观地理解 AI 辅助开发的过程。
让 AI 分析你的成果
AI AS YOUR ANALYST
本页要点
Beck 发现 AI 不仅擅长写代码,还擅长分析代码。当你准备好反思自己的工作成果时,AI 可以提供深入的分析视角——帮你发现自己忽略的模式、评估架构决策、量化代码质量。
Kent Beck
当你准备好反思自己的工作时,AI 很乐意帮你做分析。我让 AI 审视整个 BPlusTree3 项目的代码库——它能从宏观层面指出架构上的模式和反模式,从微观层面指出具体函数的改进空间。这种「AI 作为分析师」的角色和「AI 作为程序员」的角色完全不同,但同样有价值。