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

  • ReScript: a recent rediscovery, jumping off my short-lived adventure with Scheme earlier this year. I have been on a functional programming kick and ReScript has provided just enough functional delight while maintaining familiar JavaScript underpinnings. I think this tool has a lot of potential, but it remains a niche project with some hindering design quirks.

  • Scheme (Racket): more of a dabble and less of a learn, I tried to work through SICP this year and put together some neat solutions to the text's exhaustive exercises. Although I only made it through the first chapter, principles from that reading have invaded my mind and I continue to think about them even half a year later.

  • Haxe: a fantastic language for making games that will be familiar to any JavaScript developer. I'm especially fond of HaxeFlixel, a batteries-included framework for 2D games.

Some books I read this year

  • Franny & Zooey. A recommendation from a friend that ended up being one of my favorite books ever written. The narrative is existential with a spiritual twist, a coming-of-age novella with well-written characters exploring a complex family dynamic. This book drew me in with unexpected force, especially given that the entire novella is little more than four conversations.

  • If on a Winter's Night a Traveler. I purchased this novel on a lark and was both surprised and amazed by its premise. A book about reading a book, Calvino blends together several narrative styles, settings, and plot devices into one cohesive experience. A pleasant read that offers more insight than appears on the surface.

  • Piranesi. This novel comes highly recommended and I think it deserves the praise. It's a joyful read with just enough barbs to keep you thinking about it after finishing. In particular, I was drawn to the classical motifs of its setting.

  • Domain-driven Design. A seminal computer science tome that was an absolute chore to power through. That said, I don't think I've ever cited a text more often in my day-to-day work. Eric Evans has achieved something remarkable with the thoroughness of this work, and although it is far from an easy read, it will be remembered for a long time coming.

  • Kraching (A Thousand Thousand Islands). Zedeck Siew remains my favorite writer in the TTRPG space, creating unique and evocative settings with a prose that is more akin to poetry.

  • Intro to Haiku. Poems are a great cure for ennui, and haiku in particular is a very approachable form. Once you step away from the haiku format you were taught as a kid and learn some fundamentals from the Japanese greats, haiku takes on another form. A beautiful way of sharing experiences with others.

On a journey, ill,

and over fields all withered,

dreams go wandering still.


Games I played this year

  • Riichi Mahjong: I stumbled into Mahjong in a huge way this year with the help of my friend, Sam. Once I got a handle on the rules I was wholeheartedly consumed. The blend of quick decision making and probabilistic reasoning is an addictive dopamine hit that my brain cannot resist. I even read through Daina Chiba's great introductory strategy book.

  • Psychonauts 2: the first Psychonauts occupies a special place in my heart, but I remained thoroughly skeptical of this long-awaited sequel. That said, I was relieved and impressed to discover that the game is an improvement in every respect to the original, and provides a uniquely introspective narrative in a time of wavering psychological health.

  • Myst, Quern, and Obduction: my partner and I have been on a puzzle-solving adventure kick. While these games don't hold a candle to our favorites, The Witness or Outer Wilds, playing these games together remotely with Milanote open in a separate tab is a constant joy. We've learned that ending a session with an "immediate next steps" list makes it that much easier to resume after a hiatus.

Games shipped

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

  • Stonk Market Simulator: a game jam submission. Inspired by some of the nonsense taking place on r/wallstreetbets earlier in the year.

  • Solarflare: less humor and more game, another jam submission that tries to mimic classic shmups.

  • Noumena: my first go at TTRPG writing, in the form of a solo journaling game inspired by the bums and poets of the beat generation. I'm quite proud of this project and am invigorated to work on more TTRPG projects in the future.

Albums listened to

This year was full of post-punk bangers.

  • For the First Time by Black Country, New Road
  • Cavalcade by Black Midi
  • Entertainment, Death by Spirit of the Beehive
  • Bright Green Field by Squid
  • L.W. by King Gizzard & the Wizard Lizard

Hobbies old and new

  • Warhammer: lockdown inspired the need for creative entertainment that did not involve a computer. Haven't played an actual game yet, but I've already sunk too many hours into painting minis and reading lore.

  • GMing TTRPGs: current system of choice is Pathfinder 2e. I've been a player for a few years now, but this year I started my first full-length campaign.

  • Bouldering: unfortunately at the start of this year I ruptured a pulley in my finger, rendering me unable to climb seriously for most of the year.

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.