Best of 2021


Inspired by Fogus's post of the same name, this is a list of my favorite things of 2021. I'm focusing on projects, ideas, and media that I found especially noteworthy throughout the year (huge bias towards the latter half because my memory is getting old).

Programming languages learned

Some books I read this year

On a journey, ill,

and over fields all withered,

dreams go wandering still.


Games I played this year

Games shipped

Shout-out to Nick Preheim, who helped me ship two games this year with his art and collaboration.

Albums listened to

This year was full of post-punk bangers.

Hobbies old and new

Programming notes

Micro frontends

As JavaScript apps forever grow in size and complexity, I think there remains room for a microservice-like solution for frontend development. The ideas proposed in the foundational ThoughtWorks piece remain a good introduction to the theory, although I think the specific implementation outlined in the article is a bit dated.

Four years working with Ruby

Ever since I wanted to program professionally I wanted to work in Ruby, as Practical OOD and Eloquent Ruby shaped my early programming journey. That's why it's particularly surreal that I stumbled into a Ruby gig after years of working with C# and JavaScript.

Ruby has been an absolute pleasure to work with over the last four years, and I've learned a ton through my interactions with other Rubyists. I think the community behind the language has something unique, a special friendliness and freedom of exploration pioneered by open source contributors like _why the lucky stiff.

Rails is another story. I maintain that Rails is a phenomenal piece of software, but more often than not its flexibility and rapid capabilities are abused in ways that create unmaintainable code. Projects are cobbled together quickly for first-to-market advantage, eschewing any and all upfront design.

There's a lot of bad Rails code out there in the world, but I'll still enjoy cleaning up my small part of it for the next long while.

SICP and recursive process vs. recursive procedure

One revelation I experienced while reading SICP was the nuance between recursive processes and recursive procedures, or, that recursive procedures can be written iteratively. This is a topic worthy of its own post, but to summarize, check out this code example that compares two fibonacci implementations.

Lessons learned

Embracing chaotic notes

I've ditched my Zettelkasten and Notion setup in favor of something simpler. The theory behind the Zettelkasten is fantastic, but I've found it creatively stifling. I worry too much about the organization of my notes, spending more time architecting pages and browsing templates than actually writing.

I've switched back to writing notes by hand in Field Notes or using dead-simple apps like Apple Notes. The low barrier-to-entry to get note on page means the important part of expressing an idea can be done quickly with no distraction.

I've learned that I enjoy the process of taking notes more than actually using the notes as a reference. Only on rare occasions do I actually hunt down my past notes for a future idea. I write notes for the enjoyment, the process of taking any idea that flits into my head and establishing it in ink.

Thanks for reading! Send your comments to [email protected].