<aside> 📖 These are my notes from the book A Philosophy of Software Design. They include summarised ideas, verbatim quotes and my own opinions. Feel free to purchase a copy and support the author!

</aside>

2 ways to reduce complexity:

  1. Make code simpler and more obvious
  2. Encapsulation & abstraction

It's easier to tell whether a design is simple than it is to create one. Use the ability to recognise complexity to stay away from it. You’ll start recognising patterns for simplifying designs.

Complexity

Tactical vs Strategic programming

Modules

Information hiding

General-purpose modules

Different layer, different abstraction

Pull complexity downwards

Better together or apart?

Define Errors out of existence

Design it twice

The 4 excuses for not writing comments

Comments should describe things that aren’t obvious from the code

Choosing names

Write comments first

Modifying existing code

Consistency

Code should be Obvious

Software trends

Designing for Performance

Decide what matters