本书主要介绍了Unix系统领域中的设计和开发哲学、思想文化体系、原则与经验,由公认的Unix编程大师、开源运动领袖人物之一Eric S. Raymond倾力多年写作而成。包括Unix设计者在内的多位领域专家也为本书贡献了宝贵的内容。本书内容涉及社群文化、软件开发设计与实现,覆盖面广、内容深邃,完全展现了作者极其深厚的经验积累和领域智慧。
序\r\nPart 1 \r\n 第1章 哲学\r\n 1.1 文化?什么文化?\r\n 1.2 Unix 的生命力\r\n 1.3 反对学习Unix 文化的理由\r\n 1.4 Unix 之失\r\n 1.5 Unix 之得\r\n 1.5.1 开源软件\r\n 1.5.2 跨平台可移植性和开放标准\r\n 1.5.3 Internet 和万维网\r\n 1.5.4 开源社区\r\n 1.5.5 从头到脚的灵活性\r\n 1.5.6 Unix Hack 之趣\r\n 1.5.7 Unix 的经验别处也可适用\r\n 1.6 Unix 哲学基础\r\n 1.6.1 模块原则:使用简洁的接口拼合简单的部件\r\n 1.6.2 清晰原则: 清晰胜于机巧\r\n 1.6.3 组合原则:设计时考虑拼接组合\r\n 1.6.4 分离原则: 策略同机制分离,接口同引擎分离\r\n 1.6.5 简洁原则:设计要简洁,复杂度能低则低\r\n 1.6.6 吝啬原则: 除非确无它法,不要编写庞大的程序\r\n 1.6.7 透明性原则:设计要可见,以便审查和调试\r\n 1.6.8 健壮原则: 健壮源于透明与简洁\r\n 1.6.9 表示原则: 把知识叠入数据以求逻辑质朴而健壮\r\n 1.6.10 通俗原则:接口设计避免标新立异\r\n 1.6.11 缄默原则:如果一个程序没什么好说的,就保持沉默\r\n 1.6.12 补救原则: 出现异常时,马上退出并给出足量错误信息\r\n 1.6.13 经济原则: 宁花机器一分,不花程序员一秒\r\n 1.6.14 生成原则: 避免手工hack,尽量编写程序去生成程序\r\n 1.6.15 优化原则: 雕琢前先得有原型,跑之前先学会走\r\n 1.6.16 多样原则:决不相信所谓“不二法门”的断言\r\n 1.6.17 扩展原则: 设计着眼未来,未来总比预想快\r\n 1.7 Unix 哲学之一言以蔽之\r\n 1.8 应用Unix 哲学\r\n 1.9 态度也要紧\r\n 第2章 历史——双流记\r\n 2.1 Unix 的起源及历史,1969-1995\r\n 2.1.1 创世纪:1969-1971\r\n 2.1.2 出埃及记:1971-1980\r\n 2.1.3 TCP/IP 和Unix 内战:1980-1990 \r\n 2.1.4 反击帝国:1991-1995\r\n 2.2 黑客的起源和历史:1961-1995\r\n 2.2.1 游戏在校园的林间:1961-1980\r\n 2.2.2 互联网大融合与自由软件运动:1981-1991 \r\n 2.2.3 Linux 和实用主义者的应对:1991-1998\r\n 2.3 开源运动:1998 年及之后\r\n……\r\nPart 2\r\nPart 3\r\nPart 4\r\n附录A 缩写词表\r\n附录B 参考文献\r\n附录C 贡献者\r\n附录D 无根的根:无名师的Unix 心传\r\nColophon\r\n索引
序
Preface
Unix is not so much an operating system as an oral history.
与其说Unix是个操作系统,不如说是一部口述历史。
——Neal Stephenson
知识和专能差异巨大,凭借知识可以推断出该做什么,而专能让你甚至在无意之间,条件反射似的把事情做好。
这本书确实有关“知识”,但更着眼于“专能”。你将学到那些Unix专家们都不自知的Unix开发知识。少一点技术,多一些共享文化:显见和隐微的,直观和潜流的——这是本书和大多数Unix书籍不同的地方——不止于方法,更重乎理念。
理念于实用大有裨益,有太多设计不良的软件:体积臃肿,难于维护、移植和扩展——这些都是蹩脚设计的症候。我们希望本书的读者能品出什么是Unix所教示的良好设计。
本书分为四部分:场景、设计、工具和社群。第一部分(场景)涉及哲学和历史,为后续内容埋下伏笔。第二部分(设计)将Unix哲学的原理细分为有关设计与实现的、更专门的建议。第三部分(工具)着眼于Unix所提供的工具,可助你解决问题。第四部分(社群)则讲述人与人之间的事务与约定,而这正是Unix文化拥有高效能的原因。
这本书是关于共享文化的,我从未想像过独自完成它。你会发现正剧中包含数位Unix资深专家的客串演出,正是这些人塑造了Unix的习俗。本书曾有过公开大范围的审阅过程,这期间我邀请这些明星人士对书稿进行评审与研论。这些意见没有湮没在本书定稿中,而你可以在书中聆听到他们的真实声音:无论是为本书呐喊助阵、还是摇头反对。
本书中用到人称“我们”时,我并不是虚张声势,仅以此说明这是整个社群都清楚明了的事实。
因为本书着力传递文化,因此加入了很多野史和坊间传说,这在技术书中并不多见。希望你喜欢,这些东西其实是Unix程序员的教养。须弥不重,芥子不轻。我们希望以这种方式更好地讲述故事。了解Unix的由来和变迁,会培养你对Unix风格的直觉。
同样地,基于此,我们不打算使用回述历史的腔调。你会发现本书参考了众多时下信息。我们不希望给你一种错觉:书里说的都是亘古不变的终极真理。参考时下的信息这一做法,也提醒读者,三十年河东,三十年河西,眼前所见,也许过不了多久就会过时,而需要重新检省。
另外,本书不是C教程,不是Unix命令和API的手册,不是sed/yacc/Perl/Python的语言参考,也不是网络编程入门,更不是巨细靡遗的令人费解的X指南。本书也不打算带你巡游Unix内幕和体系。有很多其它的好书涵盖这些领域,本书会在适当的时候告诉你该看哪些。
在这些技术细节外,Unix文化有一个未见诸笔端的行工传统,以熟练工的考量,它已经有几百万人年的发展 。本书即立足于这样一个信念:领会此传统,并将它的设计手法应用到手边,你将成为更好的程序员和设计师。
构成文化的是人,一直以来,获知文化的方式大约是口口相传、潜移默化。本书不打算取代人际的文化传播,但可以促进这一过程,使你能俯耳倾听他人的心声。
谁应该看这本书
如果你是个Unix编程老手,经常教导初哥,或者与人进行操作系统论战时无法阐明使用Unix方案所带来的好处时,可以看看这本书。
如果你是个C、C++或者Java程序员,有其它操作系统的开发经验,现在轮到你开展一个Unix项目时,可以看看这本书。
如果你是个初级或者中级水平的Unix用户,但是没什么开发经验,想学习在Unix下如何高效地设计软件时,可以看看这本书。
如果你不在Unix下编程却发觉Unix的传统给你带来某种启迪,那你就对了,Unix哲学适用于其它的操作系统。因此我们会花比其它Unix书籍更多的篇幅关注非Unix环境(特别是微软的操作系统);当所用到工具或者案例可用于其它操作系统时,我们会告诉你。
如果你是一个系统架构师,正为通用市场或垂直应用准备平台方案或实现策略时可以看看这本书。本书将帮助你了解Unix作为开发平台的强大功能,以及开放源码这个Unix的传统所带来的开发方式。
如果你想学到C编程的细节或者想知道怎么用Unix内核API,本书可能不适合你。Advanced Programming in theUnix Environment [Stevens92]是探究Unix API的经典名著;The Practice of Programming [Kernighan-Pike99]是每个C程序员的必读书目(任何语言的程序员都该看看这本书)。
如何使用这本书
这本书既重实践,更富理念;既包含警世格言,又不忘检点Unix开发中的特殊案例。在每个警句前后,都有生动实例阐明其由来,这些例子绝不来自小儿科式的示例程序,而均出自真实世界满眼所见的运行代码。
我们着力避免以大量代码
姜宏,软件工程师,目前从事协同应用平台之设计与开发。技术兴趣包括Windows 驱动程序开发﹑泛型编程。和侯捷、荣耀共同翻译了《C++ Templates 中文版》。
无封面