The following is a (non-exhaustive) list of papers I think are
particularly important in the areas where I work. They are a good
starting point for students who do research with me. I have tried
to choose papers that are not just influential, but still a good
source for the material for junior students.
At the bottom of this page is a list of selected papers from my
own research group--not old enough to be "classic" but important for
understanding the work we're currently doing.
- Daniel H. H. Ingalls. The Smalltalk-76 Programming System Design
and Implementation. Proc. Principles of Programming Languages,
- Alan C. Kay. The Early History of Smalltalk. Proc. History of Programming Languages, 1993.
- David Ungar and Randall Smith. Self: the Power of Simplicity.
Proc. Object-Oriented Programming, Systems, Languages, and
- William R. Cook. On Understanding Data Abstraction, Revisited.
Onward! Essay, 2009. This is a (very!) recent paper, not a
traditional classic, but it is the best summary I know of what makes
- Jonathan Aldrich. The Power of Interoperability: Why Objects Are Inevitable.
Onward! Essay, 2013. Not yet a classic, but a response to Cook's essay. Cook explains how Objects are unique; my essay is an attempt to explain why that uniqueness matters in practical software engineering.
- For an introduction to type systems, I recommend Pierce's
Types and Programming
Languages. If you have no prior background in type theory, I suggest
reviewing the material in chapter 2 (discrete math), then reading chapters
3, 5, 8, 9, 11, and 13 with some care. Students interested in
object-oriented programming should also study chapter 15 and either read
chapter 19 or the Featherweight Java paper. The more advanced
material in the book is also great, but the above is a place to start.
- Eric Ernst. Family
Polymorphism. Proc. European Conference on Object-Oriented
Program Analysis for Software Engineering
- Lloyd D. Fosdick and Leon J. Osterweil. Data Flow Analysis in
Software Reliability. ACM Computing Surveys 8:3 September 1976.
This paper introduced the idea of using dataflow analysis
for software reliability purposes, as opposed to compiler optimizations.
It checks regular expression based temporal properties, a precursor to
- E.M. Clarke, E.A. Emerson, A.P. Sistla. Automatic verification of finite-state concurrent systems using temporal logic specifications. TOPLAS volume 8, pp. 244-263, April 1986.
Ed Clarke et al.'s classic paper on model checking.
- Thomas Ball, Vladimir Levin, Sriram K. Rajamani. A decade of software model checking with SLAM. CACM 54(7):68-76, 2011.
SLAM is one of the most interesting and high-impact program analysis / software model checking projects.
- William R. Bush, Jonathan D. Pincus and David J. Sielaff. A static analyzer for finding dynamic programming errors. Software--Practice and Experience, 30:775-802, 2000.
PREfix is a tool with a pragmatic design that has been used with great effect inside Microsoft
- Brian Hackett, Manuvir Das, Daniel Wang, and Zhe Yang. Modular Checking for Buffer Overflows in the Large. ICSE 2006.
How Microsoft found buffer overflow errors in Windows.
- Dawson Engler, Benjamin Chelf, Andy Chou, and Seth Hallem. Checking System Rules Using System-Specific, Programmer-Written Compiler Extensions. OSDI 2000.
A pragmatic paper describing program analysis technology that went into the successful Coverity startup.
- Robert E Strom and Shaula
Yemini. Typestate: A Programming
Language Concept for Enhancing Software Reliability. IEEE
Transactions on Software Engineering 12(1):157-171, 1986. Note:
this paper is a very important contribution to the literature, but
is unavailable in IEEE's electronic library, so I've made a scanned
copy available here for academic use. Please notify me if it
because available at IEEE and I will link to that instead.
- Rob DeLine and Manuel Fahndrich. Typestates for Objects. ECOOP '04.
- Gregor Kiczales, John Lamping, Anurag Mendhekar, Chris Maeda,
Cristina Videira Lopes, Jean-Marc Loingtier, and John Irwin.
Aspect-Oriented Programming. Proc. European Conference on
Object-Oriented Programming, 1997.
- K. Sullivan, W. G. Griswold, Y. Song, Y. Cai, M. Shonle, N. Tewari, and H. Rajan. Information Hiding Interfaces for Aspect-Oriented Design. ESEC/FSE, 2005.
Secure Software Engineering
- Ross Anderson. Security Engineering. Wiley, also available online.
This is a great basic reference on software security
Two especially successful models of reuse are componentized applications and frameworks:
Key Plaid Papers
These are not-yet-classic papers that are highly relevant to our
ongoing research, especially with respect to the Plaid language
- Practical API Protocol Checking with Access Permissions. Kevin Bierhoff, Nels E. Beckman, and Jonathan Aldrich. In Proceedings of the European Conference on Object Oriented Programming (ECOOP '09), July 2009.
- Modular Typestate Checking of Aliased Objects. Kevin Bierhoff and Jonathan Aldrich. In Object-Oriented Programming Systems, Languages, and Applications (OOPSLA '07), October 2007.
- Typestate-Oriented Programming. Jonathan Aldrich, Joshua Sunshine, Darpan Saini, and Zachary Sparks. In Proceedings of Onward!, 2009.
- Concurrency by Default: Using Permissions to Express Dataflow in Stateful Programs. Sven Stork, Paulo Marques, and Jonathan Aldrich. In Proceedings of Onward!, 2009.