Knowing and ignorance
Lawd, there’s so much I don’t know. And I don’t mean this as a general admission of ignorance or defeat: I mean, very concretely, that there are so many things that I know I don’t know. The more I inquire into computers, the greater vistas of previously unknown unknowns open themselves up to view: the more I realize I didn’t know what I didn’t know. And the more I know I don’t know, the less it feels like I know.
Ellen Ullman, whose essays are manditory reading for all tech and tech-adjacent people, explains in her classic book Close to the Machine how she keeps up with the dizzying amount of learning required in our profession:
I’ve managed to stay in a perpetual state of learning only by maintaining what I think of as a posture of ignorant humility. … Knowing an IBM mainframe—knowing it as you would a person, with all its good qualities and deficiencies, knowledge gained in years of slow anxious probing—is no use at all when you sit down for the first time in front of a UNIX machine. It is sobering to be a senior programmer and not know how to log on.
There is only one way to deal with this humiliation: bow your head, let go of the idea that you know anything, and ask politely of this new machine, “How do you wish to be operated?” If you accept your ignorance, if you really admit to yourself that everything you know is now useless, the new machine will be good to you and tell you: here is how to operate me.(??, ???? page 101–102)
Arrogance, though, is also necessary: without it, we do not have the conviction that we can learn what we have to. As a programmer, I have to “[think] that, if I [tinker] a bit, I [can] make anything work. That I [can] learn anything, in no time, and be good at it.” (??, page 98) Ullman ephasizes that
arrogance is a job requirement. It is the confidence-builder that lets you keep walking toward the thin cutting edge. It’s what lets you forget that your knowledge will be old in a year, you’ve never seen this new technology before, you have only a dim understanding of what you’re doing, but—hey, this is fun—and who cares since you’ll figure it all out somehow.(??, page 98)
It is only by having rediculous confidence in our own abilities that we are able to plough forward through our ignorance: otherwise, we are paralyzed by our own ignorance.
Now, how do I navigate the posture of ignorant humility and brazen arrogance? How I do acknowledge that there is no much I don’t know, and that there is nothing I cannot learn? It is a common truism that all young programmers think that they’re the greatest programmer who ever lived. Linus Torvalds (somwhere) said that this arrogance enabled him to program a UNIX-style kernel for his x86 machine. Larry Wall pointed out that arrogance is one of the crucial requirements for a programmer: you have to be willing to attempt rediculously ambitious projects.1 necessary for a project to survive: you have to be able to recognize your own limitations so that the thing doesn’t grow beyond your ability to understand, much less maintain, it. You have to be able to say “I don’t know” when you don’t know, so that you are able to learn.
I think that the worst situation is to believe that you have nothing left to learn: this is surely a delusion. It is simply not possible that you know everything there is to know: there is nobody who isn’t operating “on a placid island of ignorance in the midst of black seas of infinity.”2 As Ullman points out,
The corollary of constant change is ignorance. This is not often talked about: we computer experts barely know what we’re doing. We’re good at fussing and figuring out. We function well in a sea of unknowns. Our experience has only prepared us to deal with confusion. A programmer who denies this is probably lying, or else is densely unaware of himself.(??, page 110)
It’s essentially a given that there’s something you don’t know; what you have to learn isn’t any particular system or skill, but how to learn any particular system or skill. A friend of mine, Eliza, is now working as a programmer at a large credit card company but was trained as a systems engineer at university. I asked her how she handled working a job in something that she wasn’t really trained to do, and she said “you can figure it out once you have the understanding.” I heard the italics when she said it. This understanding is, on the one hand, a knowledge of the unshaking, unchanging bottom of what a computer is and what it does, and on the other hand the conviction that, equipped with enough pluck, tenacity, and plain ass-headed stubborness you can figure anything out. Hell, if someone built it, someone else can figure out how it works.
Now this understanding is precisely a form of ignorance: we understand not something in particular, but the general form of how to make known our unknowns. Having acknowledged our ignorance in the face of a new machine, it opens itself to us. At this point, Ullman instructs us:
Now you can be arrogant again. Now you must be arrogant: you must believe you can come to know this new place as well as the old—no, better. You must now dedicate yourself to that deep slow probing, that patience and frustration, the anxious intimacy of a new technical relationship. You must give yourself over wholly to this[.](??, page 102)
Perhaps this is one formulation of the hacker ethos: “I don’t know, but I can figure it out.” The hacker is convinced that, with enough “deep slow probing” and “patience and frustration”, they can approach the machine with “the anxious intimacy of a new technical relationship”. I know that I don’t know this this or that thing or the other thing: this is a form of power. Only by accepting a position of ignorant humility can we allow ourselves to learn. But we need to, in our humility, understand that we can learn what the machine has to teach us: it will, as we probe deeper and deeper into its arcana, unfold itself to us. If we give up, if we say, “I can’t figure it out”, then we are defeated and without understanding. Because understanding isn’t knowledge: it’s a conviction, an ethos, a drive—it’s a kind of humble arrogance that embraces the multiplying of known-unknowns. Because once we learn how to learn, once we understand that we can learn, we are rewarded for our efforts: our ignorance is repayed in knowledge, our humility in arrogance, our inability in virtuosity—at least until we run into the next thing we don’t know.
Footnotes:
The full quote is “Three great virtues of programming are laziness, impatience, and hubris,” from (??, a) The essay, though, goes on to discuss “some other virtues: diligence, patience, and humility.” He continues, “If you think these sound like the opposite, you’re right. If you think a single community can’t embrace opposing values, then you should spend more time with Perl. After all, there’s more than one way to do it.” The last is a classic aphorism of Perl, the programming language Wall designed and implemented.
HP Lovecraft, “Call of Cthulhu”.