Classic UNIX Programming Text Updated
Updating a Classic

Ibrahim Haddad
Tuesday, July 5, 2005 12:18:35 PM
The book is so big. Why is this so and how long did it take you
to update it?
The first edition of APUE weighed in at 744 pages. (My first book was
784 pages long, but appeared much shorter because we used thinner
stock.) The second edition is almost 200 pages longer than the first
because of the new material added. Besides the new chapters, existing
chapters cover new interfaces from the Single UNIX Specification, which
has merged with POSIX.1 since the first edition was printed.
Initially, I spent six months learning to write with Rich's style and
developing a couple sample chapters so that the Addison-Wesley reviewers
could decide if I was the right candidate for the job. After I received
the go-ahead, it took about two and a half years to complete the project.
Was it a fun process to update the book? What did you learn through the process?
The work was fun because the UNIX System provides an enjoyable, elegant
programming paradigm, but it was also frustrating at times. There was
a lot of material to cover, and every time I looked up from the computer,
one of the four platforms I was using was releasing a newer version with
added functionality. Most of my experience had been with System V, so
I learned a lot about FreeBSD, Linux, and Mac OS X. I had to read a lot
of BSD and Linux source code to understand how many of the system calls
and libraries were implemented.
From your perspective, what's so special about the UNIX environment?
The UNIX environment is unequivocally the best operating system
environment I've ever used. The abstractions are simple and elegant.
Tools (commands designed to do one thing well) can be combined in new
ways to solve various problems. Treating files as simple byte streams
allow us to process files using common tools. For example, you don't
need to build a search engine into every new program when you can run
grep. In most cases where the file format isn't ASCII, you can run
strings and pipe the output to grep to get what you need. Although
some people find the command syntax too cryptic, I appreciate anything
that reduces the amount of typing I have to do. Years ago I used one
operating system where the commands were very long, like
"remove-this-file-from-the-directory" instead of "rm." That level of
verbosity resulted in a poorly designed interface.
The UNIX programming environment is especially elegant. Interfaces
are well-thought out, and functionality is decomposed into the basic
building blocks needed to accomplish a wide variety of tasks. One
true test of how well something is designed is to see how easy it is
to modify and extend without having it collapse under its own weight.
The UNIX System has always been easy to enhance and extend to solve
new problems without becoming unusable.
Next: Putting It Together »