Solid
- The single-responsibility principle - piece of software should have only one responsibility
- The open–closed principle - things should be open for extension but closed for modification
- The Liskov substitution principle - changing interface implementation should not brake software
- The interface segregation principle - it is better to have more specialized interfaces than single big one
- The dependency inversion principle - dependencies should be abstracted via interfaces
Further read: