Linux/Unix 设计思想概述

IT技术变化日新月异,但是可以发现几十年前设计的Linux系统直到如今依然是稳定高效的操作系统,这在很大程度上源于他的设计哲学,哲学就是哲学,它不会过时。如今软件生产领域出现的各种复杂庞大,运行缓慢,逻辑混乱,设计灾难等现象层出不穷,令人惊讶的是在unix设计时,采用的哲学理念大多可以巧妙地避开这些问题,而这些问题是在大规模软件生产之后,甚至在工业领域衍生出软件工程学之后才产生的,不得不感叹道unix设计者的先进理念。

Linux作为unix的开源版,表现出了与Unix全然相同的哲学原理,开源社区的开发者达到了上百万之多,集思广益中创造的Linux才是登峰造极的Unix。计算机行业很多人员被专有软件公司的人所蒙骗,误认为任何借来的或是免费的软件在性能上都无法与那些要付费的软件相媲美。

Unix哲学的几条准则看似简单,却也容易让人忽略其重要性,简单的外表下掩盖着一个事实:如果人们能始终如一的贯彻他们,这些准则是非常行之有效的。

1.小即是美

相对于庞然大物来说,小型事物具有无可比拟的灵活性,能够以独特有效的方式结合其他小事物。这种方式往往是最初设计者没有预见到的。小程序易于理解,在软件工程中,遗留代码维护问题是成本高昂的,小程序则会集中精力完成一项功能,在软件后期维护中具有相当的优势。小程序小号的系统资源也较少,可以让操作系统轻而易举为其分配资源;小程序也容易和其他工具相结合。

2.让每个程序只做好一件事

与软件工程中高内聚的概念不谋而合。软件工程师常常会成为功能控,可以看到现在的软件在更新中不断堆叠不必要的功能,变成一锅大杂烩。一件事情的处理可以由多个完成了一件事的小程序组合而成。这个原则和小即是美相辅相成。

3.尽快建立原型 

软件是抽象的概念的集合,不同的人员对其理解一定会有偏差,在发布之前没有人知道会发生什么,客户用户也无法精准描述最终软件产品的样子,尽快建立原型可以演示给用户看,并获得反馈,增加对业务和软件的认识,即使修正错误,形成优胜劣汰的筛选过程,

4.舍高效率而取可移植性

硬件不断发展,费尽心机依据硬件优化的程序可能在硬件更新后就优势全无。可移植性还可以较少用户培训的需求,好的程序不会消失,而是会随着硬件平台的更新不断移植。

5.采用纯文本文件来存储数据

数据的可移植性与代码的可移植性同等重要,数据要活动起来才有其价值,它一定是要去到某个地方的,无处可去的数据是死数据。花费在转换数据格式的每分每秒都在浪费数据的价值。文本是通用的可转换格式,不同平台二进制格式不同,但几乎所有平台都能处理文本编码的数据。文本文件也易于阅读和编辑,如果有误可以直接修改,不需要用专业的数据工具,所以文本数据也简化了文本工具的使用。管道是一种无需使用临时文件,直接讲一个程序的输出作为领一个程序的输入的机制。许多Unix程序不过是一系列管道连接在一起的小程序的集合。

可移植性的提高在硬件发展过程中的软件迁移重写问题上实际上大大克服了速度的不足。

6.充分利用软件的杠杆效应

不要有一种NIH(Not Invented Here非我发明)综合征,不要为了证明自己可以做得更好而重新开发其他人已经完成的工作。良好的程序员编写优秀代码,优秀的程序员借用优秀代码。编写复杂软件系统时,可重用性是非常关键的。最好的办法就是借用别人的成果,将他人的软件模块程序和配置文件集成在自己的应用程序中,潜在客户只会关注软件是否可用,具体怎么实现的没有兴趣。能迅速理解裁剪并使用可重用模块的软件开发者才是优秀的工程师,与之类似,也应该允许他人使用我们的代码来发挥软件杠杆效应。

7.使用shell脚本来提高杠杆效应和可移植性

shell脚本就是调用一系列写好的C程序而完成某种操作的程序。

8.避免强制性的用户界面

软件开发领域的最大风险来源于不确定性,而CUI假定用户是人类,这就是最大的不确定性。而且由于人类的速度相较于计算机而言太过缓慢,热河需要等待用户输入的系统处理速度实际上与人类操作速度相等。典型Unix命令会尽量避免人工干预。其次,CUI命令解释器的规模庞大且男一边写,用户输入的可能性过于庞大,对于确定性的程序而言会处理太多无关于核心逻辑的代码,效率并不高,所以Unix对付用户界面的方法就是避开他们。CUI一般会偏好“大即是美”的做法,使得软件开发向冗杂的方向迈进,功能性心态压倒了简洁性。拥有CUI的程序往往也很难与其它项目相结合,其假定用户是人,则很难与目标是程序的其他项目很好的结合。CUI没有良好的扩展性,也无法利用软件的杠杆效应。(难以重用)

9.让每一个程序都成为过滤器

实际上自有计算机技术以来,所有程序都是一个过滤器,每个程序都以某种形式输入数据,产生一些数据,程序只负责处理这些数据。程序并不创建数据,数据的来源是人类,计算机只是将数据从一种格式转换为另一种。

除了这九个原则准则外,还有十条小准则。

1.允许用户制定环境

人们愿意调整使用环境,内置的灵活性使得用户可以更加投入地学习如何使用某个应用程序以获得最大收益

2.尽量使操作系统内核小而轻量化

区分用户空间和内核空间,尽量保持内核的轻量化,使得Linux能够更为简单有效地将那些只做好一件事的小程序集合起来,单一功能的小程序快速激活对Unix整体性起到了至关重要的作用。

3.使用小写字母并尽量简短

小写字母阅读方便,大写字母通常用来吸引人的注意。

4.保护树木

电子化代替纸质化,一旦数据打印到纸上,就基本失去了进一步操作它们的可能。

5.沉默是金

避免程序与用户形成“话痨式”的交谈风格,Unix在这方面显得沉默寡言,它提供的只是事实。屏幕上只包含有效数据,而不是充斥着杂乱的注释,它们几乎传递不了什么有用的信息,如果没有连篇累牍的废话,我们就可以轻而易举的找到不太起眼的真实数据。在unix中,重要的是言简意赅地传递你要表达的意图,仅此而已。

6.并行思考

尽可能多的利用CPU的运算性能以提升吞吐量。

7.部分之和大于整体

Unix的做法是将小型组件集合在一起,构建集成性的应用程序。这样就可以只加载和使用所需功能。同时还保留了灵活性,可以对应用程序的部分选择性修改,而不用替换整个应用程序。也利于多个开发人员并行工作。

8.寻找90%的解决方案

开发人员会力求提供一种低投入高回报的解决方案,这意味着他们会毫不留情地砍掉那些很少有人使用或者实现起来很费劲的需求。软件没有完成时,只有不断的发布版本。Unix哲学中并不奢求为所有人提供一揽子解决方案,而只是满足大多数人的需求。

9.更坏就是更好

Unix存在某些被人诟病的问题,例如图形用户界面和相应的办公软件。公认的良好的设计应该具备四个特点:简洁性、正确性、一致性和完整性。如何决定他们的优先级,Unix选择了简洁性当先。因此如果想成为一款在任何方面表现俱佳的系统,则会面临灭顶之灾。想要“文武双全”?就需要牺牲简洁性来实现完整性。

10.层次化思考

Unix将整个系统的所有内容均视为文件,使用根目录为根节点的树形结构对文件系统进行逻辑建构。进程也采用了树形结构。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值