Programming, though not itself a humanity, can serve as one. Consider Latin. By the end, the justification for Latin’s role as the introduction to liberal learning was less to enable students to read the classical authors in the original with comfort, than by its exacting grammar, and its subtle and exact vocabulary, to form the mind to a tolerance for nuance and habit of precision instrumental to all kinds of intellectual progress. (Some Latin boosters even argued that in Latin grammar they could find the origin of all logic.)

In Latin’s case it was a sad dimuendo; but the role is one worth filling. Programming, which begins with the abstracted essence of grammar and subordinates and iterates it to depths which language cannot sustain, enforces a power of expression as exact and as subtle as the expectation of literal interpretation can make it.

Any kind of work that approaches perfection by a cycle of degrees intermitted by trial, feedback, and return to the beginning – draft and revision, model and prototype, mock-up and construction – similarly strengthens the faculties at each return; but programming does it fastest, and most bracingly. Any programmer knows how the pain and boredom of protracted debugging leaves a hollow feeling in the brain like a sore muscle, which becomes, after a rest, the certainty of having become a little smarter.

For the education of a mind (not a jobholder, which has other priorities) I wish programming were taught before any math beside arithmetic, and even before English grammar. Proficiency is not required; to instill a respect for whitespace and documentation, and a physical disgust for unclosed quotation marks or parentheses, would be just enough.


Programming is the ultimate mimesis. Its reach is the reproduction, not only of the world and everything in it, but of all possible worlds. In this way – because to address anything well, a programmer must do so in a way which potentially addresses everything – programming is the only great centripetal intellectual force of our time; and programming is the only profession left where it pays to have a universal mind.

Kenneth Clark, in his essay “The Concept of Universal Man,” usefully defines a universal mind, on the model of the Renaissance and the Enlightenment, as one which, seeing a natural phenomenon, wishes to understand it; which, seeing a human design, wishes to improve it; and to do all this for humanity’s benefit.

Programming does not, by itself, yield those values; but it gives that power. The willingness to see designs and procedures as expedient and perishable contrivances – not the unanswerable inheritance of wisdom or tradition – is predicated on the ability to extract them from the inertia of their contexts by translating them into a precise and neutral language.


In this way, programming drives toward philosophy. Ada Byron, the first person to understand programming, called herself “a metaphysician and an analyst”; and programmers have never been able to escape philosophy. In object-orientation they created the first experimental metaphysics; and throughout their work, they run into old problems as they work toward the old goal: clear and distinct ideas.

The Stoics required philosophy to show and to resolve definite choices in life; they required the philosopher to be visibly and measurably changed by the practice of philosophy. This should not be confused with a positivist dismissal of word-chopping (though some of the same arguments recur), or a pragmatist tolerance for vagueness as long as it yields results. Programmers are willing to make and adhere to subtle distinctions, even without obvious applicability, as long as they are part of an useful perspective; and they are the more unwilling to leave an idea vague as it proves useful, believing that its refinement can only make it more potent, and more widely useful.

It is suggestive that programmers’ favored literary mode is the essay – which Montaigne created on the model of Stoic discourses.

This resemblance to Stoicism is not accidental; it is so strong that it is two-way. Chrysippus, the father or forerunner of Stoicism, was also one inventor of formalized logic (even partially symbolic). Had the Romans invented computers, he would have stood in the same relation to their computer languages that Boole does to ours.

Such an affinity between a discipline and a school of philosophy is familiar from mathematics. Mathematicians are either Platonists, or not; and if not, that is what matters. What they are instead is incidental. Mathematicians, even naming themselves Platonists, do not support the scheme of the Republic; programmers do not teach the eternal return (or even the infinite loop).

But show me a committed programmer who does not believe in the possibility and necessity of a radical and unconditional independence; who does not at once value loyalty as both the best thing that can be offered, and the least that is to be expected; who does not think happiness only as valuable as it is won through courage, not received as a gift or stroke of luck – or, conversely, who does not find unhappiness or querulousness contemptible in the intelligent, as if they should know better; and you have found an exception to the rule.