https://en.wikipedia.org/wiki/Category:Programming_principles
- black box
- code reuse
- cohesion
- command-query separation
- composition/aggregation over inheritance
- coupling
- defensive programming
- dependency inversion
- deutsch limit
- discoverability
- don't repeat yourself (DRY)
- fail fast
- gall's law
- GRASP
- If it ain't broke, don't fix it
- information hiding
- interface segregation
- inversion of control
- Keep it simple stupid (KISS)
- law of Demeter
- Liskov substitution principle
- loose coupling
- ninety-ninety rule
- offensive programming
- open-closed principle
- principle of least astonishment
- pristine sources
- rule of three
- separation of concerns
- separation of mechanism and policy
- single-responsibility principle
- SOLID
- uniform access principle
- worse is better
- you ain't gonna need it (YAGNI)
- zero one infinity rule