BetterWays.dev: Understanding Simplicity is my attempt at distilling the most important lessons I learned over 3 decades of software/web development and system administration into a series of easy-to-follow guides/ebooks.
Functional Core, Imperative Shell
In the first guide of the series (called "Functional Core, Imperative Shell"), we are going to create an elegant, general-purpose build tool and use it to build an example website.
By going through this process, we are going to explore many important topics like combining imperative and functional programming (i.e. by isolating the imperative parts into the outer shell, and keeping our inner core pure), creating a flexible, storage-agnostic architecture, and writing clean and testable code in general.
We are going to build everything from the scratch, and use external dependencies only where it's really necessary.
Imperative Shell, Functional Core (part 1)
In the first part of this guide, we're going to go through all the relevant concepts, and build the outer shell. The second part will be focused on the inner core.
- Implementation language
- Creating the project
- Filesystem vs database
- Example pages
- Run time vs build time generation
- Building things
- Reading files
- Data structure
- Writing files
- Build script
- Async versions
- Test-driven approach
- Unit testing support
- Integration testing
- Next steps