By: Eric S. Raymond
Addison-Wesley, September 2003, 525 pages, ISBN 0131429019 (amazon.com, search)
Eric S. Raymond has achieved a wide reputation; as an advocate of Open Source (as opposed to Free Software), as a writer of manifestos (The Cathedral and The Bazaar), as the original maintainer of The Jargon File, and even as a programmer (Fetchmail, and recently Bogofilter). His advocacy has been sometimes at the expense of Richard M. Stallman, which has not always redounded to Raymond's benefit.
With The Art of UNIX Programming, Raymond moves into a new area (for him), the software engineering guide. This is a relatively obscure genre comprising a relatively small number of books, including to my way of defining it, Modern Operating Systems (Tanenbaum), The Practice of Programming (aka "The Wiener Dog Book", by Kernighan and Pike), The Magic Garden Explained (currently selling for $300 used!!), and a few others.
These books share the common goal of imparting maximum accumulated wisdom to those best positioned to take advantage of it. These books target the folks who live, eat, and breathe software.
While not a cookbook, The Art of UNIX Programming does provide an extensive set of rule-of-thumb and the-right-way recommendations for designing interfaces and for generally maintaining a UNIX style approach to implementation. Examples are presented of interfaces to protocols, and to client software, mixing the discussion of frontends and backends in a unified context that works very well.
Raymond makes no bones about being an active critic of the various incarnations of Microsoft Windows. He makes strong arguments against the sanity of the windows development model, and supports those arguments very well. Perhaps it is a reflection of my own prejudice that I can support this while being offended by his treatment of Richard Stallman. But then again, Windows really sucks.
A pet peeve of mine is unneccesary bashing of the Tcl programming language. Raymond takes a far greater number of pokes at Perl than at Tcl, but does nevertheless propagate the myth that Tcl's namespace facility is in some way a limiting factor to scalability of Tcl programs. This is, of course, ridiculous, and it is unfortunate that nobody capable of correcting this mistake was in the right place at the right time to nix it. Not only does Tcl have a well implemented namespace facility, but it has a brilliant core socket abstraction, and most importantly, an efficient event loop, similar to the one that Raymond lauds in X (hence it's ability to manage complex Tk programs).
I find considerable evidence within the text of The Art of UNIX Programming suggesting that the original title may have been The Zen of UNIX Programming, or maybe Zen and The Art of UNIX Programming,. I think the references to Zen in the text would seem less out of the blue if the title had been so, anyway. A more on-the-ball editor could have made a better job of it.
In spite of many things that I have written here that seem critical of the book, I recommend The Art of UNIX Programming highly. I have given several copies to friends, and I have recommended it as a software design and implementation handbook at work. I recommend this book to anyone working in a UNIX environment in any capacity, but to coders especially. Raymonds observations on threads are worth the price of the book, to anyone willing to heed the warning.
Buy it at [BookPool] for 28% off of the list price (and free shipping)!