转载请注明出处:http://blog.csdn.net/horkychen
学习了<<Unix编程艺术>>第一章关于哲学的部分, 做个汇总.
现在对精简设计, 舍弃华而不实是普遍认可的。但早在Unix发展的时期, 这一条原则却是在实践中不断提炼出来的. 这就是最为根本的一条:
KISS - Keep it Simple, Stupid! 这句话其实常见, 尤其是花过功夫学习英文的朋友. 而这个原则可以应用在生活的各个方面. 这一原则是历经多少项目的检验结果, 而我们正是站在一位巨人的肩膀上直接看到现在的理所当然的基本规则.
如何翻译呢? 我觉得字面上是"简洁, 朴实", 精神上可以相较于"大智若愚", 哲学上则相似于:"道生一,一生二, 二生三, 三生万物"中的"道". 这就是Unix最为基本的哲学. 人生也不过如此.
太玄! 再从基础展开.
首先, Unix从发展之初,就注重实效, 立足于经验, 工作方式是自下而上的. 也就是它强调个人的能力体现, 而不是遵循条条框框. 正因为如此, 那个时期各个领域涌现出一大批影响深远的大师. 这就是百家争鸣的结果.
作者总结了Unix哲学中的17条原则:
1. 模块原则: 使用简洁的接口拼合简单的部件.
2. 清晰原则: 清晰胜于取巧. 设计有可能从简单到复杂,但最终一定再回归到简单.
3. 组合原则: 设计时考虑拼接组合.
4. 分离原则: 策略同机制分离, 接口同引擎分离.
很多设计模式都可以看到这一原则的影子. 目的为解耦, 中心是要模块的职责清晰. 在Unix世界常见的应用就是将某个系统功能分为前端和后端.
5. 简洁原则: 设计要简洁, 复杂度能低则低.
6. 吝啬原则: 除非确无它法,不要编写庞大的程序. 让程序只做一件事。
7. 透明性原则: 设计要可见, 以便审查和调试.
8. 健壮原则: 健壮源于透明与简洁.
9. 表示原则: 把知识体现在数据结构上, 以追求逻辑质朴且健壮.
不要让复杂的数据定义破坏你优雅的设计.
10. 通俗原则: 接口设计避免标新立异.
11. 缄默原则: 如果一个程序没什么好说的,就沉默.
12. 补救原则: 出现异常时,马上退出并给出足够错误信息.
13. 经济原则: 宁花机器一分, 不花程序员一秒. (我最喜欢这一条.)
14. 生成原则: 避免手工hack, 尽量写程序去生成程序.
(patch算是13&14好的示例了)
15. 优化原则: 雕琢前先要有原型, 跑之前先学会走. 按小步快跑的节奏展开.
16. 多样原则: 决不相信所谓"不二法门"或"银弹"的断言.
17. 扩展原则: 设计着眼未来, 未来总比预想来得快.
不过,如果你固守这些条条框框, 大谈Unix哲学, 你可能已经偏离了真正的所谓Unix哲学了。 Unix最为崇尚的是实用至上, 拿来主义(SPOT "真理的单点性"原则,DRY更直接!)。 这些原则就是经验总结,代表的是过去,仅供参考. 形式永远只是形式.
既然作者以Unix哲学比较禅宗,但我们也来思考一下. 寒冬下的寺庙内三位和尚:
1. 未加忍耐, 劈开佛像取暖.
2. 经忍耐后, 劈开佛像取暖.
3. 自己冻死, 保住佛像.
你觉得谁已经开悟了? 想清楚这个问题, 就可以很容易理解作者最后提到的"态度也要紧"!
*还要清楚的认识到, 这些总结出来的原则是从成功的项目中总结出来的, 那些不成功的项目以及追求编程艺术化的努力不知道能不能数得清了. 现在的Unix和Unix-Like的系统都是逐步演化的结果. 其实我是不认为这里有什么新的哲学,终归还是回到基础的方法论上了。
程序就是程序,仅此而已!