The Leetcodification of everything you love

Published on 2024-12-02


Every time I write on the web (less so on Gemini) about specific things I do in real life that might pertain to people I know I feel a little like I'm playing cards on the surface of the sun, but I don't think I'm particularly embarrassed by what I have to say in this article, and I don't think it'd really hurt any of my friends to know this either.

So, as I've written at least once before, this year I'm the "president"¹ of my university's² computer science course union. Course unions are student associations that are associated with a particular department and act as though³ they're governed by the BC Societies Act. I probably can't say much more than that without drowning in footnotes and asides so long story short is that we run events for computer science students. Our events usually revolve around what I'd lovingly call "professional development"

I attend all of our events and when I do, I always feel super out of place. Talk of networking, resume building, portfolios, disability screening ahem "behavioural interviews" is lost on me without fail, and I think a lot about why that is. Ostensibly all these things are important, and when I'm not complaining on the Internet I'll insist to all the people who faithfully attend our events, worshipping at the alter of Professional Development, seeking the favour of Recruiters and Interviewers in a time of downward pressure on the job market from the top tech companies that these things are indeed important, but I suppose when the market forces aren't actively oppressive they are at the very least boring. It's hard, it's demoralizing, but in a job market like this it's also hard to avoid. I'm extremely privileged to not have to worry about these things too much (for now), and I'm also privileged to be working on a team that respects me enough to not feel the need to bombard me with abstract problems about data structure and algorithm minutiae.

And, of course, if you haven't guessed already, I think that's the thing that bothers me the most: "Leetcode" challenges.

These would probably be better described as "technical interview problems," or competitive programming problems, but at least at my school the Leetcode brand seems to have been genericized to the point of representing what I like about these questions the least. For what it's worth, I'm not against competitive programming and I'm not inherently against technical interviews—I'm not an interviewer but I do have to suspect they're an efficient way to screen people based on their technical abilities, and having a good grasp on common data structures and algorithms is like strictly necessary to being a strong programmer.

I suppose what bothers me the most is this: on one hand, leetcode challenges seem to have an outsized impact on how people view and experience programming within the modern culture of software developers. On the other hand, leetcode challenges are not, in my opinion, a "creative" exercise.

You could probably argue with me on what specifically constitutes a "creative" exercise, but I get the feeling you probably know what I mean on some level, especially when I contrast it with the other thing we're told is important to finding a job in tech: working on side projects. In my mind, building something is like playing a composition, while completing leetcode challenges is more like playing an étude. You can learn an instrument without grinding out études if you start small and work your way up; you don't need them per se. They don't hurt—in fact, some classically trained musicians might already have their email clients fired up ready to explain how practising études can make the difference between a mediocre and great musician, and I don't think they're necessarily wrong. I just think we have two very different approaches to the craft.

Yesterday, many people started working on the Advent of Code, a yearly challenge to complete a series of 25 thematic "leetcode"-style problems:

Advent of Code 2024

I tried the Advent of Code for the first time last year. I think I made it through day one and two before throwing in the towel. After spending all day doing school work I didn't feel like I had the bandwidth to think critically about string manipulation. I suppose from a certain perspective I wasn't good enough; I wasn't practising my études. A truly strong programmer wouldn't have found that kind of string manipulation so exhausting. I'm not going to speculate on whether or not that's literally true, but it did really get me thinking about how I relate to the experience of crafting software.

I used to be really into competition programming. I competed in some local competitions when I was in high school—never well enough to win anything, but I did enjoy it quite a bit. I'd practice programming problems on a website called CodeWars in my free time for fun. Then, one day, it stopped being fun. I don't remember specifically when, but I think it was around the time I started working on Resin, and for the first time, I was spending a few hours each week day working on a single project. I was building something I really cared about.

It's easier to imagine the end of the world than the end of Instagram

I haven't gotten back into it since.

I'm not trying to tread on anyone else's hobbies, and I certainly hope this article doesn't come off that way. Leetcode challenges, like practising études, can genuinely be fun, and either way, it's a valuable tool for honing your craft. What I think worries me the most is my suspicion that the ubiquity of leetcode challenges doesn't come from a place of genuine passion but rather the fear and widespread expectation that one day we'll be thrust from the comfort of our jobs and forced to fight real "code wars" against our peers, competing for artificially finite resources. For university students like myself, that fear comes more in the form of anxiety that our first job once we graduate will be an unpaid internship.

That… sucks the fun out of it, I think.

This year, I decided to try out December Adventure instead:

The December Adventure is low key. The goal is to write a little bit of code every day in December.

[...]

Pick a project, or projects and work on them a little bit every day in December.

eli_oat's overview of December Adventure

If you're like me, maybe you'd want to try this out instead.

My December Adventure progress updates (Gemini link)

Footnotes

¹ I feel like president deserves scare quotes because I think the title is a bit misleading. The president has customary authority, but legally being president just means you're responsible for talking to the Student Union on behalf of the student association

² Technically student associations at my university are totally unaffiliated with the university because the relationship between the university and the Student Union is… complicated

³ Student Unions in British Columbia are (usually?) governed by the BC Societies Act, which is generally a law that governs how certain associations are supposed to act. Establishing your group as a society in BC lends it some legitimacy. Societies are expected to hold elections and annual general meetings, observe Roberts' Rules of Order during meetings, and stuff like that. Course unions aren't really(?) "societies" as per the BC Societies Act but they're governed by a society and lightly expected to act like one.

Respond to this article

If you have thoughts you'd like to share, send me an email!

See here for ways to reach out