6.102 — Software Construction
Spring 2024

Further Reading


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.

  • A book on techniques for restructuring code to make it more ETU and RFC without changing its meaning. Examples are presented in JavaScript.

Steve McConnell. Code Complete: A Practical Handbook of Software Construction, Second Edition. Microsoft Press, 2004.

  • A thick but excellent guide to code quality.

David Thomas and Andrew Hunt. The Pragmatic Programmer : Your Journey to Mastery, Second Edition. Pearson, 2020.

  • Concise, readable, language-independent, timeless advice for software engineers.


Joshua Bloch. Effective Java, Third Edition. Addison-Wesley, 2017.
David Herman. Effective JavaScript. Addison-Wesley, 2012.
Dan Vanderkam. Effective TypeScript. O’Reilly, 2019.

  • Not tutorials or introductions, but instead guides to using the languages expertly, in SFB/ETU/RFC ways. Examples are language-specific, but many of the design principles transcend the specific language.


Andreas Zeller. Why Programs Fail. Morgan Kaufmann, 2009.

  • Inspired much of the Debugging reading.

David Agans. Debugging: The Nine Indispensable Rules for Finding Even the Most Elusive Software and Hardware Problems. AMACOM, 2006.

  • Readable, eminently practical guide to debugging in a variety of technical situations, from software to hardware to cars to plumbing.