I am not a great programmer by any means but the few programs I did write solved the small problems I had. I hope to solve even bigger problems with time.
- In software engineering there are two things you are trying to get right:
- Software Validation - Did we build the right thing?
- Software Verification - Did we build the thing right?
- Software simplicity is a prerequisite to reliability.
- A small, simple API is usually also a hallmark of a well-understood problem.
- Make the code work I write is working. Then I can make it fast (if necessary). Solving the “correct/clean/performant code” problem all at once can be overwhelming. Don’t be overwhelmed. Solve one at a time.
- Reducing the maintenance burden is, for most codebases, the biggest optimization I can do.
- Of course it's all about striking a balance, but 99% of the time there is a choice between performance and readability, readability is the right answer. Performance should only be chosen if it is absolutely necessary.
- If I write ugly code, anyone who intends to fix a bug or add a feature will not enjoy his work and likely avoid it next time.
- Explicit over implicit is almost always better.
- One of my principles is to always strive for simplicity when creating. In retrospect, I've learned many thing that I previously thought too complex to understand. The complexities tend to dissolve when you realise they are mostly just extra distractions emerging from the pressures of engineering the thing... distractions that you probably find yourself inventing all over again once you've assimilated the core idea.