《Linux/Unix设计思想》随笔

“布道者”指的是那些坚定地信仰某一宗教,并且不遗余力地向人们传播此宗教的修道者。

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

以下这份清单会让你对 Unix 哲学的准则有初步的认识。

  1. 小即是美。相对于同类庞然大物,小巧的事物有着无可比拟的巨大优势。其中一点就是它们能够以独特有效的方式结合其他小事物,而且这种方式往往是最初的设计者没能预见到的。
  2. 让每一个程序只做好一件事情。通过集中精力应对单一任务,程序可以减少很多冗余代码,从而避免过高的资源开销、不必要的复杂性和缺乏灵活性。
  3. 尽快建立原型。大多数人都认同“建立原型”(prototyping)是任何项目的一个重要组成部分。在其他方法论中,建立原型只是设计阶段中一个不太重要的组成部分,然而,在 Unix 环境下它却是达成完美设计的主要工具。
  4. 舍高效率而取可移植性。当 Unix 作为第一个可移植系统而开创先河时,它曾经掀起过轩然大波。今天,可移植性早被视作现代软件设计中一个理所当然的特性,这更加充分说明这条 Unix 准则早就在 Unix 之外的系统中获得了广泛认可。
  5. 使用纯文本文件来存储数据。舍高效率而取可移植性强调了可移植代码的重要性。其实可移植性数据的重要性绝不亚于可移植代码。在关于可移植性的准则中,人们往往容易忽视可移植性数据。
  6. 充分利用软件的杠杆效应。很多程序员对可重用代码模块的重要性只有一些肤浅的认识。代码重用能帮助人们充分利用软件的杠杆效应。一些 Unix的开发人员正是遵循这个强大的理念,在相对较短的时间内编写出了大量应用程序。
  7. 使用 shell 脚本来提高杠杆效应和可移植性。shell 脚本在软件设计中可谓是一把双刃剑,它可以加强软件的可重用性和可移植性。无论什么时候,只要有可能,编写 shell 脚本来替代 C 语言程序都不失为一个良好的选择。
  8. 避免强制性的用户界面。Unix 开发人员非常了解,有一些命令用户界面为什么会被称为是“强制性的”(captive)用户界面。这些命令在运行的时候会阻止用户去运行其他命令,这样用户就会成为这些系统的囚徒。在图形用户界面中,这样的界面被称为“模态”(modal)。
  9. 让每一个程序都成为过滤器。所有软件程序共有的最基本特性就是,它们只修改而从不创造数据。因此,基于软件的过滤器本质,人们就应该把它们编写成执行过滤器任务的程序。

以上列出了 Unix 开发人员所奉行的信条。在其他一些 Unix 书籍中你也会找到类似清单,因为这些都是大家公认的 Unix 基本理念。如果你也采用这些准则,那么人们就会认为你是一个“Unix 人”。

下面还列出了 10 条次要准则,这些准则正在渐渐发展成 Unix 世界信仰体系的一个组成部分6。并非每个与 Unix 打交道的人都会将它们奉为信条,而且在严格意义上其中一些并不能算作是 Unix 的特性。不过,它们看起来依然是Unix 文化(当然也包括 Linux 文化)不可或缺的一部分。

  1. 允许用户定制环境。Unix 用户喜欢掌控系统环境,并且是整个环境。很多 Unix 应用程序绝对不会一刀切地使用交互风格,而是将选择的权利留给用户。它的基本思想就是,程序应该只提供解决问题的机制,而不是为解决问题的方法限定标准。让用户去探索属于自己的通往计算机的佳境之路吧。
  2. 尽量使操作系统内核小而轻巧。尽管对新功能的追求永无止境,Unix 开发人员还是喜欢让操作系统最核心部分保持最小的规模。当然,他们并不总是能做到这一点,但这是他们的目标。
  3. 使用小写字母,并尽量保持简短。使用小写字母是 Unix 环境中的传统,尽管这么做的理由已不复存在,但人们还是保留了这个传统。今天,许多 Unix用户之所以要使用小写的命令和神秘的名字,不再是因为有其限制条件,而是他们就喜欢这么做。
  4. 保护树木。Unix 用户普遍不太赞成使用纸质文档。而是在线存储所有文字档案。此外,使用功能强大的在线工具来处理文件是非常环保的做法。
  5. 沉默是金。在需要提供出错信息的时候,Unix 命令是出了名地喜欢保持沉默。虽然很多经验丰富的 Unix 用户认为这是可取的做法,可其他操作系统的用户却并不认同此观点。
  6. 并行思考。大多数任务都能分解成更小的子任务。这些子任务可以并行运行,因而,在完成一项大任务的时间内,可以完成更多子任务。今天已涌现出大量对称多处理(symmetric multiprocessing ,SMP)设计,这说明计算机行业正在朝着并行处理的方向发展。
  7. 各部分之和大于整体。小程序集合而成的大型应用程序比单个的大程序更灵活,也更为实用,本条准则正是源于此想法。两种解决方案可能具备同样的功能,可集合小程序的方法更具有前瞻性。
  8. 寻找 90%的解决方案。百分百地完成任何事情都是很困难的。完成 90%的目标会更有效率,并且更节省成本。 Unix 开发人员总是在寻找能够满足目标用户 90%要求的解决方案,剩下的 10%则任由其自生自灭。
  9. 更坏就是更好。Unix 爱好者认为具有“最小公分母”的系统是最容易存活的系统。比起高品质而昂贵的系统,那些便宜但有效的系统更容易得到普及。于是,PC 兼容机的世界从 Unix 世界借鉴了此想法,并取得巨大成功。这其中的关键字是包容。如果某一事物的包容性强到足以涵盖几乎所有事物,那它就比那些“独家”系统要好很多。
  10. 层次化思考。Unix 用户和开发人员都喜欢分层次来组织事物。例如,Unix 目录结构是最早将树结构应用于文件系统的架构之一。Unix 的层次思考已扩展到其他领域,如网络服务命名器、窗口管理、面向对象开发。

以上内容摘自《Linux/Unix设计思想》

作者Mike Gancarz是美国佐治亚州亚特兰大市的一名编程及应用顾问。他的团队使用Linux、Unix和Java工具,为金融服务行业开发出多个获奖的解决方案。作为Unix应用程序设计专家,他不遗余力的推广Unix已达二十多年。作为开发出X Window System的团队成员,Mike Gancarz还始创了一些至今仍应用在Linux的最新窗口管理器中的可用性观念。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章