Side Projects and Distractions

📅 2023-07-28

🏷 Life, Programming

I've been taking some time off from work this summer to be a stay-at-home dad. This has not been an ideal environment for programming, my favorite hobby.

The kids are now 4 and 1 years old and the younger one is busy getting ready to walk. There needs to be a constant watchful eye on him lest he pull open all the drawers, play with doors, or grab stuff off every reachable surface in the house. As I'm often the only adult at home with the kids, this means my attention needs to be divided between them and whatever else is going on. Not getting any breaks longer than an hour or two per day starts wearing down on you...

What this also means that my programming endeavors have largely been short, distracted affairs or late-night sessions when I've managed to muster the strength somehow, or have imbibed unusual amounts of coffee.

I have a tendency to focus deeply on one project at a time, be it programming, music, or some other kind of art. This is probably not uncommon, since it takes a while to get into the Flow — to construct and maintain the relevant mental models and warm up the muscle memory — and switching to another project comes at a fairly large cost. It literally feels uncomfortable to switch focus. Similarly, after a longer break when I've purged all mental constructs, the comfortable thing is to just continue relaxing.

Or start up new side projects.

Ah, new side projects! Is there anything more exciting and fun? When you start something new, that's when you can move the fastest and rapidly build the first concrete parts of the vision. It's very satisfying. It strikes the exact notes of why I'm drawn to programming on a fundamental level: to create something out of nothing, to construct systems.

When I first started programming, little "side" projects is exactly what I kept working on. I fondly remember a bunch of these:

There always comes a point in these projects when the initial flame burns out and the effort needed to keep going starts looking insurmountable. At that point one usually takes a little break and suddenly a new project idea comes to mind. The cycle repeats itself.

To be fair, there's nothing "wrong" with this. After all, I'm not working on these little projects to achieve some specific goal. It's all in the journey: the magical experience of creation. Without even noticing, your skills and knowledge grows and each new project gets a little better, a little more ambitious.

In recent times, I've racked up a host of little projects that I keep hoping to continue:

Most recently, I've been toying with the idea of a 16-bit fantasy console with Lua scripting for writing games. In other words, a PICO-8 but not as constrained. What attracts me here is not only the delicious nostalgia of a system at the level of an Amiga 500, but that I could merge some of these smaller side projects into a larger whole. Namely, I could lift the graphics code from the retro roguelike (with some pretty advanced color mapping routines for dynamic lighting, for example) and for the audio "hardware" I could use Bitwise Harmony pretty much unchanged. Granted, 16-bit systems had better audio, but you could think of this as an evolution of the MOS SID chip. Porting the roguelike to this fantasy console should be pretty straightforward, and the IF project could be ported as well if I generate Python API wrappers in addition to the Lua ones. Since this would be an SDL based C project, it would be easily ported to various real devices including iOS/Android phones and tables.

I haven't really used Lua before, so learning the language and maybe more importantly how it is embedded in a larger C program should be quite valuable knowledge for the future.

I have about three weeks of leave remaining. While I'm hoping to get back on the Lagrange dev train in a bigger way, the constant distractions will likely prevent that. In the meantime, I'll keep daydreaming about 16-bit games, do some light work on Bubble, and try to get some more writing done.

CC-BY-SA 4.0

The original Gemtext version of this page can be accessed with a Gemini client: gemini://