LUG/IP
Events
 Meetings
 Photos
Services
 Hardware Sig
 Library
 Reviews
 Documents
Interact
 Mailing Lists
 Chat
About Us
 Members
 Finances
 Sponsors

^Home
^Donate
@Sponsor
$Buy Stuff
@Contact Us

Book Review: The Art of Unix Programming The Art of UNIX Programming
Author: Eric S. Raymond
Publisher: Addison-Wesley; (2004)
ISBN: 0131429019

Reviewer: Gregory Haase

About the Book
The Art of UNIX Programming is Eric S. Raymond's account of the 30 years of Unix development and the history and philosophy behind it. He discusses why Unix works from a high level - not exactly HOW it works, but WHY. In his definition of Unix, ESR includes all variants and Unix-like operating systems, including Linux. This book is a culmination of a 5-year writing process and peer reviews with some of the top names in UNIX. Also included throughout the book are hundreds of quotes and sidebars from 13 UNIX pioneers, including Ken Thompson and Dennis Ritchie.

The book consists of 20 Chapters stretched across the following 4 sections:

  1. Context: Philosophy and History of Unix, and how it compares to other operating systems
  2. Design: Modularity and Transparency, Use of Interfaces and Mini-Languages, Configuration
  3. Implementation: Comparison of Languages and Tools, and the Importance of Reuse
  4. Community: Portability, Documentation, Open Source, and the Future of UNIX

Expectations
I initially chose to read The Art of UNIX Programming for several reasons. I'm relatively new to coding in general, and I'm starting to become more involved with GNU/Linux. Because I am new at it, I was concerned that I would do some things wrong, and I wanted to get an idea of how to do things correctly. I have also read some other writings by Eric S. Raymond, including The Cathedral and the Bazaar, and I enjoyed his perspective on the Open Source Movement. I had also heard that the book contained a lot of UNIX history, and I was definitely interested in that.

There were a couple of things that I was concerned about before I began reading. I had heard that ESR slams Microsoft pretty badly in this book, and I was concerned that ESRs typical rants and raves against that OS would detract greatly from the overall meaning of the book. I was also worried about depth of content in the book. I was afraid that a lot of it would be over my head since I'm basically a LAMP developer who's just now getting into shell scripting.

Conclusions
Overall, I thought the book was a good read and well worth my time. The book is full of useful knowledge and information, and has a lot of good points. At times, though, the author tends to get a bit wordy, and tends to repeat himself a little too much. Also, one would do good to remember that for a long time Eric Raymond was responsible for the upkeep of the Jargon File. His use of overly big vocabulary words such as orthogonality can send your head spinnning. This is further complicated by the author's need to assign a new vocabulary word where one doesn't exist, such as in chapter 13, where he invents 3 new terms before our very eyes (manularity trap, blivet trap, and adhocity trap). Still I think that almost anybody with an interest in programming can get a lot out of this book. Even though there were some areas that I just couldn't comprehend, I still learned a lot. I plan to read the book again in a few years to see what additional information I can glean from it after I have a bit more experience.

The first section, Context, is easy to read and comprehend, and contains fascinating history about the birth of UNIX, the UNIX wars, and the rise of Linux. Those that have read some of the author's other works will see some familiar strains in this section. He caps this section off with a comparison of UNIX to other operating systems. Although Windows NT is included in this comparison and the author does point out what he perceives as several shortcomings, the points are well laid out and far from what I would consider a wholesale bashing of Microsoft.

The second section, Design, contains some sections that are easy to comprehend, and some that I'm afraid were far over my head. He discusses the importance of modularity, transparency, and the need to keep things as simple as possible. What is important here to pay attention to is how the command line works, how everything is input and output in plain ASCII format, and how all these little command line utilities can be chained together to achieve different results. This section then goes into multi-processing and minilanguages, at which point I was pretty much at a loss. Again, the authors need to use or create vocabulary words in this section made it harder to follow. This section also includes information on configuration, which was easy to follow at first but then became more difficult. The last chapter, interfaces, was informative and added substance to what most Unix Administrators and programmers know intuitively - the command line can be a much faster, much easier interface than the GUI.

The third section, Implementation, covers languages and tools at length. Since the languages and tools are compared based on their merits, rather than syntax, this section is easily understood. In the discussion on tools, we learn that the reason that complex IDEs don't exist for UNIX is because there are so many different tools that are capable of doing the job, and because it is very easy for the programmer to set up their own customized IDE. This section also contains information on make and autoconf and version control. There was a whole part of this section which I was completely lost, and that was the discussion about yacc and lex. Finally, he talks about the importance of reuse, and when NOT to write code.

The last section, Community, is comprehendible - although the catalog of documentation tools is daunting and perhaps a little over done. But in general, this section steers us out of the technical nature of sections 2 and 3 and back into the philosophical. The importance of Portability, and with that Documentation, is discussed. The Open Source movement is also reviewed. I skimmed that chapter as it seemed mostly a rehash of The Cathedral and the Bazaar, which I had already read. The last chapter of the book deals with the future of UNIX, and thankfully ESR spares us predictions and delusions of granduear. The main points are be flexible but stick to core principles.

Who Should Read This Book
I think this book should be required reading for students of computer science and computer engineering. This book should also be required reading for someone who is relatively new to Unix and/or OSS programming. This book should be suggested reading for the new breed of Unix Administrators - the hard-core old-school Unix admins lived through most of what this book covers, but a lot of younger Administrators and those studying for Linux Certification can benefit from it. This book should also be suggested reading for anyone that actively writes software applications... regardless of the code base and platform. Finally, if you are just plain interested in Unix, you should read this book.


LUG/IP: Linux Users Group In Princeton, Inc
P.O. Box 5601, Trenton, NJ 08638-0601
Contact Us

LUG/IP is a New Jersey non-profit corporation exempt from federal
income taxation under IRS 501(c)3. Donations are tax deductible.
Serving the Trenton-Princeton area.
"Linux" is a trademark of Linus Torvalds.