小马的世界
//Pony's World
联系我|Contact Me 👉
小马的世界

读书笔记-软件设计的哲学【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

读书笔记-软件设计的哲学【3】仅仅“能跑的代码”是不够的

2026-01-19
(战略性编程 vs. 战术性编程) 优秀软件设计中最重要的因素之一,是你在面对编程任务时所采用的思维方式。许多组织鼓励一种战术性思维:尽可能快地把功能做出来。然而,如果你想要一个真正好的设计,就必须采取一种更具战略性的方法,愿意投入时间来打...
阅读更多|Read more

读书笔记-软件设计的哲学【2】复杂性的本质

2026-01-19
本书讨论的是如何设计软件系统,以尽量降低它们的复杂性。第一步是理解敌人:到底什么是“复杂性”?如何判断一个系统是否不必要地复杂?是什么导致系统变得复杂?本章将在较高的层面上回答这些问题;后续章节将从更低的层次、以具体结构特征的形式,向你展示...
阅读更多|Read more

【更新中】使用git+ansible管理和同步我的dotfile

2025-04-06

工作中接触Autoware比较多,看到Autoware使用ansible配置和安装各种依赖和软件,非常的方便高效,那我这种时不时的就会重装系统的,而且在Ubuntu和Mac下都有作业需求的人,是不是也可以搞一个ansible来同步和配置我的dotfile,同时用github actions进行CI/CD?正好趁着最近学习ansible和github actions,在这里记录一下我的折腾历程。

阅读更多|Read more