乐于分享
好东西不私藏

软件之熵

软件之熵
糟糕的代码很廉价,优秀的软件设计比以往更加重要。

一、软件熵:从Brooks到AI时代

在传统软件工程中,软件熵是一个令人沮丧却真实存在的规律:每一次修改,系统的无序度都会倾向增加。

这种无序,体现为:

  • 模块耦合加深
  • 隐式依赖增多
  • 边界逐渐模糊
  • 缺陷越来越难预测

AI 确实降低了代码生成成本,但它同样降低了“生成糟糕代码”的门槛。当代码变得极其廉价时,熵增反而可能被进一步放大。

大模型出现后,生成代码的边际成本暴跌。但低成本≠低熵。恰恰相反:如图一所示,AI 默认倾向于生成局部正确、全局松散的浅层代码,它们函数庞杂、责任不清、边界模糊。如果人的角色从构建者退化为接受者,熵将以指数级增长。

  • 反馈的速度就是你速度的上限。

  • 如果反馈来自生产环境的崩溃,那你的速度上限就是崩溃的速度。

图一 浅层模块

为什么 AI 偏爱浅层模块?

  • 训练数据中充斥着这类上帝类或工具箱类

  • 生成一个职责单一但边界清晰的深层模块,需要全局理解,AI 天然欠缺

  • 浅层模块允许 AI 一次只生成一个小函数,看似安全,实则让调用方必须理解全部细节

熵在浅层模块间的连接处疯狂滋长:修改一个函数可能影响 30 个调用点,没有人(包括 AI)能安全预测影响范围。

二、逆转熵增:深层模块 + TDD

深层模块的定义(John Ousterhout 在《A Philosophy of Software Design》中提出):

  • 模块提供简单接口,但内部完成复杂工作。

  • 深层模块的价值 = 接口复杂度 vs 功能复杂度,比值越低越深。

如图二所示,在大模型驱动开发中,深层模块是天然的抗熵单元:

  • 接口少:AI 生成调用代码时不易出错

  • 边界清晰:修改内部实现不影响外部

  • 可单独测试:测试一个深层模块的接口,比测试 20 个浅层函数组合要可靠得多

图二 深层模块

而TDD的关键,在于控制AI的反馈速率。如果不加约束,AI会以outrunning its headlights的速度大批量生成代码,导致最终产物不可用。Pocock认为反馈速率就是你的速度限制,而TDD要求的写失败测试 、让测试通过 、重构的短周期循环,恰好将反馈周期缩到最短(及时纠错),让AI始终在可控的轨道上运行。

三、比以往更疲惫的开发

浅层模块的代码库正让开发者和AI双双陷入疲惫(作者最近也有深深的体会)。 当AI快速生成大量功能正确但边界模糊、逻辑脆弱的代码时,开发者不得不在反复调试和审查中消耗远超预期的精力。问题不在AI,而在于我们缺少清晰的分工边界。

战略层面需要明确:人负责顶层架构、安全边界和测试合约,AI负责非关键模块的内部实现。 尤其集成测试与业务边缘场景必须由人把控,因为AI无法感知真实的业务规则与基础设施风险。同时,浅层模块催生了认知债务算法膨胀等新型技术债务。

最终,开发者要从写代码转向教AI写代码。 把可批量生成的样板逻辑交给AI,把创造力与所有权集中在架构设计、边界防御和多环境集成上。唯有重新划定人机分工,才能将消耗式疲惫转化为系统价值。

参考:

Pocock, M. (2026, April 23). Software Fundamentals Matter More Than Ever [Video]. YouTube. https://youtube.com/watch?v=v4F1gFy-hqg