A PHILOSOPHY OF SOFTWARE DESIGN · 2ND EDITION · 中文学习伴侣

读懂不难,
难的是写代码时认得出来

John Ousterhout 的《软件设计的哲学》讲的不是知识,而是判断力:什么样的模块是深的,哪里在泄漏信息,这个异常能不能干脆不存在。本站陪你读原书 22 章,用几百道原创 C/C++ 题练眼力,再在一个故意写得很"战术"的键值存储里亲手重构。

三层学法

读前导读,读原书

每章页面先给一个关键问题和"读原书时留意"的三个点。带着问题读原书,读完回来看核心观点、反方与边界,做自测。

从第 1 章开始 →

训练场:练眼力

认红旗、比较两种设计、先自己写再对照参考。答题按掌握程度安排间隔复习,每天 10 分钟。

进入训练场 →

项目:动手重构

minikv 是一个能跑、有测试、但设计很"战术"的 C++ 键值存储。8 个任务对应全书各章,每个都有参考解答和讨论。

看项目 →

速查与专题

14 个红旗、16 条原则、设计评审清单;以及与 Clean Code 的分歧、与 OSTEP 的对照、AI 时代怎么读这本书。

速查页 →

全书地图

这本书只讲一件事:复杂性。前三章定义敌人并给出心态,第 4~11 章是"把模块做深"的各种手段,第 12~18 章处理"模糊"(注释、命名、一致性),最后三章谈趋势、性能和品味。点击节点进入章节,读完的会变绿。

延伸

APOSD 与 Clean Code

Ousterhout 与 Robert Martin 在函数长度、注释、TDD 上的分歧,各自的理由,和本站的看法。

与 OSTEP 对照阅读

Unix I/O 为什么是深接口、NFS 为什么"卡住重试"、巫毒常量和配置参数……两本书原来在说同一件事。

AI 时代读这本书

代码越来越便宜,什么变得更贵?用红旗清单审查 AI 写的代码。

设计评审清单

按"设计接口 / 写实现 / 写注释 / 改代码 / 评审"分组,可以打印出来放在手边。

书外的作者(均为站外链接,本站只指路):


原书:John Ousterhout,A Philosophy of Software Design, 2nd Edition(Yaknyam Press,2021)。本站是个人学习用的辅助材料,不是原书的翻译或替代:所有讲解、代码与题目都是本站原创,书中观点以原书为准,请阅读原书。学习进度和答题记录只保存在你的浏览器里。