Published: 2019-07-30
The following information is a compilation of Wikipedia and the 2016 speech by Dave Cheney (link at the bottom). If I am missing anything or have the wrong idea please message me.
A class should only have a single responsibility, that is, only changes to one part of the software's specification should be able to affect the specification of the class.
"Software entities ... should be open for extension, but closed for modification." - Bertrand Meyer
Liskov substitution principle
"Objects in a program should be replaceable with instances of their subtypes without altering the correctness of that program." (See also design by contract.)
"Require no more, promise no less" - Jim Weirich
More specific interfaces are better than a few general-purpose interfaces.
"Clients should not be forced to depend on methods they do not use." - Robert C. Martin
Functions and methods should only depend on the behavior they need.
One should "depend upon abstractions, not concretions."