An opinionated path to proficiency in software design
(A rough compilation of notes that I find useful on my current studies in software development.)
Concepts, approaches & methodologies (in the following order)
- Code smells, refactoring & design patterns.
- Behavior-driven development (or outside-in test-driven development).
- Imperative shell, functional core.
- Data, context & interaction.
- “Ports & adapters” architecture.
- Domain-driven design.
Guides, principles & mindset
- Be use case-driven.
- Think in context.
- Strive for one piece flow.
- Face software internals as an illusion experience (or “simple on the outside but complex on the inside” mindset).
- Embrace ignorance (or, be fair with your current knowledge).