Ten Must Read Papers

Michael Feathers recommends ten papers every developer should read (at least twice). These are classic papers which contain deep “things you oughta know” about code – the material you work with. blog

We’ve taken an interesting turn in the industry over the past ten years. We’ve come to value experiential learning much more, and we’ve regained a strong pragmatic focus, but I think it would be a shame if we lost sight of some of the deeper things which people have learned over the past 50 years. Rediscovering them would be painful, and (to me) not knowing them would be a shame.

On the criteria to be used in decomposing systems into modules – David Parnas

A Note On Distributed Computing – Jim Waldo, Geoff Wyant, Ann Wollrath, Sam Kendall

The Next 700 Programming Languages – P. J. Landin

Can Programming Be Liberated from the von Neumann Style? – John Backus

Reflections on Trusting Trust – Ken Thompson

Lisp: Good News, Bad News, How to Win Big – Richard Gabriel

An experimental evaluation of the assumption of independence in multiversion programming – John Knight and Nancy Leveson

Arguments and Results – James Noble

A Laboratory For Teaching Object-Oriented Thinking – Kent Beck, Ward Cunningham

Programming as an Experience: the inspiration for Self – David Ungar, Randall B. Smith