- Computer Systems: A Programmer's Perspective, 2nd edition (Prentice Hall, 2016).
- Programming Languages in Context: A Survey of the Major Programming Paradigms (Springer, 2013).
- The Practice of Programming (Prentice Hall, 2010).
- Object-Oriented Design and Implementation (Prentice Hall, 1999).
Articles
- "The Importance of Programming Languages in the Computer Science Curriculum" (Communications of the ACM, July 2016).
- "The Future of Computing Education in a Rapidly Changing World" (Communications of the ACM, August 2015).
- "The Role of Theory in Computer Science Education" (Communications of the ACM, June 2014).
- "Why Teach Programming?" (Communications of the ACM, May 2012).
Other
- Co-editor of the Springer International Publishing series "Foundations and Trends® in Programming Languages".
- Member of the editorial board of the ACM Journal on Educational Resources in Computing (JERIC).
- Program Committee Chair of the ACM SIGCSE Technical Symposium on Computer Science Education (SIGCSE) in 2016 and 2017.
- Steering Committee Member of the SIGCSE Technical Symposium on Computer Science Education (SIGCSE) since 2014.
- Faculty Fellow of the Computing Research Association (CRA) since 2012.
- Fellow of the Association for Computing Machinery (ACM) since 2009.