Skip to content

第 2 章:复杂度的本质

系列:软件设计的哲学 · 第 2/22 章
全书导读:00-overview.md


一句话总结

复杂度是理解与修改的负担,由依赖模糊累积而成,且几乎只会增不会减。


核心观点浓缩

  • 复杂度是主观体验:对熟手简单、对新人地狱,仍须为「下一任维护者」优化
  • 三大症状:变更放大认知负荷未知未知(改完不知还缺什么)
  • 两大成因:依赖(改 A 必动 B)与模糊(代码未说清楚意图与约束)
  • 复杂度增量累积:每次「先凑合」都加一点,复利可怕
  • 消除已有复杂度很难;预防比事后重构便宜一个数量级

关键概念 / 金句

症状表现
Change amplification小需求牵动大量文件
Cognitive load读者需记住过多上下文才能改一行
Unknown unknowns改完不敢上线,因影响面不清

「复杂度不会自己消失;你每次妥协都在给未来交税。」


本章在全书中的位置

第 2 章是全书度量衡:后文深模块、信息隐藏、分层等,都是降复杂度的手段。没有统一「复杂度」定义,讨论设计容易滑向口味之争。


个人思考与启发

「未知未知」在插件化桌面软件里最常见:改 Session 导出逻辑,却触发 IO 插件与云上传的隐式顺序依赖。症状不是 bug,而是没人能画全依赖图。此时应优先砍依赖、封接口,而非加集成测试了事。


与《程序员修炼之道》对照

  • 软件熵与复杂度增量累积:同一现象,本书给出更可操作的诊断表
  • DRY 减少重复依赖,直接对抗变更放大
  • 「正交」即模块间低依赖——与本书依赖成因论一致

重点与注意

重点:用症状自检系统,比争论「这代码丑不丑」有用。
重点:依赖与模糊是根因,重构应朝这两刀砍。
注意:不能因「反正只有我一个人懂」而放任复杂度——未来的你也是新人。
注意:性能、安全等问题最终也体现为复杂度,勿拆成对立目标。


导航第 1 章 引言 · 下一篇:第 3 章 能跑还不够

基于 VitePress 强力驱动 | 记录技术与生活