软件工程哲学中最重要的一课
| simple | easy |
|---|---|
| 词源:Simplex,单折、这一股 | 词源:临近(Adjacent / Lying near) |
| 反义词:Complex (复杂),词源 Complex,编织在一起 | 反义词:Hard (困难) |
| 定义:没有交织(Interleaving)。它只有一个角色,完成一个任务,关注一个概念。 | 定义:物理上的临近:触手可及。认知上的临近:熟悉(Familiar)。 |
| 客观的、原语、原子化的,组合是定义简单的关键。 | 相对的,简单的方法是完成某件事最快的方法。 |
| Complex | Simple |
|---|---|
| 状态 (State):极其复杂的,它把“值”和“时间”纠缠在一起。 | 值 Values(不可变数据)是简单的。 |
| Object 纠缠了状态、标识和值 | Data(Map, List, Set)是透明且通用的。 |
| 方法纠缠了函数逻辑与状态。 | 函数 |
| 继承将类型耦合在一起,是典型的编织。 | 组合/多态 (Polymorphism à la carte) |
| 与其发明复杂的语法,不如直接用数据结构来表达逻辑。 | 数据 (Data) |
这里说说复杂。

Rich 复活了一个古词:**Complect,**意思是把东西编织、纠缠在一起。
模块化不等于简单:你把代码分成了很多模块,但如果它们之间逻辑紧密纠缠,那依然是一团乱麻。