I am only a small minnow in the technology ocean, but since it is my natural habitat, I want to make an effort to describe it to you.
As computer programmers, our formative intellectual experience is working with deterministic systems that have been designed by other human beings. These can be very complex, but the complexity is not the kind we find in the natural world. It is ultimately always tractable. Find the right abstractions, and the puzzle box opens before you.
The feeling of competence, control and delight in discovering a clever twist that solves a difficult problem is what makes being a computer programmer sometimes enjoyable.
But as anyone who’s worked with tech people knows, this intellectual background can also lead to arrogance. People who excel at software design become convinced that they have a unique ability to understand any kind of system at all, from first principles, without prior training, thanks to their superior powers of analysis. Success in the artificially constructed world of software design promotes a dangerous confidence.
Today we are embarked on a great project to make computers a part of everyday life. As Marc Andreessen memorably frames it, “software is eating the world”. And those of us writing the software expect to be greeted as liberators.
Our intentions are simple and clear. First we will instrument, then we will analyze, then we will optimize. And you will thank us.
But the real world is a stubborn place. It is complex in ways that resist abstraction and modeling. It notices and reacts to our attempts to affect it. Nor can we hope to examine it objectively from the outside, any more than we can step out of our own skin.
The connected world we’re building may resemble a computer system, but really it’s just the regular old world from before, with a bunch of microphones and keyboards and flat screens sticking out of it. And it has the same old problems.
Approaching the world as a software problem is a category error that has led us into some terrible habits of mind.