Barbara Liskov and John Guttag. Program Development in Java: Abstraction, Specification, and Object-Oriented Design. Addison-Wesley, 2000.
- Parallels the course material on specifications and abstract data types very closely; it’s a good book for background reading.
Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides. Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley, 1995.
- The seminal book on design patterns like Interpreter and Visitor, usually referred to as the “Gang of Four book”. Organized as a catalog.
Martin Fowler. Refactoring: Improving the Design of Existing Code, Second Edition. Addison-Wesley, 2018.
Steve McConnell. Code Complete: A Practical Handbook of Software Construction, Second Edition. Microsoft Press, 2004.
David Thomas and Andrew Hunt. The Pragmatic Programmer : Your Journey to Mastery, Second Edition. Pearson, 2020.
Andreas Zeller. Why Programs Fail. Morgan Kaufmann, 2009.
David Agans. Debugging: The Nine Indispensable Rules for Finding Even the Most Elusive Software and Hardware Problems. AMACOM, 2006.