Against Utility

Wenqi He · Research Software Engineer, NCSA, University of Illinois

What are we producing when we produce software? Processes and behaviors? Or perhaps thoughts and ideas?

Both, apparently. The question then is which is primary. You can produce thoughts and ideas without any resulting process or behavior—a design never implemented, a proof never coded. But there is no creation of processes and behaviors without thoughts and ideas, and the utterance of those. Even God utters things into being.

So we are in the idea production business, like any other intellectual discipline—mathematics, science, law and philosophy. Ideas are accumulated and preserved to be understood by newcomers, and over time the body grows larger than any one person can hold. This is the real meaning of the softness of software—not that it’s easy to change, like clay, but that it accumulates. Clay merely changes shape. Software grows because it is not only a product but also a body of knowledge, just as in those other disciplines. Although software is distinguished from those other disciplines in two important ways: it is incredibly easy in one sense, and incredibly hard in another.

It’s incredibly easy because it doesn’t take a genius to arrive at a solution. The solution is embedded in the problem itself—almost tautologically. As long as you articulate the problem with full clarity, the solution follows. This might require iterative refinement: starting from a vague idea and repeatedly interrogating it. What does this mean exactly? What is it actually supposed to do? What does a correct result look like? There is no chasm between problem and solution of the kind found in other fields, crossable only by a select few. Anyone can arrive at a solution in software, as long as they keep pushing toward clarity and precision.

Software is also incredibly hard—but not because of anything inherent to the problems it solves. The difficulty is entirely cultural. In other intellectual disciplines the primary goal is understanding, and practical utility is a natural but not necessary consequence. Software engineering, being also a branch of engineering, is expected to produce real world effects—and so we are often fixated on just that, at the expense of understanding.

Concerns about intellectual opacity in software are not new. People have criticized the deep learning paradigm as “alchemy”—but that is a bit of hypocrisy, isn’t it? Aren’t people treating ordinary software development as a kind of alchemy as well, especially with AI coding agents nowadays? Frameworks, runtimes, compilers and what not are all black boxes that we happily treat as such, rarely inquiring what lies underneath. Who cares about the chemistry and quantum mechanics when you can produce the elixir—or make things go boom if that elixir idea doesn’t work out.

This matters because software development is so often a collective activity, yet without the shared standards that make collective intellectual work possible in other disciplines. In mathematics, the undergraduate curriculum trains the uninitiated into a particular way of thinking and holds them to it—bad thinking is penalized in homework and exams, and the rigor is non-negotiable and socially enforced from the start.

Software has no equivalent tradition. If anything, it has the opposite—a tinkering and hacking culture that prizes freedom, creativity and expression, which are genuine virtues, but at the expense of the rigor and discipline that any serious intellectual tradition also requires. It has an overwhelmingly liberal culture preoccupied with what can be made to happen, and indifferent to the intellectual integrity of how it happens. This is a deep cultural, social, perhaps even moral deficit.

So here we are. People of wildly differing intellectual habits, never forged into a common standard—and now their AI proxies too—contribute to the same codebase, and the result is exploding complexity, incomprehensibility, brittleness, and eventually what gets dubbed “legacy systems.”

And “legacy” has nothing to do with age. Euclid is not “legacy.” Neither is Newton’s Principia or Kant’s Critique. They never will be. In contrast, unreviewed AI-generated code from ten minutes ago is already legacy before the characters are even flushed to disk. Legacy is a cognitive condition, not a temporal one. And as such, it is entirely a product of culture—of a philistine, instrumentalist culture that, unmoored from classical values, has nothing left to worship but utility—and so retreats proudly towards medieval ignorance and idleness in the name of technology and progress.