Basics of the Unix Philosophy
本文是 TAOCP 的第一章,讲的是 十几条 Unix 哲学。Unix 哲学的目标是设计出小而有用的操作系统,同时服务接口还特别干净。Unix 哲学是 bottom-up 的,如果用一句话来概述,那边是 KISS: keep it simple, stuipd.
这篇文章介绍了好几套说法,包括 Doug McIlroy, Rob Pike,以及作者自己(Eric Steven Raymond)整理的说法。
- Doug McIlroy: 做一件事,做好它。 程序应该只关注一个目标,并尽可能把它做好。让程序能够互相协同工作。应该让程序处理文本数据流,因为这是一个通用的接口。
- Rob Pike: 不要优化代码除非经过测量找到了瓶颈;简单的算法和数据结构在小数据场景下又好用有快,即便你用的是穷举。尽早创建原型。
- Eric Steven Raymond:
- Rule of Modularity: 使用干净的接口,将简单的程序连接起来。
- Rule of Clarity:代码让人很清晰地看懂在干什么。
- Rule of Composition:写与其他程序轻松通信的程序。
- Rule of Separation:分离 policy v/s machanism; 分离 interfaces v/s engine。还是关于接口衍生出来的一个规则。
- Rule of Simplicity / Rule of Parsimony:复杂意味着容易出错,应该考虑写简单的程序,寻找方法将它们连接起来。
- Rule of Transparency: 让 inspect & debug 变简单
- Rule of Robustness: 让程序变得健壮
- Rule of Representation:设计好数据结构,这样可以让代码逻辑变简单。
- Rule of Least Surprise:不要做让人们觉得诧异的设计。
- Rule of Silence:程序如果没法要紧事发生,就让它运行着好了,不要输出什么东西出来。
- Rule of Repair:不得不崩溃的时候,尽早崩溃,带上足够的信息。
- Rule of Economy:相比机器时间,程序员的时间更宝贵。
- Rule of Generation:能用程序的地方就写程序。
- Rule of Optimization:打磨代码之前先写原型。优化之前先让它能工作。
- Rule of Diversity:在 Unix 中,会希望有更多样的生态,大家可以用各种各样的设计,语言,hooks 来设计程序。
- Rule of Extensibility:让程序更容易扩展,因为需求迟早会到来。