UNIX的救赎
作者: 西玛哒 分类: Linux, SigTwit, 笑看人生 标签: Unix 评论: 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”原则:
我不知道如何翻译这个原则,我也不想翻译它,因为它的韵味本身就是它原则的组成部分。正如之前乔布斯大神演讲中提到过的“Stay hungry,Stay foolish”一样,还是原汁原味一点比较好吧。每个人有不同的理解,但是它的内容是明显的。生活并没有那么复杂,而把它变复杂的正是我们自己。
救赎
这个词用的有些大了,然而我指的是救赎我自己,恐怕也不过分,但愿这些原则能让我活的更加简单,而不会因为某数字和某企鹅的娱乐新闻而动摇自己,也不会为了高墙之内的各种不给力事件而碌碌无为,总有一些事情需要我去做,而我只需要做好自己。我知道我改变不了什么,但愿UNIX能,当然,我也有自己的原则,虽然同样是借来的:
世界由两部分组成,你和除了你之外的一切,改变了自己,就改变了世界的一半。
当我们都能够用自己的原则与UNIX作比较的时候,我们会发现我们的“系统”中,所看到的种种丑态,都是些浮云罢了。
一个Shell,一次救赎,一个clear,还原我世界原本的样子。
| anyShare分享到: | |
| |






