Note that I’m intentionally posting this quite far away from the usual time of the year that Advent of Code is relevant, to avoid biasing those people who might actually be interested in the event against it. This is not criticism of the event, is a personal opinion that I believe has value in being slightly more widely distributed.
You may or may not have heard of Advent of Code before – often confusingly shortened to AOC – so if you haven’t, let me oversimplify it as introduction. AOC is annual event, taking place during December (an “advent calendar” heading to Christmas Day), providing one or two challenges every day to be solved (generally speaking) with code. Each challenge provides both an example input with the expected output, and a challenge input, for which the result is validated by the event’s website.
Validation serves two purposes: not just to confirm you implemented the challenge correctly, but to gauge how fast you did it — Advent of Code maintaining both a global leaderboard as well as the ability to join community leaderboards of various kind. The soonest after the release of the challenge you complete it, the more points you get.
I’m not a fan of competitions, and programming competitions are no exception: first because they can be biased and easily gamed, and secondly because they just… don’t click with me. So if there’s a leaderboard, you won’t see me anywhere close to it. In the particular case of AOC, my earliest gripe was the timing of the release of the challenges, which is (unsurprisingly) US-centric — since I’m based in Europe, the challenge is usually released while I’m sleeping, and most people would have already gained all of the available points by the time I would wake up. Then again, I work full time, so even if it was released during European friendly times it’s unlikely I would be able to dedicate myself to the challenge as soon as it’s released every day for a month! Community-based leaderboards obviously help with that, but still, if you’re not competitive, they don’t feel particularly enticing.
An aside: I should clarify that I am very competitive when it comes to, say, boardgames. It’s just anything that has to do with work for which my competitiveness goes away. So no coding competitions, no CTFs, and no bug bounties for me.
Now, leaving the competitive aspect aside, there’s definitely a number of people out there that take it as a point of pride to complete Advent of Code every year, sometimes setting themselves into specific challenges, such as doing it in a language they haven’t used before, or using period-accurate retrocomputing software (period-accurate hardware, not surprisingly, not very often.) Just like for the competitors above, I’m happy for them, but that just doesn’t really work well for me either, although I definitely do understand that feeling a lot better: setting yourself up to artificial limitations is a way to push yourself out of the comfort zone you built up around yourself — and trying things in different, sometimes uncommon, languages is a good way to pick up new tools.
And indeed, when my wife wanted to learn some Python, I have actually used AOC as a source of problems to solve. But these are mostly abstract brainteasers (despite the narrative that every year tries to make these contrived problems somewhat Christmassy), and not only they don’t appeal to me (they remind me too much of sudoku – I’m a crosswords person instead), they ended up being too abstract to teach her anything that would stay clear in her mind (the rudimentary videogames in Python Crash Course were better for that — but we both got disappointed by the author’s stance on licensing.)
Now, I’ve been spending a lot of time describing something that, while I still appreciate, is not for me. Why bother? As the saying goes, I could just keep my opinion to myself and move on. I do have a reason to talk about this though, and that is the similitude between AOC and LeetCode, which is similarly a coding competition that is often perceived or described as a “requirement” to be hired in Big Tech.
The reason why I’m writing this post, and sharing my opinion, is to, once again, remind people that you don’t need to enjoy, or even be good at, coding competitions to be a good developer, software engineer, or work in Big Tech! I’m pretty much the proof of that — while I’m not going to boast of being a particularly successful in my job, I am now working in Big Tech for more than ten years, and at my previous job I maintained core libraries that basically every engineer at Google has used at least once.
Which once again boils down to, it’s great if that’s something that you’re enjoying doing. And I guess that for a number of people it is much easier, during an interview process, to show off their competition results rather than building a portfolio of contributions across different opensource projects, particularly if working a company that does not allow open source contributions. I have no problems with those for which these tools are useful, they are just not for me — and I believe it’s useful for others to know that it is an option not to chase those for the sake of finding a good job!
The only people I do get angry with, and I do mean angry, are those who, before and during Advent of Code (or even away from it, in regards to LeetCode) suggest that you wouldn’t be a real developer or software engineer if you don’t take part to these competitions. Or that mock you with fake surprise when you do say you are not going to be solving those brainteasers.
You do you! If you like coding competition, take part, Advent of Code is well structured and it appears to be quite fun for those who enjoy it! If you like brain teasers and you have not heard of Advent of Code before, go and enjoy the past years’ challenges! If you are more like me, go and find an itch to scratch instead, and play around with that. Maybe replicate an older project or command line tool in a language you haven’t used yet. Maybe set yourself a challenge of implementing something you already know using period-accurate software from 1997.
I’ve only attempted it once, but I made it my own challenge, working at completing the challenges on my Atari 1200XL. Unfortunately, I only completed up to day 10, all of the code is here:
https://github.com/GozGeek/adventofcode2022
In fact, I life streamed a few of the challenges and set up my Atari to save to a disk image stored on a Linux VM, which then would extract the source code and commit it in real time to Github. This allowed anyone view the stream to follow along in real time.
https://www.gozgeek.com/posts/2022/syncing-live-coding-from-my-atari-1200xl-to-github/
What I mean by all of this is that I did it for me, and for me to enjoy. The challenges are a little too easy if you’re doing them on anything modern where space or memory isn’t a concern. If someone is trying to hold up AOC as a standard of programming skill, they’re using the wrong example.