1
系统设计黄金法则:简单之美
包云岗 (baoyungang@gmail.com)
2012.4.22
最近多次看到系统设计与实现的文章与讨论,再加上以前读过的其他资料以及自己的一些实践
教训,让我觉得应该把这些资料汇总整理一下。如果要从讨论不同系统的众多资料中总结一条
黄金法则的话,那只有一个词——“简单”;如果用一个英语单词来表达的话,那就是——
KISS (Keep It Simple, Stupid!)。
1. 麻省理工方法与新泽西方法(MIT Approach vs. New Jersey Approach)【1】【2】
这个观点来自一篇很经典的文章,Richard Gabriel 在 1989 年写的文章中的一节“The Rise of
'Worse is Better'”。说来惭愧,我是直到 2011 年 5 月在 IBM T.J. Watson 实验室听报告才第一
次听说,当时便印象深刻。后来上普林斯顿的高级系统设计课程,发现这篇文章也在 Reading List
中,要求所有学生阅读然后在课上讨论。
“The Rise of 'Worse is Better”对比了以 LISP 系统为代表的麻省理工方法和以 Unix/C 为代表的
新泽西(贝尔实验室)方法。Gabriel 发现相比于 LISP/CLOS 系统完美的设计,Unix/C 只是一味追
求实现简单,但事实却证明 Unix/C 像终极计算机病毒那样快速蔓延,奠定了今天计算机系统
的基础。
让我们来看看这两种不同的设计哲学。
1)MIT Approach
简单性:设计必须简单,这既是对实现的要求,也是对接口的要求。接口的简单要比实
现的简单更加重要。
正确性:设计在任何值得注意的方面都要保证正确。不正确是绝对不允许的。
一致性:设计必须保持一致兼容。设计可以允许轻微少量的不简单和不完整,来避免不
一致。一致性和正确性同等重要。
完整性:设计必须覆盖到实际应用的各种重要场景。所有可预料到的情况都必须覆盖到。
简单性不能过度的损害完整性。
2)New Jersey Approach
简单性:设计必须简单,这既是对实现的要求,也是对接口的要求。实现的简单要比接
口的简单更加重要。简单是设计中需要第一重视的因素。
正确性:设计在任何值得注意的方面都要求正确。为了简单性,正确性可以做轻微的让
步。