One of my favorite books on cooking is Alice Waters’s “The Art of Simple Food”. In it, there is a section where she describes the necessary equipment for a kitchen that produces resoundingly good food.
This is one of my favorite paragraphs from the book, because it reminds me of software and my philosophy toward software creation.
She opens with:
I am a minimalist in the equipment department.
UNIX is the minimal software development environment. Over time, people have created lots of alternative environments, IDEs (Eclipse), meta-IDEs (JetBrains MPS), and neo-IDEs (Lighttable).
But about 4 decades ago, operating under a set of severe hardware constraints, some of the world’s greatest computer scientists and engineers created a minimal, but highly functional, environment: UNIX.
I don’t like a lot of gadgets and I don’t like cluttering up the kitchen with things I rarely use. My friends tease me and call me a Luddite because I don’t particularly like even small electrical appliances.
Graphical user interfaces were not designed for software chefs. They were designed for software patrons.
The electric carving knife buckles under the mildest pressure; a well-sharpened, ten-century-old design will slice through it cleanly.
UNIX identified that, as programmers, we tend to work with a few simple concepts. Standard input, standard output, standard error. Plain text files. Streams. Pipelines. Redirection. Editors. Shells.
Put these together and you have a few, well-made tools that can operate optimally in a wide range of situations.
My friends may still ridicule my full-screen terminal windows and Linux on the desktop. But I am not a stubborn hold-out for a past. I am, instead, a stubborn hold-out for the simplicity of well-designed things.
Instead, I love to use a mortar and pestle and have hands-on contact with the food. That may be unusual these days, but I’ve found you don’t really need that much equipment.
Code is text. Text is code. This may be seen by many as a relic, but it is also a hard truth.
Those who love UNIX can master the manipulation of text. We do this by working closely with the text, every day. We don’t try to abstract it into a million windows, tabs, and tree panels.
We learn to love text and embrace its simplicity and power as an expressive form of logic and data.
I tend to use the same few knives and pots and pans over and over again. What matters is, they’re comfortable, well-made, hard-wearing, and long-lasting.
ls, find, grep, sed, diff, rsync, bash, vim.
In my modern kitchen, I add git, python, ipython — newer tools made in the spirit of the old, under the same principles.
Tools that are comfortable, well-made, hard-wearing, and long-lasting. This is the equipment I like in my software kitchen.
Unfortunately no standard UNIX tool solves the problem of browsing and learning arcane Java APIs and 10-level deep directory structures.
Actually, I can think of three: Perl, Python, and Ruby. 😉