After a request from my early talk at Barcamp Canberra 2012 on the importance of rereading classic paper to promote innovation in programming, I’ve put together a list of “required reading” for modern developers. This is a short selection of openly available papers from the early days of CS on topics that modern programmers take for granted.

For each paper if I’ve given an approximate amount of time needed to devote to the read it, and a suggested beverage for while reading.

GO TO Statement Considered harmful (A Case against the GO TO Statement)

E.W. Dijkstra, 1968 – (Morning tea & A cup of coffee)

This is probably the most recommended paper on this list, not just by me. Its no coincidence that it comes first, as not only was it the paper that has had the greatest impact on computer science, but it was released chronologically before the rest of these papers. Dijkstra efforts on structured programming were vital in making the rest of the papers on list list even possible. This paper is the demarcation point between unstructured and structured programming and put the first nail in the GOTO coffin.

A Relational Model of Data for Large Shared Data Banks

E.F. Codd, 1970 – (2 or 3 evenings & a bottle of red wine)

Codds paper introduced the world to generic relational databases. While we take relational databases for granted, this paper convinced the computing community of the benefits of relational algebra and structured storage for data. While this paper will present nothing new to a seasoned database developer, it presents an concise coverage of the advantage of relational databases and is a counter-point to the current NoSQL/NoRel trend.

On the criteria to be used in decomposing systems into modules

D.L Purnas, 1972 – (An evening & 2-3 glasses of scotch)

Purnas presents the ideas of modulatisation in programming. Again, modern programmers can probably take for granted the idea of a standard library in a programming language. But this paper dictates why these are vital and brings up ideas of how to balance modulatiry and reuse versus too much modularity and being to complex to reuse.

On the role of scientific thought.

E.W. Dijkstra, 1974 – (A lunch break & a bottle of water)

In this paper Dijkstra brings up the idea of the separation of concerns. Where as programmers we view each part of a program as its own discrete concept in isolation of (but not ignorant) of the rest of the program. This paper essentially defines the idea of the separation of presentation and content that we take for granted in web development.

Applications Programming in Smalltalk-80(TM): How to use Model-View-Controller (MVC)

S. Burbeck, 1974 – (An afternoon tea & a cup of earl gray)

This last paper is a technical and practical discussion of work introducing the “model-view-controller” paradigm to programming. While interesting from a historical perspective as an extension of the previous paper by Dijkstra, it also serves as a good introduction and arguement for separation of concerns in a practical way.

Lastly, there is a list of important publications in computer science available on Wikipedia that has a greater range of content that is slightly harder to get access to, but for someone with journal access and specific interests, this is an excellent starting point for discussion.