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 all but Chapters 19-20 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

General-purpose vs. special-purpose

Make code obvious

Tactical programming vs. strategic programming

  • Technical debt is another term for tactical programming

Define errors out of existence

  • Note: use this idea judiciously: it's easy to take it too far

Comments

Writing comments before code

Choosing names

What matters

Design it twice