Worse is better
https://www.jwz.org/doc/worse-is-better.html
Two approaches to software design.
- “The right thing”: Common Lisp
- Simple interface
- Always works correctly
- Behaves consistently
- Covers as many use cases as possible
- “Worse is better”: C & Unix
- Simplicity of implementation is the top priority.
- Implementation should be simpler than the interface
- Must work correctly, but simplicity of implementation matters more
- Consistency is nice, but simplicity of implementation is preferable. As long as it’s not too inconsistent, that’s fine.
- Cover use cases to a practical extent. If an implementation becomes too complex, just don’t implement it.
- Programmers tend to want “the right thing,” but looking at the case of Unix & C, worse is better can actually be superior.
- Unix & C were ported to all kinds of devices because their implementations were simple, and their market share grew like a virus.
- As market share grew, a natural desire to improve them emerged => more people and capital were invested.
- Common Lisp tried to do everything right from the start, but never gained momentum.
- In general, if something covers roughly 50–80% of use cases well and is easy to use, people tend to adopt it.
- Signal-to-noise ratio: Is 50–80% the right target?