西格玛向量™

UNIX的救赎

作者: 西玛哒   分类: Linux, SigTwit, 笑看人生   标签:    评论: 0

Those who do not understand Unix are condemned to reinvent it, poorly.
                                              ----Henry Spencer
不懂Unix 的人注定最终还要重复发明一个蹩脚的Unix。
                                      ——亨利·斯宾赛   1987 年11 月

是的,没错,UNIX 不是电影演员,也不是不是什么哲学家,不是某子、某克斯人名的缩写,而是一种计算机操作系统。你我可能都不熟悉它,我甚至也说不出它现在具体都用在哪儿,也许说BSD,Linux,Mac的各种猛兽操作系统上仍然是Unix的灵魂附体。然而Unix已经不仅仅是一个操作系统了,并且它的概念也并不能说明什么问题。即便是学过了电脑的我们最多也只是知道除了windows的疆域之外,还有广阔的领土,他们打从C语言诞生前就在那儿,优雅的跨越四分之一个世纪,踏过PC、windows和互联网井喷式扩张的版图,正如所说的那样:

Unix is not so much an operating system as an oral history.

与其说Unix 是个操作系统,不如说是一部口述的历史。

<author>Neal Stephenson</author>

他比我们大部分的人都要年长很多。然而即便如此,我也从来没有想过UNIX可以出现我生活中在除了打开一个console去玩儿vim和gcc之外的任何角落。也从来没有想过UNIX拥有什么哲学。想来,自己没有想什么“哲学”之类的东西已经很久了。

但,正如触发我所思所想的书中提到的那样:

哲学:很有所谓

在从CSDN上看到了对《UNIX编程艺术》|“The.Art.of.UNIX.programming”一书的推荐之后,想起之前看到这本书时,并不觉得它对我Coding有什么帮助,于是就打入冷宫了,惭愧之极。如今找出来仔细的阅读了一遍,发现其中的很多东西实在是太给力了。最直接的感受便是:

凡事都有哲学,写操作系统、编程序和日常生活中,没有什么区别。

哲学很有所谓,现在反而在我们的生活中很少再有哲学的思考。大家过着快餐一样的生活,不去思考原则信仰。然而UNIX却维系着这样一个庞大的疆域,这里的人们有着他们的行为准则,没有什么法律要求他们这么做,然而他们如此自觉的遵守着他们点滴积累下来的一切“哲学”,如此富有哲理,我实在想不出作为程序员如何能独占这样美妙的东西。我觉得这足以让沉淀了几千年的景德镇文化大叫情何以堪了,所以在粗粗略读了这些原则之后,我实在是想分享一些东西:

生活与程序都需要系统,代码生活于UNIX,我们生活与China 、US什么的whatever~ 但是系统与“系统”没有本质的区别,如果我们失去的哲学的方向,也许,UNIX的哲学是一场救赎

这一切与编程和无关。

UNIX 十七戒

在《UNIX编程艺术》中,作者给了UNIX哲学一些通俗的描述:

Unix 哲学(同其它工程领域的民间传统一样)是自下而上的,而不是自上而下的。

Unix 哲学注重实效,立足于丰富的经验。你不会在正规方法学和标准中找到它,它更接

近于隐性的半本能的知识,即Unix 文化所传播的专业经验。它鼓励那种分清轻重缓急的

感觉,以及怀疑一切的态度,并鼓励你以幽默达观的态度对待这些。

UNIX有很多复杂的哲学、也有很多领域内如同马克思黑格尔之类的灵魂人物,每个人有不同的说法,然而他们的思想一致的看起来都有些假。仿佛他们开了个代表大会商量过一样。这些哲学莫不如说是他们手中诞生代码的行为准则,作者将这些原则总结成了UNIX的十七条戒律,这是他们在程序世界中的定义:

1. 模块原则:使用简洁的接口拼合简单的部件。

2. 清晰原则:清晰胜于机巧。

3. 组合原则:设计时考虑拼接组合。

4. 分离原则:策略同机制分离,接口同引擎分离。

5. 简洁原则:设计要简洁,复杂度能低则低。

6. 吝啬原则:除非确无它法,不要编写庞大的程序。

7. 透明性原则:设计要可见,以便审查和调试。

8. 健壮原则:健壮源于透明与简洁。

9. 表示原则:把知识叠入数据以求逻辑质朴而健壮。

10. 通俗原则:接口设计避免标新立异。

11. 缄默原则:如果一个程序没什么好说的,就沉默。

12. 补救原则:出现异常时,马上退出并给出足够错误信息。

13. 经济原则:宁花机器一分,不花程序员一秒。

14. 生成原则:避免手工hack,尽量编写程序去生成程序。

15. 优化原则:雕琢前先要有原型,跑之前先学会走。

16. 多样原则:决不相信所谓“不二法门”的断言。

17. 扩展原则:设计着眼未来,未来总比预想来得快。

这些看起来有些太专业了,然而他们着实可以运用于我们的日常生活:

1、模块原则: 没有万能药

不要指望生命中你能创造一个万能的自我角色,你就如同程序中的一个模块,你要做的是简洁而准确的做好自己的事情,你做的事情将与这个世界上所有的其他人一起,构成这个世界完整的功能。

2、清晰原则: 清晰胜于机巧

用清晰的方法做事,不要饶太多的弯子,否则总有一天自己会被自己的弯子绕晕。

3、组合原则: 沟通十分重要

正如程序中模块之间要通信一样,人要学会与别人沟通,从别人那里正确的了解信息,并且向别人清晰的输出你能提供的信息。不在于沟通的多么优雅,而在于让对方感到舒适,清晰的得到你要表达的东西(正如数据的传输一样)。

4、分离原则:分清不同的角色

正如程序的设计需要分层一样,人的生活也要分层。你有家庭环境,有与朋友、同事一起工作的环境。认清自己的角色,而把所有的事情都混为一谈的做法是危险的,无论对自己、他人还是整个“系统”而言。

5、简洁原则:简洁即美

“错综复杂的美妙事物”听来自相矛盾。Unix 程序员相互比的是谁能够做到“简

洁而漂亮”并以此为荣,这一点虽然只是隐含在这些规则之中,但还是很值得公开

提出来强调一下。

—Doug McIlroy

大道至简,不要仅仅因为虚荣心理就去鼓捣那些最错综复杂的东西。了解你该做什么,用简洁的方式做好它。

6 、吝啬原则: 如果你明知道没有用,那就不要做

不要浪费时间在犯过的错误或者已经证实无用的工作上,鼓起勇气走新路是好事儿,鼓起勇气跳进陷阱只能叫做愚勇。

7、透明性原则: 让事情有条理

生活有时候会有很多bug,就像软件崩溃了一样,一个有条理的设计能让你一眼看出问题出在哪儿,生活也是如此,在你能掌控的范围内保证事情条理清晰绝对没有坏处。

8、健壮原则:   磨练自己,或是给自己留条后路

生活无处不在的压力面前,不一定你的生活系统就是十全十美的,当然,你要保证考虑到了所有可能发生的最坏情况,和如何去处理你考虑不到的应急情况。这确实需要磨练和经验,然而重要的是意识,最起码的一点,在可能的时候要给自己留后路。

9、表示原则:   自己有什么和想要什么

生活和程序无论如何都会有输出,如果你的生活和程序都正常并符合“哲理”,那么没有什么“输出”是没用的,正如Rob Pike, 最伟大的C 语言大师之一, 在《Notes on C Programming》中所说的那样:编程的核心是数据结构,而不是算法。同理,我们生活的核心不是我们怎么做了什么事儿,而是我们所有的东西和所寻求的东西,正如那些数据一样重要。你可以用很笨的方法搞到你要的,然而如果你不知道它们是啥或是不知道它们被你放在了哪儿,那就麻烦了。

10、通俗原则: 创新不等于毫无来由的标新立异和自作聪明

不要把事情都寄托在别人能谁够理解你的基础上,特别是你自认为与众不同的时候。尽量和大家一样做事,所谓低调做人。如果你有真正的创新,它不久就会变成这个庞大系统的新的“通俗原则”,所以不必担心自己碌碌无为。

11、缄默原则:如果没什么好说的,就保持沉默

不经过大脑的胡说八道是没有任何好处的,发表意见要经过认真的思考,确定是否有必要之后在一个正确的时机、在一个正确的地点,说给正确的人。正如一个程序一样,你觉得某些软件的弹窗在你不需要的时候会让你有好感吗?

12、补救原则: 老老实实的承认错误并在第一时间补救

在出了错误的时候,不要狡辩或是为了“面子”做无谓的行为,要赶快集中精力将你的错误造成的损失降到最低。这无论是从自身发展角度还是对于别人和你的工作都是最好的选择。

这 里还有一个原则:“宽容地收,谨慎地发”,要尽量包容别人,而在自己做事情的时候要谨慎,即使出错也要保证明确的知道自己错在哪儿,以便自己更正或是在别人的帮助下更正自己的行为。

13、经济原则:   把能省的时间都省掉

时间和精力的价值绝对大于金钱,所以,在这个庞大的社会系统中,我们把精力集中与我们擅长的事情上,而其他的事情交给其他的人去做。所谓术业有专攻,正如“宁花机器一分,不花程序员一秒”,生活中我们学会要把事情交给社会这台“机器”去做。

14、生成原则:  把事情按照顺序串起来,而不是一个个手工的去做

工作、知识和机遇有时候是有继承关系的,就像一些程序可以去配置和生成另一些程序,我们不必也不应该浪费时间去一点点找和做,如果我们掌握了使用这个顺序的方法,就可以更轻松的生活。

15、 优化原则: 雕琢前先得有原型,跑之前先学会走

不要想着你做的事情一下子就是最好的,事情都要有循序渐进的过程,而且大部分时候你会做的很烂,别灰心,优化和进步都要一点点进行。

16、 多样原则 : 你完全不可能完全独立于其他人,也不可能永远不改变自己

一个僵化、封闭、不愿与外界沟通的软件,简直就是一种病态的傲慢。人也是如此,你和这个世界永远脱不了干系,而且你总要不断的完善自己使自己适应社会,不可能有人一出生就什么都应付得来。

17、扩展原则:   着眼未来,未来总比预想快。

这条本身就是它的原则。

综上十七条,广阔而全面的概括了UNIX的哲学准则,然而,我还是喜欢一些总括的哲学总结:

UNIX的原则

更好的,或者说我更喜欢的表述是Unix 管道的发明人、Unix 传统的奠基人之一的Doug McIlroy 在[McIlroy78]中所说的:

Write programs that do one thing and do it well.

只做一件事,并把它做好

Write programs to work together.

以团队的方式合作

Write programs to handle text streams, becauset hat is a universal interface.

时刻面对挑战,牢记你面对的是整个世界

我的翻译出于我对这些原则的理解,当然,还有一个更好的原则,那就是各种编程大师们奉为圭臬的“KISS”原则:

Unix01 UNIX的救赎

我不知道如何翻译这个原则,我也不想翻译它,因为它的韵味本身就是它原则的组成部分。正如之前乔布斯大神演讲中提到过的“Stay  hungry,Stay  foolish”一样,还是原汁原味一点比较好吧。每个人有不同的理解,但是它的内容是明显的。生活并没有那么复杂,而把它变复杂的正是我们自己。

救赎

这个词用的有些大了,然而我指的是救赎我自己,恐怕也不过分,但愿这些原则能让我活的更加简单,而不会因为某数字和某企鹅的娱乐新闻而动摇自己,也不会为了高墙之内的各种不给力事件而碌碌无为,总有一些事情需要我去做,而我只需要做好自己。我知道我改变不了什么,但愿UNIX能,当然,我也有自己的原则,虽然同样是借来的:

世界由两部分组成,你和除了你之外的一切,改变了自己,就改变了世界的一半。

当我们都能够用自己的原则与UNIX作比较的时候,我们会发现我们的“系统”中,所看到的种种丑态,都是些浮云罢了。

一个Shell,一次救赎,一个clear,还原我世界原本的样子。

anyShare分享到: UNIX的救赎
          
11-08
2010
loading...