Technical papers every programmer should read

10 Technical Papers Every Programmer Should Read (At Least Twice)
Sep 8, 2011
This is the second entry in a series on programmer enrichment

Inspired by a fabulous post by Michael Feathers along a similar vein, I’ve composed this post as a sequel to the original. That is, while I agree almost wholly with Mr. Feather’s1 choices, I tend to think that his choices are design-oriented2 and/or philosophical. In no way, do I disparage that approach, instead I think that there is room for another list that is more technical in nature, but the question remains, where to go next? In this post I will offer some guidance based on my own readings. The papers chosen herein are not intended to act as a C. S. hall of fame, but instead hope to accomplish the following:

All papers are freely available online (i. e. not pay-walled)
They are technical (at times highly so)
They cover a wide-range of topics
The form the basis of knowledge that every great programmer should know, and may already
Because of these constraints I will have missed some great papers, but for the most part I think this list is solid. Please feel free to disagree and offer alternatives in the comments.

A Visionary Flood of Alcohol

Fundamental Concepts in Programming Languages (link to paper)

By Christopher Strachey

Quite possibly the most influential set of lecture notes in the history of computer science. Left and Right-values, Parametric and Ad-hoc polymorphism were all defined in this paper. Much of the content may already occupy your mind, but the sheer weight of the heady topics assembled in one place is stunning to observe.

Why Functional Programming Matters (link to paper)

By John Hughes

I found this paper extremely lucid on the advantages of functional programming with the added advantage of showing off examples of beautiful code. There are seemingly an infinite number of papers on the topic of

laziness with streams and generators, but I’ve yet to find a better treatment. Finally, I’ve always been partial to Reginald Braithwaite’s “Why Why Functional Programming Matters Matters” as a complement to this paper.

An Axiomatic Basis for Computer Programming (link to paper)


I came to this paper late in my career, but when I finally found it I felt like I had been hit by a bus. At the core of the paper lies the following assertion:

P {Q} R
Taken to mean:

If the assertion P is true before initiation of a program Q, then the assertion R will be true on its completion

Where P is a precondition, Q is the execution of a program, and R is the result.

In other words, as long as a program/function/method/etc. receives a set of parameters conforming to its preconditions, its execution is guaranteed to produce a well-formed result. This paper inspired me to explore contracts programming in Clojure, but the proof implications reached in Hoare’s paper run much deeper.

Time, Clocks, and the Ordering of Events in a Distributed System (link to paper)

By Leslie Lamport (1978)

Lamport has been highly influential in the field of distributed computation for a very long time and almost any of his papers on the subject should impress. However, this particular paper is likely his most influential and single-handed defined two branches of study in distributed computing since:

The reasoning of event ordering in distributed systems and protocols
The state machine approach to redundancy

Technical papers every programmer should read