In 1962, Donald Knuth accepted a commission to write a book about compiler design. When he began to tackle his subject he realised that before he could write his book, a deeper analysis of the basic concepts of computer programming was required. He started writing what soon became a twelve volume book. Each volume was initially conceived as a chapter until he realised that he had miscalculated how many of his handwritten pages would make a single printed page. He’d assumed five, his publisher told him 1 1/2. The first three volumes were published between 1968 and 1973 but when he came to prepare a second edition of Volume 2, Knuth realised that hot type was no longer available and it had to be typeset all over again; no easy task given the plethora of mathematical symbols in these books.
Frustrated by the inadequacy of the digital typesetting software available at the time, he set out to write a program that would enable him to write the rest of his book. Eight years later he released TeX, a typesetting system that has since spawned countless variations.
While developing TeX, he realised that the font description languages available weren’t up to scratch so he developed Metafont, a language that describes each glyph through a dizzying series of mathematical descriptions.
The first edition of volume 4 of The Art of Computer Programming was finally published in 2005. Volume 4A was published in 2011, when Knuth was 73. There are at least six more volumes planned.
No one would begrudge this Aquinas of computer science his side-projects and detours, and nearly every scientist and science student since then has benefited from the availability of TeX, but it’s not hard to see what’s going on here. In the nerd terminology that Knuth himself is almost certainly familiar with, this is called yak shaving: indulging in an intermediate activity to enable, but maybe also postpone, a larger project.
There is a way in which this website is a big procrastination machine. Writers used to sharpen their pencils rather than get on with their work. Now I find it possible to convince myself that before I can publish anything I need to build a website that can automatically grab my notes, style and cross-reference them. 1
But why would I procrastinate on writing by coding? Why do I never find myself putting off coding by tapping out a couple of thousand words? 2
In this age of graphomania it sounds not a little precious to talk of writer’s block. This fabled 3 inability to write never comes from an inability to write anything but only from a self-consciousness that whatever I put down on the page is never has quite the same lightness, coherence and insight as I know it does in my head. 4 It is the fear of writing trite, ugly sentences, that sends us running to Google and Facebook, to research that important detail, to sharpen our pencils and build websites.
A central conceit of this site is that there’s a continuity between writing and code. That they are to be accorded equal prestige. 5 If this were really so I would be as neurotic about the quality of the code as I am about the text. I do ache for every inelegant line of code I write but stuck between inelegance and getting the job done, I choose the latter. 6 Getting code to work is trivial, at least when it comes to the relatively simple task of convincing a computer to run a website. The difficulty comes with doing that thing elegantly and there are as many introspective spirals of refactoring as there are of rewriting. If it were completely true that I accord equal prestige to text and code, I would be as neurotic about my code as I am about my prose. I live comfortably with the knowledge that I may not be the best coder in the world, and I cheerfully defer to others, but I could barely pick up a copy of Paradise Lost if I were unable to delude myself that, given enough time, enough drafts, I could have written it myself.
- 1In the process of building this website, I have taught myself Perl, Ruby, Angular and the countless other systems that drive this site: Apache, MySQL, Varnish, Nginx, Postgres, Haml, Slim, Coffescript, SASS.
- 2I wonder if any of the “rock star” programmers more familiar by their blog posts than their code do this.
- 3Will Self says that a New York cab driver, upon finding
- 4The possibility of future revision both assuages and strengthens this inhibition. I can revise and improve it so if the current output is not perfect, the next draft might get closer. But it also means that there is less urgency to make this current sentence work. See Meta: Versioning.
- 5Cf. meta: Is this an obstinate insistence?
- 6Link to helper formatting.