programming is terriblelessons learned from a life wasted

A few of my favourite theses

In the heady days of my earlier years, I would come home from the pub and immerse myself in academia. I have selected for you four delectable theses if you wish to indulge in the same.


Joe Armstrong’s Making reliable distributed systems in the presence of software errors.

This is about the development and design of the Erlang language and runtime—the core principles involved in making software more reliable, and more robust. The ideas presented here have standing outside of distributed systems, and can be appropriated for many other worlds of software. Although easy to state: Keep components isolated and let them crash, build a supervision hierarchy to handle failures — the thesis explains them vividly, and examines them in depth.

Aside: When I was lucky enough to talk to Joe Armstrong, I asked him about his thesis (well, almost). The colophon laments that his typesetting software was not mature enough to render his work, and we shared a brief respite from the world of system design to wax lyrical about typography.


Hàn Thế Thành’s Micro-typographic extensions to the TeX typesetting system.

Programming and typography have been deeply entwined since Knuth’s seminal work “Computers and Typography”. It should come as no surprise that many programmers have been entranced by typesetting, as a fastidious attention to detail is required by both.

In this thesis, Hàn Thế Thành outlines refinements for TeX’s line breaking through the use of optical typography, or simply, making margins look cleaner, but technically less aligned. Instead of bluntly pushing letters against a hard line, he extends TeX to gently allow some letters and punctuation to saunter over the margins to give a pleasing result. You can take advantage of this with a simple \usepackage{microtype} with full naïvety of the inner workings, but I find it fascinating nonetheless.


Ben Lippmeier’s Type Inference and Optimisation for an Impure World.

I cannot think of anything more appropriate than citing Aliester Crowley in a work about impurity in functional programming. This is a clever argument to embrace rather than reject the notions of destructive update in programming languages—rather than smuggle side effects through the type checker, extend it to allow it to reason about what your program is doing.

Unfortunately this flexibility comes at a price, lazy evaluation, which for many Haskell programmers will only be taken from their cold dead hands. For those less versed in wizardry, fear not! The thesis only breaks into hieroglyphics for type inference deep inside, and by then, you’re hooked.


Sylvain Schmitz’ Approximating Context-Free Grammars for Parsing and Verification.

Unfortunately less accessible than the others, but still interesting. A formalism for grammars is examined and used to generate a novel parsing contraption, as well as finding out ambiguity in grammars — if you have suffered under shift/reduce conflicts, this may interest you.

The parser cheats in an interesting fashion. When it encounters local ambiguity, it just ploughs on in a superset of the grammar until it finds something that disambiguates, rewinds, and then continues as if nothing has ever happened. This trick gives broader coverage of grammars, but maintains linear time.