Breaking the Cycle

In our modern world, it is so easy to let time pass us by, watching videos, playing games, and doom-scrolling online as fatigue and anxiety build up with no good outlet. Our jobs in tech feel like a constant churn of features and bugs, frameworks and technologies, each new and different yet they all blur together. The many layers and abstractions of software that we must suffer through seem unavoidable. Some try to escape this with side-hustles and startups but even so it means trading time programming for time running a business instead.

To combat this negativity I have begun a journey to dive deeper into the machine to learn low-level programming. I am inspired by the ideas of Casey Muratori through Handmade Hero, Ryan Fleury with his excellent articles and Tsoding with his amusing approach to recreational programming. By following their examples I have found a way to break the cycle and recover my passion for programming by researching and building many toy projects such as a falling sand simulator, a simple voxel engine, and several small game prototypes.

My next goal is to focus this joy I have found in recreational programming toward building software applications and games in a fully hand-made fashion with limited or no external dependencies. Many of the subjects of my work will be reinventing the wheel but by building them I gain knowledge and experience about a much wider range of programming practices. As I implement the low-level tools and frameworks that I need, perhaps I will find a true passion project that is worth polishing and releasing to the world. And if not, that is okay too because the journey itself is valuable.

Language Choice

After researching and trying several programming languages such as Go, Zig, and some C/C++, I have decided to focus on using Odin programming language because it hits a sweet spot of low-level with a dead simple syntax and a pragmatic, batteries-included standard library.

Odin Programming Language

| The Data-Oriented Language for Sane Software Development.

| Odin is the C alternative for the Joy of Programming.

Odin has a few different interesting taglines and my understanding is Ginger Bill (Odin’s creator) is still trying to decide how to market the Odin language. For me, the Joy of Programming really resonates and explains why I chose it. Working in Odin gives you all the power you could ever want or need but without a lot of the historical baggage compared to C/C++.

First Project

I have often felt frustrated using modern UI frameworks such as Qt on desktop, React on the web and more recently Ebitenui within the Go Ebitengine game framework. I understand these tools are complex and have to support a huge range of features, but they always leave me feeling like there is such a high ratio of boilerplate and state management required to achieve anything. So I want to dive deeper into alternatives UI approaches such as immediate mode UI to find out how they are built and learn about the design tradeoffs in this problem space.

My first project is an experimental immediate mode UI library: exigent-ui. The name exigent just means “requiring immediate action” which seems appropriate since there is already dozens of libraries called some variation of “imgui”! I don’t expect to make this “production grade” but I will build out an MVP then start using it in my other projects to learn where the rough edges are and improve it over time.

Blog

This blog is a place to document my learnings and share them with others who may be on similar journeys. Writing also serves as a tool to synthesize the knowledge I have gained to solidify my understanding of new topics and uncover further insights along the way.