Fork me on GitHub

Linux/Unix思想 6月 19, 2016

去年年底请同学Leo帮忙装上Ubuntu系统,最近几个月几乎就没用过Windows系统。越来越喜欢Linux简洁的界面,飞快的速度了,唯一的缺陷是Office功能不是很强大,当然也可能是我没找到合适的软件。偶尔打开Windows,越来越难以忍受迅雷,360等软件了,都恨不得给你来半屏广告。这也是我在Github上建博客的原因,保持简洁的界面,只显示有用的信息。

因为对Linux系统的兴趣,最近看了三本经典好书:《黑客与画家》,《Linux/Unix设计思想》,《UNIX编程艺术》。这几本书都很有趣,有些章节读起来令人击节赞赏,带来恍然大悟的狂喜。

计算机、互联网的产生变革了我们这个时代,深刻的改变了人们的思维。正如蒸汽机、电气化曾带来的工业革命一样,这是一个巨大的范式转移(Paradigm shift)。《黑客与画家》的作者是美国互联网界举足轻重、有"创业教父"之称的哈佛大学计算机博士Paul Graham。正如译者序中所说:“这本书的内容并不深奥,不仅仅是写给程序员和创业者的,更是写给普通读者的。Paul Graham最大的目的,就是通过这本书,让普通读者理解我们所处的这个计算机时代。” 这本书最浓缩的介绍就在译者序了,我在此不可能介绍得更好。

后两本书主要是写给软件、系统人员看的,Linux/Unix系统是当今计算机世界操作系统的中流砥柱,其思想影响了计算机相关的每一个行业,这两本书可以称得上是Linux/Unix界的思想总结。《Linux/Unix设计思想》(在线试读)将Linux/Unix中的设计哲学提炼出来, 较为通俗一些,适合在很短时间内泛读。《UNIX编程艺术》(在线试读)则更像一本Unix宗教的《坛经》,对于Unix的前世今生娓娓道来,关于其历史版权纠纷,各种设计决策间的争论比较,背后蕴含的设计思想的由来都阐述得非常清楚。对于各种设计原则的案例分析很有实践指导意义。这两本书有些重叠的地方,都提出了一些原则,将Linux/Unix的思想提升为一种哲学,或曰主义、宗教。《UNIX编程艺术》这本书干脆将老和尚教诲小和尚作为封面,书中还多次引用禅宗教义。

TAOUP cover

以下引自《Linux/Unix设计思想》:

Unix哲学的几条准则看似简单。事实上,它们简单到会容易使人们忽略其重要性。这就是它们颇具欺骗性的地方。其实,简单的外表下掩盖着一个事实:如果人们能够始终如一地贯彻它们,这些准则可是非常行之有效的。

(1) 小即是美。相对于同类庞然大物,小巧的事物有着无可比拟的巨大优势。其中一点就是它们能够以独特有效的方式结合其他小事物,而且这种方式往往是最初的设计者没能预见到的。

(2) 让每一个程序只做好一件事情。通过集中精力应对单一任务,程序可以减少很多冗余代码,从而避免过高的资源开销、不必要的复杂性和缺乏灵活性。

(3) 尽快建立原型。大多数人都认同"建立原型"(prototyping)是任何项目的一个重要组成部分。在其他方法论中,建立原型只是设计阶段中一个不太重要的组成部分,然而,在Unix环境下它却是达成完美设计的主要工具。

(4) 舍高效率而取可移植性。当Unix作为第一个可移植系统而开创先河时,它曾经掀起过轩然大波。今天,可移植性早被视作现代软>件设计中一个理所当然的特性,这更加充分说明这条Unix准则早就在Unix之外的系统中获得了广泛认可。

(5) 使用纯文本文件来存储数据。舍高效率而取可移植性强调了可移植代码的重要性。其实可移植性数据的重要性绝不亚于可移植代码。在关于可移植性的准则中,人们往往容易忽视可移植性数据。

(6) 充分利用软件的杠杆效应。很多程序员对可重用代码模块的重要性只有一些肤浅的认识。代码重用能帮助人们充分利用软件的杠杆效应。一些Unix的开发人员正是遵循这个强大的理念,在相对较短的时间内编写出了大量应用程序。

(7) 使用shell脚本来提高杠杆效应和可移植性。shell脚本在软件设计中可谓是一把双刃剑,它可以加强软件的可重用性和可移植性。无论什么时候,只要有可能,编写shell脚本来替代C语言程序都不失为一个良好的选择。

(8) 避免强制性的用户界面。Unix开发人员非常了解,有一些命令用户界面为什么会被称为是"强制性的"(captive)用户界面。这些命令在运行的时候会阻止用户去运行其他命令,这样用户就会成为这些系统的囚徒。在图形用户界面中,这样的界面被称为"模态"(modal)。

(9) 让每一个程序都成为过滤器。所有软件程序共有的最基本特性就是,它们只修改而从不创造数据。因此,基于软件的过滤器本质,人们就应该把它们编写成执行过滤器任务的程序。


一句话总结Linux/Unix哲学:

KISS: Keep It Simiple, Stupid