Circuit-board designers and the CEOs of public companies may seem odd bedfellows, but they share a common interest: taming complexity.
Programmers too spend our days wrangling problems too large to tackle in one go, and over the years we’ve learned a thing or two about cracking problems into simpler parts. Deadlines, entropy, product managers, and other agents of darkness all complicate our efforts to see simplicity through to its logical conclusions, but—with deepest apologies to Hunter S. Thompson—the tendency is always to push it as far as you can.
Files get pretty far.
In Unix and its successors, file streams offer a unifying abstraction for input, output, storage, and a dizzying array of peripheral devices. By enabling the output from one process to arrive as input to the next, streams also hold the key to the Unix’s closest-held precept–to do one thing and do it well. And by allowing users to build complex behavior from well-understood parts they’re an essential, and possibly the most essential, tool in all of application development.
All of this is to say that streams provide a radically simple interface for many of Unix’s best-loved utilities–and that learning to use may even inspire simpler interfaces of your own. If you’re only going to learn one thing this month, you could do a lot worse than streams!