The Art of Computer Programming


Rays of Enlightenment

After completing my coding bootcamp, I felt like I had stepped into a global subculture of highly-competent self-starters. A world in which the vocational standards were calibrated to at least one standard deviation above anything yet asked of me. And to an extent, my feeling was correct: the work is intellectually demanding and would never dumb itself down on my behalf. It requires everyone involved to spend the rest of their careers fording a river of emerging technologies just to stay conversant, to say nothing of remaining useful. Moreover, anyone wishing to rise high on the currents of trending tech also ought to understand computer programming’s historic milestones.

Like any good geometer knows, finding a ray’s direction requires nothing more than two points and a straightedge. Technological trends are no different: study the wares and writings of yesteryear, familiarize yourself with those of today, and then cast an informed gaze into the future. Of course, the true trajectory of innovation is unknowable until observed, so prediction is at best generalized in the observed direction with only the occasional bullseye. Or, in keeping with the geometric metaphor, though the inverse-square law may pull your imprecise ray of prediction ever away from the ray of true events (as time extends into the future), having knowledge of what was and what is will help set your straightedge close to what will be. Hence, my acquisition of this article’s namesake.

Genesis

Computer science is a conglomeration of a number of disciplines, each with their own progenitors. The force that any one of those disciplines exerted upon the development of computer science has waxed and waned with the decades and would only muddy the waters if treated as a decisive genesis. Even treating the point at which all disciplines converged to make computing possible is still too primordial for my current professional needs. For example, that the Countess of Lovelace may have written the first computational algorithm in the nineteenth century has no bearing on the use of recursion in functional programming in the twenty-first. Instead, I will begin with a work — a treatise — that reveals computer science to be a semi-autonomous, self-actualizing field whose influence on the disciplines of its forefathers is now symbiotic and developmentally contemporaneous. That is, they’ve been subsumed and carried along by computer science as a field theory and praxis.

Donald Knuth, pronounced “ka-NOOTH” (“Knuth: Frequently Asked Questions”), began working on his magnum opus, The Art of Computer Programming, sixty years ago. “I started out in 1962 to write a single book with this sequence of chapters, but I soon found that it was more important to treat the subjects in depth rather than to skim over them lightly” (Knuth vii). Long story, short: he has yet to complete it. Such meticulosity is both a blessing and a curse for programmers. It produces superior code with minimal bugs, but development projects without hard deadlines become behemoths of perpetual growth. It propels individuals to heights worthy of the ACM Turing Award, but leaves anxious acolytes without a completed canon. In other words, work expands to fill the time allotted to it; and, if there’s an unlimited amount of time, the project is effectively immortal.

The End of Knowledge

A curious scholar such as Dr. Knuth will suss out ever more useful curiosities from the computational frontier and record them for posterity so long as there is life in his mind and are curiosities to be sussed. There is no end to what can be known about the unbounded abstractions seeded by the Boolean constraints of 0 and 1. The breadth is such that I am increasingly dumbstruck by the possibilities; but it also makes the binary playground a more resilient repository of mystery and wonder. The value of most things is proportional to the work expended to acquire them; so the knowledge I glean will be imbued with a preciousness worthy of a Nazgûl.

With respect to the relative microcosm of Dr. Knuth’s treatise, the 1997 manuscript in and of itself has more content than a coding catechumen such as myself could ever hope to consume. I have begun to work through the first set of exercises and wrote a solution to the Euclidean Algorithm assignment. The number of solutions to Euclid’s algorithm is finite but simultaneously uncountable. No matter where on the exponential scale of problem-solving one may find oneself, there is always a beautiful, variegated view of infinitesimally-receding patterns of logic below and an infinitely-expanding view above.

Epilogue

There is a comfort in knowing that the canon continues. It gives the extant volumes an energy particular to life yet growing — that old knowledge is directly flowering anew. So, like a watchful gardener, I wait with bated palate.


Works Cited

“Knuth: Frequently Asked Questions.” Cs.stanford.edu, cs.stanford.edu/~knuth/faq.html. Accessed 8 July 2021.

Knuth, Donald E. The Art of Computer Programming. Vol. 1. Addison-Wesley, 1997.