3 January 2023
Hooray! I made it through yet another year on planet earth. What fun. Well done to me. Now I’m going to begin 2023 by reflecting on the past year through the very limited lens of programming languages, libraries, and tools, before then going over what I intend to learn this year.
Without further ado…
Most SRE teams at Google use the Go language for new projects so, as an intern on such a team, I also found myself writing Go code over the summer. While there certainly are some nice things about Go, on the whole I didn’t really like the language. It’s a language released in the 2010’s that feels like it was designed in the 80’s. This article and this article by fasterthanlime cover pretty well many of the issues I saw with Go.
I don’t see myself writing much more Go for the time being unless I’m forced to or something changes my opinion on the language.
Like many, I have always dreamt of releasing my own successful indie game. I’ve had many, many different game ideas over the years but have never really taken any to completion. Now, if I really wanted to change that, I could have picked up something like Unity or Godot and focus on learning solid art and modelling skills - instead, I decided to spend my time messing about with OpenGL.
OpenGL was pretty fun to play with - the API felt pretty dated, and I wasted many hours debugging silly mistakes - but successfully completing my own poor man’s Minecraft clone was immensely satisfying. While I probably won’t use OpenGL itself directly for the time being, I learnt a lot by using it and I definitely intend to continue messing around with low-level graphics stuff more generally this year too.
While I found the official Jupyter application a bit clunky and unstable, I quite enjoyed the notebook system. It’s a fun way of presenting new concepts, experimenting with ideas, and making boring documents interactive. Plus, as soon as I switched to writing notebooks in VSCode, I found the editing process quite smooth.
Many of my university lecturers seem to take great pleasure in distributing Jupter notebooks like candy, so I have no doubt I will be using them plenty more for the foreseeable.
I’ve tried to learn Haskell a number of times in the past but run out of steam at various points each time (usually when looking at some aspect of monads). Next semester though, I’m taking a class on functional programming where Haskell is the language taught - no choice but to finish what I start this time! I’ve already started preparing by trying out the Advent of Code 2022 problems with Haskell - hopefully I can finish all 25 problems eventually!
While I certainly did start learning more about operating system development in 2022 (naturally, given that I started writing my own operating system), I feel like I’ve only just descended down the other side of that initial hump in the graph of the Dunning-Kruger Effect. To the surprise of no one, operating systems and modern computer architectures are in fact immensely complicated. Still, it’s a topic I find incredibly interesting, so I don’t think I’m likely to lose motivation any time soon. Writing my operating system in C++ also will hopefully be good preparation for my next Google internship where I will be using the language.
While I enjoyed playing around OpenGL, the API felt pretty archaic. Combined with the fact that it’s not possible to target web or mobile platforms or newer alternative rendering backends (e.g., Vulkan), I felt an itch for a more modern but still low level graphics API/library. In search of such a library, I came across bgfx. I haven’t yet tried it out but it looks to be pretty much exactly what I had in mind.
When it comes to frontend web stuff, I have tried both Javascript and Typescript and I don’t particularly like either (I especially dislike the former). Lately, an idea for a web application I want to make has been floating around in my head, which, combined with my desire to jump further into functional programming, led me to Elm. It appears to in many ways resemble Haskell so hopefully it shouldn’t be too much of a challenge to learn alongside.
My earliest memory of playing Minecraft was from back in 2012 playing version 1.2, and still, 11 or so years later, I’m dropping back into a new survival world every so often. What I enjoyed often more than playing Minecraft itself however, was researching, experimenting with, and attempting to write my own mods. I messed around with Forge and Bukkit server plugins, but never made anything substantial - 12-year-old me was very upset that I (unsurprisingly) did not have the skills necessary to create something comparable to say BuildCraft or IndustrialCraft (two mods I spent many hours playing).
Fabric is as far as I can tell the most modern framework with which to build Minecraft mods, so naturally it felt most appropriate to take a look at. I don’t yet have an idea of what sort of mod I would make, but hopefully inspiration will strike once I start messing about with Fabric this year.