The Art of UNIX Programming by Eric S. Raymond
Publisher: Addison-Wesley Professional
The Art of UNIX Programming (TAOUP) gets my vote for the most misleading title ever. The book contains very little code, which is quite surprising given a book about, well, programming. Rather, TAOUP offers a look at the history of UNIX, its community and design philosophy. If I should put the book in any category, it would be software architecture. TAOUP covers the whole spectrum of high-level decisions involved in building software. Everything from protocols, GUIs and domain-specific languages to documentation and licensing models. And despite the UNIX (defined to include Linux) in the title, the greater part of the book is applicable to software development in general.
This spring I read Fred Brooks excellent work The Design of Design . In his book, Brooks emphasizes the importance of exemplars in software. Brooks point is that exemplars serve as models and inspiration for new designs, while at the same time warns of potential mistakes. TAOUP is a step in that direction. The core of TAOUP consists of a series of case studies, each one highlighting one specific area such as application protocols or parsing. Eric S. Raymond (ESR) walks us through the design decisions and trade-offs. Often, discussions of alternative solution are included. Initially, I lacked code samples to complement the discussions. But since virtually all case studies refer to open-source projects, the code is available to the reader (the obvious exceptions are the contrasting solutions in propriertary products like Windows). This is indeed a good decision. Now I, as a reader, can choose the level of detail I'm interested in myself.
The case studies are the most valuable part of the book. But there's more to it. The history and principles of UNIX have a certain overlap with Linux and the Unix Philosophy and the two books complement each other nicely (you really want to read them both). The book concludes with a rather complete getting-started guide to open-source development, including tips about documentation, patches and discussions of licensing models. It's a solid guide offering information rarely seen in print. The only part of TAOUP that hasn't aged gracefully since 2003 is the discussion about programming languages. First there's the technical aspect. For example, one disadvantage ESR sees with Java is the incompatibility between JDK 1.1 and newer versions. That may have been a true problem at the time of writing, but has since long been passed to history as a dark memory. Second, trends do change. That means that the discussion of dynamic languages (TCL, Python, Perl) is now largely obsolete.
Finally the style of the book deserves special mention. ESR is a controversial person, but no one can deny his writing skills. TAOUP is written in an engaging and entertaining style that flows naturally. The most interesting stylistic elements are the review comments from UNIX legends such as Ken Thompson, Brian Kernighan and David Korn. ESR simply includes their comments, unedited and with attribution, in the text. Many of those comments provide deep insights and add value to the discussions (particularly the comments that disagree with ESR).
TAOUP deserves a wider audience than the title suggests. It is one of those books that I recommend to every software developer, independent of development platform.
Reviewed July 2010