软件为何越做越乱?万字长文讲透软件的”复杂性”

一句话概括

借「限时折扣一年补丁风暴」故事讲透复杂性三大表现(变更放大、认知负荷、未知的未知)与两大根因(依赖、晦涩),主张投入 10-20% 时间持续优化设计。

实践内容

复杂性三大表现

  1. 变更放大 —— 一个小改动需要修改多个地方
  2. 认知负荷 —— 开发者需要理解太多东西
  3. 未知的未知 —— 不知道什么会影响什么

复杂性两大根因

  1. 依赖 —— 模块之间的耦合
  2. 晦涩 —— 代码难以理解

管理复杂性的核心方法

  1. 接口/实现分离 —— 隐藏实现细节
  2. 深模块 —— 简单接口隐藏强大功能(如垃圾回收器)
  3. 信息隐藏 —— 对抗信息泄漏
  4. 警惕时间分解 —— 时间耦合也是依赖
  5. 「有点通用」优于过度专用 —— 适度抽象
  6. 分层抽象 —— 每层只关注本层逻辑

战术编程 vs 战略编程

  • 战术编程:快速修复,增加复杂度
  • 战略编程:投入 10-20% 时间持续优化设计

摘录

借「限时折扣一年补丁风暴」故事讲透复杂性三大表现(变更放大、认知负荷、未知的未知)与两大根因(依赖、晦涩),对比战术编程与战略编程,主张投入 10-20% 时间持续优化设计。

管理复杂性的核心方法:接口/实现分离、深模块(简单接口隐藏强大功能,如垃圾回收器)、信息隐藏对抗信息泄漏、警惕时间分解、「有点通用」优于过度专用、分层抽象。

涉及实体

  • Claude-Code —— Claude Code 的设计也遵循了这些原则

涉及主题

  • []

我的评注

这篇文章虽然不是专门讲 AI 的,但其复杂性管理思想对 AI Agent 系统设计同样适用。“深模块”(简单接口隐藏强大功能)的原则在 Claude Code 的工具设计中体现得很明显——Read、Write、Edit 等工具的接口很简单,但实现很复杂。