18 Oct 2025
Simplicity in software
Simplicity in Software
Rich Hickey
- "Simplicity is a prereq for reliability" ~ Dijkstra.
- Cardinaility is not simplicity. A simple thing may be large, in fact it is. What matters is how 'tangled' it is.
- Simple is actually an objective notion. As in, it can be quantified based on how entangled the thing is.
- Easy comes from the "ease of use" or the "familiarity" of the <insert x> that you're trying to use.
- It's relative!
- If you want everything to be familiar, you will never learn anything new because it can't be significantly different from what you already know and not drift away from the familiarity.
- Separate the construct (code) from the artifact.
- We have small context memories. Keeping large things in our heads is not our strong suit.
- If you can't reason about your program, you can't make these decisions.
- List of complex things:
- State
- Methods
- Inheritance
- switch statements
- pattern matching
- loops/fold
- List of simple things:
- Values
- Functions
- Namespaces
- Polymorphism
- set functions
- If something depends on the private behavior of something else, things are complex.
