Skip to content

Instantly share code, notes, and snippets.

@bearzk
Created April 16, 2022 12:52
Show Gist options
  • Save bearzk/2bef69e742d2b8f83ece2778b78b1a7f to your computer and use it in GitHub Desktop.
Save bearzk/2bef69e742d2b8f83ece2778b78b1a7f to your computer and use it in GitHub Desktop.

Summary of design principles

  1. Complexity is incremental: you have to sweat the small stuff (see p. 11).

  2. Working code isn't enough (see p. 14).

  3. Make continual small investments to improve system design (see p. 15).

  4. Modules should be deep (see p. 22)

  5. Interfaces should be designed to make the most common usage as simple as possible

(see p. 27).

  1. It's more important for a module to have a simple interface than a simple implementation (see pp. 55, 71).

  2. General-purpose modules are deeper (see p. 39).

  3. Separate general-purpose and special-purpose code (see p. 62).

  4. Different layers should have different abstractions (see p. 45).

  5. Pull complexity downward (see p. 55).

  6. Define errors (and special cases) out of existence (see p. 79).

  7. Design it twice (see p. 91).

  8. Comments should describe things that are not obvious from the code (see p. 101).

  9. Software should be designed for ease of reading, not ease of writing (see p. 149).

  10. The inerements of software development should be abstractions, not features (see p. 154).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment