Core Programming Principles
Modules Should Be Deep
General-Purpose Modules are Deeper
Different Layer, Different Abstraction
Bring together if it will simplify the interface
Bring together to eliminate duplication
Separate general-purpose and special-purpose code
Define Errors Out Of Existence
Design it Twice
Good code is self-documenting
Cross-module design decisions
Choosing Names
Modifying Existing Code
Stay strategic
Maintaining comments: keep the comments near the code
Consistency
Code Should be Obvious
Measure before modifying