Home
Archives
Tags
About Ma
RSS
读书笔记-软件设计的哲学【12】为什么要写注释?四种借口
2026-06-21
代码中的文档(in-code documentation)在软件设计中扮演着至关重要的角色。注释不仅能够帮助开发者理解系统并高效工作,其价值还远不止于此。文档对于抽象(abstraction)同样至关重要;如果没有注释,你就无法隐藏复杂性。...
阅读更多|Read more
读书笔记-软件设计的哲学【11】设计两次
2026-06-21
软件设计是一件困难的事情,因此你第一次想到的模块或系统结构方案,极不可能就是最佳设计。对于每一个重要的设计决策,如果能够认真考虑多个备选方案,你最终往往会得到更好的结果: 设计两次(design it twice)。 假设你正在为一个 GU...
阅读更多|Read more
读书笔记-软件设计的哲学【10】让错误不再成为“特殊情况”
2026-06-07
异常处理(Exception Handling)是软件系统复杂性的最主要来源之一。处理特殊情况的代码,本质上比处理正常情况的代码更难编写;而开发人员往往在定义异常时,并没有充分考虑这些异常将如何被处理。 本章将讨论为什么异常会对系统复杂度产...
阅读更多|Read more
读书笔记-软件设计的哲学【9】一起更好,还是分开更好?
2026-06-01
软件设计中最根本的问题之一是:给定两项功能,它们应该在同一个地方一起实现,还是应该分别实现? 这个问题适用于系统中的所有层次,例如函数、方法、类以及服务。 例如: 缓冲(buffering)功能应该包含在提供流式文件 I/O 的类中吗? ...
阅读更多|Read more
读书笔记-软件设计的哲学【8】向下拉取复杂度
2026-05-31
本章介绍了一种关于如何构建“更深层(deeper)类”的思考方式。 假设正在开发一个新的模块,并发现其中存在某些无法避免的复杂性。那么,更好的做法是什么?是让模块的使用者去处理这些复杂性,还是由模块在内部自行消化这些复杂性?如果这些复杂性与...
阅读更多|Read more
读书笔记-软件设计的哲学【7】不同层,不同抽象
2026-05-26
软件系统是由多层组成的,高层使用低层提供的能力。 在一个设计良好的系统中,每一层都会提供一种不同于其上下层的抽象;如果你跟踪一个操作在层之间通过方法调用不断向上、向下流动的过程,你会发现抽象会随着每一次方法调用而发生变化。 例如: 在文...
阅读更多|Read more
读书笔记-软件设计的哲学【6】通用模块越“通用”,层次就越深
2026-05-25
“专门化”往往会带来复杂性。过度专门化,可能是软件复杂度最大的来源之一。相反,更通用的代码通常会更简单、更干净,也更容易理解。 这个原则适用于软件设计中的很多层面。 例如,在设计类或方法这样的模块时,构建“深层 API(deep API)”...
阅读更多|Read more
源码理解Autoware Freespace Planner
2026-04-12
在 lane driving 场景里,路径规划大多是沿着车道中心线、参考路线、行为决策结果往下做,问题虽然复杂,但“路”本身是明确的。 停车场景不是这样。你可能需要: 倒车入库 在狭窄区域多把挪车 从一个姿态精确切到另一个姿态 在没有明确...
阅读更多|Read more
读书笔记-软件设计的哲学【5】信息隐藏(以及泄露)
2026-02-15
5.1 信息隐藏 实现深模块最重要的技术之一是信息隐藏(information hiding)。这一技术最早由 David Parnas 在一篇经典论文中提出。其基本思想是:每个模块应封装少量知识,这些知识代表设计决策。这些知识嵌入在模块的...
阅读更多|Read more
读书笔记-软件设计的哲学【4】模块应该是“深”的(Modules Should Be Deep)
2026-01-19
管理软件复杂性最重要的技术之一,是在设计系统时,让开发者在任何给定时刻只需要面对系统整体复杂性的一小部分。这种方法称为模块化设计(modular design),本章将介绍其基本原则。 4.1 模块化设计(Modular design) 在...
阅读更多|Read more
上一页|Last
下一页|Next