unix编程艺术:【实战技能】UNIX编程艺术:17点哲学原则

Eric S. Raymond是公认的Unix编程大师、开源运动领袖人之一,通俗点说叫老牌黑客,美国愤青。今天我们就来看看他写的最有名的书The Art of UNIX Programming中文版译名为UNIX编程艺术。包括Unix设计者在内的多位领域专家也为这本书贡献了宝贵的内容。看看书的封面,很有意思。一中国老夫子和一中国小学生,作者藉此表明此书背后所想说明的经验和智慧。这本书名里有艺术这个词,所以书中没有讲述编程的细节,而是讲看起来似乎很玄乎的方法和理念,通过野史和坊间传说来传递文化。具体来说,通过场景、设计、工具和社区这四个部分讲述了Unix系统领域中的设计和开发哲学、思想文化体系、原则与经验。今天小编主要和大家聊聊UNIX哲学。简单来说,就是下面这张图。

 

细细来说,17个原则如下。

1、Rule of Modularity: Write simple parts connected byclean interfaces.
1、模块原则:使用清晰的接口拼接简单的组件。
正如,BrianKernighan 曾经说过,"计算机编程的本质就是尽量控制(降低)程序的复杂度"。编写复杂而庞大的软件,唯一的方法,就是控制并降低程序的整体复杂度,用清晰的接口把若干的模块组合成一个复杂软件。各模块之间要减少耦合,这样在对局部进行改动时不会牵动全身。


2、Rule of Clarity: Clarity is better than cleverness.
2、清晰原则:清晰胜于奇巧。

为了减少后期程序的维护成本,要养成良好的编程习惯。不仅添加良好有用的注释,也在选择算法和实现时考虑未来的可扩展性。嘿嘿,不要以为自己写的程序不会忘记。本人写代码N多年的体会就是,我很容易忘记自己写的代码。有点想念阅读那些优雅而清晰的代码的日子了。


3、Rule of Composition: Design programs to be connected toother programs.
3、组合原则:设计时,要考虑程序之间的连接。
考虑让程序彼此之间能有效通信,程序彼此独立,具有组合性。


4、Rule of Separation: Separate policy from mechanism;separate interfaces from engines.
4、分离原则:策略同机制分离,接口同引擎分离。

这样做,策略灵活,可以适应用户需求的改变;而且任何策略的改变不会影响到整个机制。


5、Rule of Simplicity: Design for simplicity; addcomplexity only where you must.
5、简洁原则:设计尽可能简洁,复杂度能低则低。

不炫耀那些下三滥的技巧,不用嘘头,简洁为美,以简洁至上。这也是Unix文化的精髓。


6、Rule of Parsimony: Write a big program only when it isclear by demonstration that nothing else will do.

6、吝啬原则:除非别无他法,否则,不要去编写庞大的程序。

不编写庞大而复杂的程序,不利于维护。


7、Rule of Transparency: Design for visibility to makeinspection and debugging easier.
7、透明原则:设计要可见,以便检查和调试。
充分考虑透明性、易见性和简洁性。能快速了解软件的功能和实现方法。软件有监视其自身运行状态的功能。简洁,利于测试监视工具和调试脚本。


8、Rule of Robustness: Robustness is the child oftransparency and simplicity.
8、健壮原则:健壮的程序源于透明与简洁。
程序越简洁,越透明,内部逻辑易于理解,程序就越健壮。


9、Rule of Representation: Fold knowledge into data soprogram logic can be stupid and robust.

9、表示原则:把知识放入数据,以便逻辑结构质朴而健壮。
将代码的复杂度转移到数据中去。通过数据建模,可以实现逻辑结构清晰。


10、Rule of Least Surprise: In interface design, always dothe least surprising thing.
10、通俗原则:接口设计避免标新立异。
接口设计按照用户最可能熟悉的功能接口和相似应用程序建模。关注传统的惯例,缓和学习曲线。


11、Rule of Silence: When a program has nothing surprisingto say, it should say nothing.
11、缄默原则:如果一个程序没什么好挑剔的,那就保持沉默。
不显示不重要的信息,合理使用用户的注意力。


12、Rule of Repair: When you must fail, fail noisily and assoon as possible.
12、补救原则:出现异常时,马上退出并适当给出充分的出错信息。
程序尽可能从容应对各种错误输入和自身的运行错误。如果做不到,尽可能让程序以一种容易诊断出错误的方式终止掉。


13、Rule of Economy: Programmer time is expensive; conserveit in preference to machine time.
13、经济原则:宁可多花机器一分,也不浪费程序员一秒。

程序员的时间是宝贵的,不要无故浪费一分一秒。教会机器做更多低层次的编程工作,就可以节约程序员的时间了。


14、Rule of Generation: Avoid hand-hacking; write programsto write programs when you can.
14、生成原则:避免手工hack,尽可能编写程序,让程序去生成程序。
使用代码生成器让细节工作自动化。这样便于避免出错。


15、Rule of Optimization: Prototype before polishing. Getit working before you optimize it.
15、优化原则:润色代码前先要有模型,在优化前,先确保能用。
先制作原型,再精雕细琢。优化之前,先确保能用。磨刀不误砍柴工。
或者如,极限编程大师Kent Beck所说,先求运行,再求正确,最后求快。

系统性地调整。


16、Rule of Diversity: Distrust all claims for "onetrue way".
16、多样原则:决不相信所谓"不二法则"的言论。
即使最出色的软件,也常常会受限于设计者的想象力。坚持Unix的传统,广泛采用多种语言、开放的可扩展系统和用户定制机制。


17、Rule of Extensibility: Design for the future, becauseit will be here sooner than you think.

17、扩展原则:设计要着眼于未来,因为有时未来来的比想象中的快。
为数据格式和代码留下扩展的空间。设计协议或是文件格式时,应使其具有充分的自描述性以便扩展。设计代码时,要有组织架构设计,便于将来的开发者增加新功能。

 

Eric在书中说,Software design and implementation should be a joyous art, a kind of high-level play. 希望读到这篇文章的你能体会到这种快乐。

相关推荐

相关文章