The failure mode that goes with the Unix tradition's insistence
on simplicity is that Unix programmers often talk (and sometimes even
behave) as though all optional complexity is accidental. More than
this, there is a strong bias in the Unix tradition toward removing
features rather than accepting optional complexity.
The case for this attitude is easy to make (indeed, we spend
much of this book making it). Clean minimalism makes us feel virtuous
on many levels, and designing for it is a valuable counter to
the natural tendency of software systems to develop
ever-more-elaborate encrustations of ill-considered features. But
computing resources and human thinking time, like wealth, find their
justification not in being hoarded but in being spent. As with other
forms of asceticism, one has to ask when design minimalism stops being
a valuable form of self-discipline and starts being a mere hair shirt
— a way to indulge those feelings of virtue at the expense of
actually
using
that wealth to get work
done.
This is a perilous question, all too easily turned into an
argument for abandoning good design discipline altogether. Unix old
hands often shy away from it, fearing that failing to hold the hardest
possible line against complexity and bloat will lead us inexorably to
damnation. But it's also a
necessary
question.
We'll tackle it directly when analyzing this chapter's case
studies.