第 4 章:务实的偏执
系列:程序员修炼之道 · 第 4/9 章
一句话总结
在不可靠的世界里偏执地自我保护:用契约澄清假设、用崩溃与断言尽早暴露错误、平衡资源、别优化看不见的未来。
核心观点浓缩
- 契约式设计:前置/后置条件、类不变量文档化
- 早崩溃(Fail Fast):非法状态立即失败,不传播脏数据
- 断言式编程:调试期抓住「绝不应发生」;与错误处理分工
- 资源平衡:谁分配谁释放;RAII、智能指针
- 不要冲出前灯范围:只优化/profile 证实的热点;拒绝占卜式优化
- 死程序不说谎:崩溃优于静默错误
关键概念 / 金句
| 概念 | 要点 |
|---|---|
| Design by Contract | 接口即承诺 |
| Assert vs 错误处理 | 绝不应发生 vs 可能发生 |
| 前灯 | 可见范围内的决策与优化 |
本章在全书中的位置
连接「设计原则」与「可靠实现」。第 7 章测试与之叠加;第 5 章可撤销减轻偏执成本。
个人思考与启发
连接预检失败应明确失败并记录,而非带着半连接状态继续扫描。Q_ASSERT / vtkAssertMacro 在 Debug 构建抓住不变量;Release 用日志 + 用户可理解错误信息。
C++ RAII 管理 VTK/Qt 对象生命周期,避免泄漏与重复释放。
与《软件设计的哲学》对照
- Define errors out of existence(Ousterhout):从设计上让非法状态难产生;与契约、早崩溃同向
- 断言失败说明接口或不变量设计可能有问题,值得回溯模块边界
- 不要冲出前灯 ↔ 性能章「先 profile」一致
重点与注意
重点:早崩溃优于静默错误,尤其数据管线与网络连接。
重点:断言用于不变量,异常/错误码用于可恢复失败。
重点:资源所有权清晰;C++ 优先 RAII。
注意:生产环境断言行为需与发布策略一致(NDEBUG)。
注意:偏执不等于到处throw;用户可恢复的错误要友好提示。
导航:上一篇:第 3 章 · 下一篇:第 5 章 宁弯不折