Skip to content

第 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 章 宁弯不折

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