May 13, 2024
#blog
Last week I talked about dislearning, what I am using to mean "spending so much time formally learning something you thought you liked, but turns out you don't." Also, it was originally called delearning; shoutout Brae for the alternative prefix suggestion. Fortunately, there is an antidote to dislearning: the simple art of relearning.
I was never a competitive programmer. Growing up, my hometown barely had access to any competitions, only a couple every year hosted by the local universities. They were pretty easy and I did quite well, but there wasn't really much of a competitive programming culture around there. I had never heard of a USACO or a Codeforces or anything like that, so the interest died fast.
When I got to university though, I was joining up with thousands of other students from all corners of the globe, some of whom would have had far more access to opportunities than I did. I heard stories of students reaching USACO Gold before even starting high school, and whatever other accolades you can imagine. And then you throw in math competitions as well, and you have students that I imagined were very well-prepared for the cutthroat weeding-out nature of the computer science major at my institution. When so much of your grade relies on exams that are deliberately very long and designed to not be finished on time, and you need to reach a minimum grade to even declare the major, being able to solve problems fast gives you quite a leg up.
The key word there is "fast." Not elegantly, maybe not even correctly, just quickly. Even if you only have a 60% success rate per problem but are fast enough to solve 100 problems, you'll still expect to get more points than someone who studied really hard and thinks they have a 90% success rate per problem, but has to take their time and thus only solves 60 problems.
Somehow, I squeaked by. My first year of college was during the pandemic (which I promise I will write about that experience eventually), which made it super difficult to get support as someone who already didn't have much experience, but I still did just about enough to survive the Holy Trinity of Declaration Classes. But the next step was a scary one.
The intersection of all three of those classes was the keystone of many people's computer science experience. The classic academic joke response to the "book that made you cry" meme. The beating heart of competitive programming. The difference between succeeding or failing your six-figure SWE job interview, if you can even make it that far in the application. Brace yourself.
I was NOT good at this class in the slightest. Don't get me wrong, our lecturer was amazing and I turned up almost every single day, even after my grade was already guaranteed to be in the gutter. He was really passionate in his craft and you could sense that this was someone you would want to hear talk about just about anything for hours.
That didn't change the fact that I was not doing well. I think I understood the intuition behind most of the concepts, but again that didn't matter. Exams were once again designed to be rather abstract and test a skill I still hadn't really grasped - pattern matching. It didn't help that I sucked at writing proofs too. I was also being dominated by people that had much more experience with this, which didn't help my confidence.
I thought I was dead and buried. With a grade like that, and a growing apprehension for Leetcode, I had to pivot away from CS theory. But out of nowhere, the following year I was invited to help write problems for a high school programming contest. The exact kind that all my peers had done tons of before coming to college.
Me of all people? Me who barely survived the algorithms class? Turns out this was quite a rewarding experience. No longer was I bound by deadlines, and there was a clear goal beyond just a letter on a transcript. I was contributing to something that would help real people. I could learn from it too. I was working with a team that actually wanted to help each other. And to top it off, I competed in Advent of Code 2023. I didn't finish all 50 stars and some problems took me more than a day, but it was still a huge turnaround from where I was a couple years prior.
I can't do Big O analysis anymore. It takes me a couple hours to even start a DP problem. I still am not entirely sure what a sliding window even is. But the algorithmic spark in me was successfully rekindled, which has to count for something. I wish I could end this by saying I finally landed a six-figure SWE job, but this market right now is beyond screwed.