There is a difference between ‘Simple’ and ‘Easy’. (Wordpress is easy, but not simple if you really want to grok it.)
- We should aim for simplicity because simplicity is a prerequisite for reliability.
- Simple is often erroneously mistaken for easy. “Easy” means “to be at hand”, “to be approachable”. “Simple” is the opposite of “complex” which means “being intertwined”, “being tied together”. Simple != easy.
- What matters in software is: does the software do what is supposed to do? Is it of high quality? Can we rely on it? Can problems be fixed along the way? Can requirements change over time? The answers to these questions is what matters in writing software not the look and feel of the experience writing the code or the cultural implications of it.
- The benefits of simplicity are: ease of understanding, ease of change, ease of debugging, flexibility.
- Complex constructs: State, Object, Methods, Syntax, Inheritance, Switch/matching, Vars, Imperative loops, Actors, ORM, Conditionals.
- Simple constructs: Values, Functions, Namespaces, Data, Polymorphism, Managed refs, Set functions, Queues, Declarative data manipulation, Rules, Consistency.
- Build simple systems by:
- Abstracting - design by answering questions related to what, who, when, where, why, and how.
- Choosing constructs that generate simple artifacts.
- Simplify by encapsulation.
Positioning yourself for future success is simple, but not easy. The hardest part is the discipline required to do otherwise ordinary things for an extraordinarily long period of time, even when the results are barely noticeable. Anyone can do something once. Not everyone can do it consistently. Eating healthy for a meal is common. Eating healthy all week is not. Working out occasionally is common. Working out a few times a week is not. Going to bed on time is easy. Doing it for a week is not.
When people say you need to love the process, this is what they mean. Can you do it when it’s hard? Can you do it when other people stop? Can you work on something long enough to let it compound? Can you do it when the results aren’t visible?
Putting yourself in a position for success is simple. Doing it day in and day out is hard.
Extraordinary results come from ordinary people with uncommon discipline.