Discussion of "A Philosophy of Software Design"

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