软件为何越做越乱?万字长文讲透软件的”复杂性”
一句话概括
借「限时折扣一年补丁风暴」故事讲透复杂性三大表现(变更放大、认知负荷、未知的未知)与两大根因(依赖、晦涩),主张投入 10-20% 时间持续优化设计。
实践内容
复杂性三大表现
- 变更放大 —— 一个小改动需要修改多个地方
- 认知负荷 —— 开发者需要理解太多东西
- 未知的未知 —— 不知道什么会影响什么
复杂性两大根因
- 依赖 —— 模块之间的耦合
- 晦涩 —— 代码难以理解
管理复杂性的核心方法
- 接口/实现分离 —— 隐藏实现细节
- 深模块 —— 简单接口隐藏强大功能(如垃圾回收器)
- 信息隐藏 —— 对抗信息泄漏
- 警惕时间分解 —— 时间耦合也是依赖
- 「有点通用」优于过度专用 —— 适度抽象
- 分层抽象 —— 每层只关注本层逻辑
战术编程 vs 战略编程
- 战术编程:快速修复,增加复杂度
- 战略编程:投入 10-20% 时间持续优化设计
摘录
借「限时折扣一年补丁风暴」故事讲透复杂性三大表现(变更放大、认知负荷、未知的未知)与两大根因(依赖、晦涩),对比战术编程与战略编程,主张投入 10-20% 时间持续优化设计。
管理复杂性的核心方法:接口/实现分离、深模块(简单接口隐藏强大功能,如垃圾回收器)、信息隐藏对抗信息泄漏、警惕时间分解、「有点通用」优于过度专用、分层抽象。
涉及实体
- Claude-Code —— Claude Code 的设计也遵循了这些原则
涉及主题
- []
我的评注
这篇文章虽然不是专门讲 AI 的,但其复杂性管理思想对 AI Agent 系统设计同样适用。“深模块”(简单接口隐藏强大功能)的原则在 Claude Code 的工具设计中体现得很明显——Read、Write、Edit 等工具的接口很简单,但实现很复杂。