unix哲学基础(unix 编程艺术摘录)

 unix哲学起源于Ken Thompson 早期关于如何设计一个服务接口简洁、小巧精干的操作系统的思考,随着unix文化在学习如何尽可能发掘Thompson设计思想的过程中不断成长,同时一路上还从其他许多地方博采众长。

  Unix哲学说来不算是一种正规设计方法。他并不打算从计算机科学的理论高度来产生理论上的完美的软件。那些毫无动力、松松垮垮而且薪水微薄的程序员们,能在短短期限内,如同神灵附体般造出稳定而新颖的软件——这只不过是经理人永远的梦呓罢了。

  Unix哲学(同其他工程领域的民间传统一样)是自下而上的,而不是自上而下的。Unix哲学注重实效,立足于丰富的经验。你不会在正规方法学和标准中找到它,它更接近于隐形的半本能的知识,即Unix文化所传播的专业经验。它鼓励那种分轻重缓急的感觉,以及怀疑一切的态度,并鼓励你以幽默达观的态度对待这些。

  Unix管道的发明人Unix传统的奠基人之一Doug Mcllroy 曾经说过:

               1,让每个程序就做好一件事。如果有新任务,就重新开始,不要往原程序中加入新功能而搞得复杂。

               2,假定每个程序的输出都会成为另一个程序的输入,哪怕那个程序还是未知的。输出中不要有无关的信息干扰。避免使用严格的分栏格式和二进制格式输入。不要坚持使用交互式输入。

               3,尽可能早地将设计和变异的软件投入试用,哪怕是操作系统也不例外, 理想情况下,应该是在几个星期内。对拙劣的代码别犹豫扔掉重写。

               4,首先是使用工具而不是周烈的帮助来减轻编程任务的负担。工欲善其事,必先利其器。

 后来他这样总结道(引自《Unix的四分之一世纪》)

 Unix哲学是这样的:一个程序只做一件事,并做好。程序要做协作,程序要能处理文本流,因为这是最通用的接口。

   Rob Pike ,最伟大的C语言大师之一,在《Note on C Programming》 中从另一个稍微不同的角度表述了Unix的哲学:

              原则1,你无法断定程序会在什么地方耗费运行时间。瓶颈经常出现在想不到的地方,所以别急于胡乱找个地方改代码,除非你已经证实那儿就是瓶颈所在。 

              原则2,估量,在你没对代码进行估量,特别是没找到最耗时的那部分之前,别去优化速度。

              原则3,花哨的算法在n很小时通常会很慢,而n通常很小。花哨的算法 常数复杂度很大。除非你确定n总是很大,否则不要用花哨算法,即使n很大,也优先考虑原则2

             原则4,花哨的算法比简单的算法更容易出bug,更难实现,尽量使用简单的算法配合简单的数据结构。

             原则5,数据压倒一切,如果已经选择了正确的数据结构并且把一切都组织的井井有条,正确的算法也就不言自明,编程的核心是数据结构,而不是算法。

             原则6,就是没有原则六

 Ken Thompson——unix最初版本的设计者和实现者,禅宗偈语般的对PIke原则4做了强调:

       拿不准就穷举。

  Unix哲学中更多的内容不是这些先哲们口头表述出来的,而是由他们所做的一切和Unix本身所做出的榜样体现出来的。从整体上说,可以概括一下几点:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

       16,多样原则:绝不相信所谓“不二法门”的断言 

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

 

如果刚开始接触unix,这些原则这个好好体味一番。谈软件工程的文章常常会推荐大部分的这些原则,但是大多数其他操作系统缺乏恰当的工具和传统将这些准则付诸实践,所以,多数的程序员还不能自始至终地贯彻这些原则。蹩脚的工具、糟糕的设计、过度的劳作和臃肿的代码对他们已经是家常便饭了,他们奇怪,Unix的玩家有什么好烦的呢

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值