Some famous papers and a few books by Unix's early developers
have mined this territory before. Kernighan and Pike's
The Unix Programming Environment [Kernighan-Pike84] stands out
among these and is rightly considered a classic. But today it shows
its age a bit; it doesn't cover the Internet, and the World Wide Web
or the new wave of interpreted languages like Perl, Tcl, and
Python.
About halfway into the composition of this book, we learned of
Mike Gancarz's The Unix Philosophy [Gancarz]. This book is excellent within its
range, but did not attempt to cover the full spectrum of topics we
felt needed to be addressed. Nevertheless we are grateful to the
author for the reminder that the very simplest Unix design patterns
have been the most persistent and successful ones.
The Pragmatic Programmer [Hunt-Thomas] is a witty and wise
disquisition on good design practice pitched at a slightly
different level of the software-design craft (more about coding, less
about higher-level partitioning of problems) than this book. The
authors' philosophy is an outgrowth of Unix experience, and it is an
excellent complement to this book.
The Practice of Programming [Kernighan-Pike99] covers some of
the same ground as The Pragmatic Programmer
from a position deep within the Unix tradition.
Finally (and with admitted intent to provoke) we recommend
Zen Flesh, Zen Bones [Reps-Senzaki], an important collection of
Zen Buddhist primary sources. References to Zen are scattered throughout
this book. They are included because Zen provides a vocabulary for
addressing some ideas that turn out to be very important for software
design but are otherwise very difficult to hold in the mind. Readers
with religious attachments are invited to consider Zen not as a
religion but as a therapeutic form of mental discipline — which,
in its purest non-theistic forms, is exactly what Zen is.