Discussion of "A Philosophy of Software Design"

Lecture Notes for CS 190
Winter 2021
John Ousterhout

  • This class session will review and discuss the main ideas in A Philosophy of Software Design.
  • Instructions for students:
    • Read Chapters 1-18 before class.
    • Think about your own experiences:
      • Have you experienced problems and/or solutions similar to those described in the book?
      • Have you received advice that contradicts the book?
  • Interface vs. implementation
  • Deep and shallow classes
  • Abstraction
  • Temporal design vs. information hiding
  • Dependencies
  • Make code obvious
  • Tactical programming vs. strategic programming
  • Define errors out of existence
  • Comments
  • Writing comments before code
  • Choosing names
  • What matters
  • Design it twice
  • Pull complexity downwards
  • General-purpose vs. special-purpose
  • Different layer, different abstraction