Unix 哲学
作者:Mike Gancarz
出版社:Digital Press
ISBN:1-55558-123-4
价格:$19.95
评论者:Belinda Frazier,bel@ssc.com
我最初被这本书吸引是因为它的标题以及引言中的这句话:“Unix 操作系统的创造者从一个激进的概念开始:他们假设他们的软件用户从一开始就具备计算机知识。” 当然,正是这种假设使得 Unix 多年来在技术、大学、计算机知识丰富的环境之外的应用受到了很大限制。这本书令人满意地解释了 Unix 操作系统是如何以及为何发展成现在的样子;令人信服的论点解释了为什么 Unix 哲学允许良好的软件设计,以及为什么作者认为 Unix 将成为世界上的操作系统。
这本书主要面向尚未用过 Unix 的读者,但作者也希望有经验的 Unix 程序员能够多次重读它,以免忘记 Unix 哲学的九大主要原则,以及那些不那么严格“执行”的次要原则。(我认为“真正的” Unix 程序员通过瞧不起那些偏离真正 Unix 哲学的人来实现执行。)
这本书赞扬了 Stephen Bourne、William Joy、Brian Kernighan 和 Dennis Ritchie,以及许多为 Unix 哲学做出贡献的人,他们在早期都为 Unix 做出了重大贡献。例如,William Joy 带来了文本编辑和类似 C 语言的命令语言(他开发了 vi 和 C-shell);Dennis Ritchie 为我们带来了 C 编程语言。
Unix 哲学的主要原则(每个原则都有次要原则)如下
小即是美。
让每个程序都做好一件事。
尽快构建原型。
选择可移植性而非效率。
将数值数据存储在纯 ASCII 文件中。
利用软件杠杆来发挥您的优势。
使用 Shell 脚本来增加杠杆和可移植性。
避免封闭的用户界面。
将每个程序都做成过滤器。
作者用一个简单的、真实世界的例子(或“案例研究”)来介绍每个原则,然后通过包含非技术性的计算机世界例子来进一步解释为什么该原则很重要。
原则 1. 小即是美。本书提供了一个例子,说明大众汽车如何在美国开展了一场以“小即是美”为口号的广告活动,以推广大众甲壳虫,但这个想法在美国普遍被忽视,直到油价上涨,美国人才了解到小型汽车的优势。作者将这些新晋的小型汽车爱好者比作 AT&T 贝尔实验室的程序员,他们发现小型程序也比大型程序更容易处理、维护和适配。
在非 Unix 环境中,一个将一个文件复制到另一个文件的程序可能包含,正如书中给出的例子,执行文件复制之外的十二个步骤。这十二个步骤执行额外的任务,其中一些任务被某些人认为是“安全功能”。这些步骤可能包括检查文件是否存在、输出文件是否为空,以及提示用户看看他们是否知道自己在做什么(例如,“你真的真的确定你想这样做吗,你妈妈知道你在这样做吗?”)等等。序列中可能只有一个步骤是实际的复制命令。一个 Unix 程序(或命令)将只包含一个复制命令步骤。其他小型程序将分别执行其他 11 个步骤,如果 Unix 用户想要使用这些额外的步骤,可以将它们一起使用。尽管作者有意避免在本书接近结尾时才给出 Unix 示例,但我很想看到几个 Unix 命令串在一起,以完成这十二个步骤描述的所有任务。
原则 4. 选择可移植性而非效率。这里给出的例子是 Atari 2600,它是第一款成功的家用视频游戏机。大多数游戏卡的代码都非常高效,但不可移植。随着新硬件(“5200”)的出现,代码必须重写才能在 5200 上运行,这需要时间和金钱。作者提出,如果 Atari 的代码是可移植的,它本可以成为世界上最大的软件供应商。
本书用三页的篇幅,以销售特百惠为例,来说明“利用软件杠杆来发挥您的优势”原则。谁会想到多层次营销方案是编写软件的好方法呢?
杠杆原则的一个次要原则是允许其他人使用您的代码来杠杆化他们自己的工作。许多程序员囤积他们的源代码。作者指出,“Unix 的成功很大程度上归功于其开发者认为没有特别需要对其源代码保持强力控制。” 与开发新操作系统相比,Unix 源代码最初相当便宜,公司开始选择 Unix 作为构建其软件的平台。选择 Unix 的公司将其精力和金钱用于开发他们的应用程序,而不是用于维护和开发操作系统。
这本书中有太多页试图说服顽固的 Unix 憎恨者,例如试图安抚那些以其大型程序的页数来衡量自己的程序员的自尊心。我对书中关于程序员行为方式的心理学解释有点反感,直到我意识到这些都是温和的劝说——而 Unix 爱好者在谈论其他操作系统时并不以温和著称——这些劝说实际上可能会打动甚至终身 Brand X 操作系统的用户。
我强烈向来自所有操作系统环境的人们推荐这本书。