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 the tolerance for nuance and habit of precision prerequisite to all kinds of intellectual progress.
In Latin’s case it was a sad diminuendo; but the role is one worth filling. Programming, which begins with the abstract 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.
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 a 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 Platonists; and if not, what they are instead is unimportant. Mathematicians, even confessed 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.