unix编程艺术
关注微信公众号,请点击标题下“上海成趣信息科技”
2015年4月3日的旧文,重发一下。
前面的小文中多次提到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、模块原则:使用清晰的接口拼接简单的组件。
2、Rule of Clarity: Clarity is better than cleverness.
为了减少后期程序的维护成本,要养成良好的编程习惯。不仅添加良好有用的注释,也在选择算法和实现时考虑未来的可扩展性。嘿嘿,不要以为自己写的程序不会忘记。本人写代码N多年的体会就是,我很容易忘记自己写的代码。有点想念阅读那些优雅而清晰的代码的日子了。
3、Rule of Composition: Design programs to be connected toother programs.
考虑让程序彼此之间能有效通信,程序彼此独立,具有组合性。
4、Rule of Separation: Separate policy from mechanism;separate interfaces from engines.
这样做,策略灵活,可以适应用户需求的改变;而且任何策略的改变不会影响到整个机制。
5、Rule of Simplicity: Design for simplicity; addcomplexity only where you must.
不炫耀那些下三滥的技巧,不用嘘头,简洁为美,以简洁至上。这也是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.
充分考虑透明性、易见性和简洁性。能快速了解软件的功能和实现方法。软件有监视其自身运行状态的功能。简洁,利于测试监视工具和调试脚本。
8、Rule of Robustness: Robustness is the child oftransparency and simplicity.
程序越简洁,越透明,内部逻辑易于理解,程序就越健壮。
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.
接口设计按照用户最可能熟悉的功能接口和相似应用程序建模。关注传统的惯例,缓和学习曲线。
11、Rule of Silence: When a program has nothing surprisingto say, it should say nothing.
不显示不重要的信息,合理使用用户的注意力。
12、Rule of Repair: When you must fail, fail noisily and assoon as possible.
程序尽可能从容应对各种错误输入和自身的运行错误。如果做不到,尽可能让程序以一种容易诊断出错误的方式终止掉。
13、Rule of Economy: Programmer time is expensive; conserveit in preference to machine time.
程序员的时间是宝贵的,不要无故浪费一分一秒。教会机器做更多低层次的编程工作,就可以节约程序员的时间了。
14、Rule of Generation: Avoid hand-hacking; write programsto write programs when you can.
使用代码生成器让细节工作自动化。这样便于避免出错。
15、Rule of Optimization: Prototype before polishing. Getit working before you optimize it.
先制作原型,再精雕细琢。优化之前,先确保能用。磨刀不误砍柴工。
系统性地调整。
16、Rule of Diversity: Distrust all claims for “onetrue way”.
即使最出色的软件,也常常会受限于设计者的想象力。坚持Unix的传统,广泛采用多种语言、开放的可扩展系统和用户定制机制。
17、Rule of Extensibility: Design for the future, becauseit will be here sooner than you think.
17、扩展原则:设计要着眼于未来,因为有时未来来的比想象中的快。
Eric在书中说,Software design andimplementation should be a joyous art, a kind of high-level play. 希望你能体会到这种快乐。
下一次,我们聊聊书中的第二部分设计,看看如何将Unix哲学的原理应用到设计与实现。
欢迎关注我的微信公众号
推荐阅读
【阅读导引】信息技术文化小文汇
【阅读导引】软件技术开发小文汇
【阅读导引】IT创业相关小文集锦
【阅读导引】数据分析小文集锦
【实战技能】产品设计小文集锦
公众号回复以下关键词,查看相关话题文章
软件技术开发:
AR VR 技术开发 Refactoring 设计模式 Java PHP 网站 前端 Web应用 自然语言处理 物联网 MQTT Restful Web Services 代码阅读 卓越的代码 网站 编程之美 MVP AngularJS HTML5 Python
人工智能:
人工智能 自然语言处理 深度学习 纳思系统
IT创业:
创业 硅谷 知识型企业 产品技术管理 招贤纳士 技术管理
数据分析:
数据 数据分析 数据可视化 数据科学家 数据质量 数据匿名化
产品设计:
产品管理 互联网产品 产品技术管理 产品意识 产品与数据 原型设计 原型测试