This is a book about Unix programming, but in it we're going to
toss around the words ‘culture’, ‘art’, and
‘philosophy’ a lot. If you are not a programmer, or you
are a programmer who has had little contact with the Unix world, this
may seem strange. But Unix has a culture; it has a distinctive art of
programming; and it carries with it a powerful design
philosophy. Understanding these traditions will help you build better
software, even if you're developing for a non-Unix platform.
Every branch of engineering and design has technical cultures.
In most kinds of engineering, the unwritten traditions of the field
are parts of a working practitioner's education as important as (and,
as experience grows, often more important than) the official handbooks
and textbooks. Senior engineers develop huge bodies of implicit
knowledge, which they pass to their juniors by (as
Zen Buddhists put it)
“a special transmission, outside the scriptures”.
Software engineering is generally an exception to this rule;
technology has changed so rapidly, software environments have come and
gone so quickly, that technical cultures have been weak and
ephemeral. There are, however, exceptions to this exception. A very
few software technologies have proved durable enough to evolve strong
technical cultures, distinctive arts, and an associated design
philosophy transmitted across generations of engineers.
The Unix culture is one of these. The Internet culture is
another — or, in the twenty-first century, arguably the same
one. The two have grown increasingly difficult to separate since the
early 1980s, and in this book we won't try particularly hard.