UNIX哲学起源于Ken Thompson早期关于如何设计一个服务接口简介、小巧精干的操作系统的思考,随着UNIX文化在学习如何尽可能发觉Thompson设计思想的过程中不断成长,同时一路上还从其它许多地方博采众长。
是自下而上的,注重实效,立足于丰富的经验。
模块原则:使用简洁的接口拼合简单的部件
清晰原则:清晰胜于技巧
组合原则:设计时考虑拼接组合
分离原则:策略同机制分离,接口同引擎分离
简洁原则:设计要简洁,复杂度能低则低
吝啬原则:除非却无它法,不要编写庞大的程序
透明性原则:设计要可见,以便审查和调试
健壮原则:健壮源于透明与简洁
表示原则:把知识叠入数据以求逻辑质朴而健壮
通俗原则:接口设计避免标新立异
缄默原则:如果一个程序没什么好说的,就保持沉默
补救原则:出现异常时,马上退出并给出足量错误信息
经济原则:宁花机器一分,不花程序员一秒
生成原则:避免手工hack(砍、劈、猛踢、非法侵入),尽量编写程序去生成程序
优化原则:雕琢前先得有原型,跑之前先学会走
多样原则:决不相信所谓“不二法门”的断言
扩展原则:设计着眼未来,未来总比预想快
第4章 模块性:保持清晰,保持简洁
4.1 封装和最佳模块大小
4.2 紧凑型和正交性
4.2.1 紧凑型
4.2.2 正交性
4.2.3 SPOT原则
Don’t Repeat Youself
真理的单点性 Single Point of Truth
4.2.4 紧凑性和强单一中心
4.2.5 分离的价值
限制不仅提倡了经济性,而且某种程度上提倡了设计的优雅。要达到这种简洁性,尽量不要去想一种语言或操作系统最多能做多少事情,而是尽量去想这种语言或操作系统最少能做的事情–不是带着假想行动,而是从零开始(禅称为“初心”(beginner’s mind)或者叫“虚心”(empty mind))。
要达到紧凑、正交的设计,就从零开始。禅教导我们:依附导致痛苦;软件设计的经验教导我们:依附于被人们忽略的假定将导致非正交、不紧凑的设计,项目不是失败就是成为维护的梦魇。
禅授超然,可以得教化,去苦痛。
Unix传统也从产生设计问题的特定、偶然的情形讲授分离的价值。抽象、简化、归纳。因为我们编制软件是为了解决问题,所以我们不能完全超然于问题之外–但是值得费点心思,看看可以抛弃多少先入之见,看看这样做能不能使设计变得更紧凑、更正交。这样做下来,代码复用经常由此变为可能。
关于Unix和禅的关系的笑话同样也是Unix传统中一个仍然鲜活的部分。这绝非偶然。
4.3 软件是多层的
4.3.1 自顶向下和自底向上
4.3.2 胶合层