This year for the first time, I participated in the Advent of Code.
What's the Advent of Code?
If you're not familiar with the concept, the Advent of Code is a programming problem Advent Calendar. A new problem is posted every day from December 1 to December 25. The problems tend to get more difficult as the calendar progresses, and there's an online leaderboard and stuff.
It's been going for a decade. Why now?
It wasn't like I never wanted to do it before... it was just mostly that I'd forget until it was too late. This year, though, everything aligned just right and I was able to start on the 1st with the rest of the challenge!
But it wasn't only because I was forgetful...
Having never participated in a challenge like this before, one major fear I had was about how long I'd be able to keep up. Something I've always dealt with throughout my career is a pretty substantial dose of impostor syndrome... but over the last couple of years, I've been learning to overcome that negative self-perception. It's led me to try some things I'd have found extremely uncomfortable before... but now I'm learning to embrace them and "put myself out there". The Adventures of Blink and its video companion are part of this change of perspective, in fact, and they continue to be vehicles of personal growth.
The Goal
The Advent of Code, then, just represents the next step in my journey of self-discovery. I can gather a bit of feedback on how much I already know, and I can learn some more by stretching my skills.
With those goals in mind, I found that it framed the entire Advent of Code experience for me in a way that I found very helpful:
I don't care if I fail.
That might seem obvious, but... I'm really not a fan of things that look like failure. If I set out to do something, I do it, full stop. I don't give myself permission to fail very easily; I know, that's a problem, but hey I'm working on it! And it leads us to the question in the title of this post:
What would you do if you didn't care whether you failed?
What Freedom to Fail unlocks
When you're worried about failure, risk is everything. You define it, you calculate it, you set limits on it, and you strictly abide by those limits.
On the other hand, when it doesn't matter to you whether you succeed or not, you get the luxury of focusing on the reward. You'll do something in the off chance that it will succeed and bring you a huge benefit. After all, the failure doesn't matter to you!
Freedom to Fail creates boundless learning opportunities. So let's talk a bit about my Advent of Code experience...
Pregame: Solve for Procrastination
I have a tendency to procrastinate when I'm not fully invested in something... particularly if it gets difficult. With that in mind, I elected to start a lunchtime group at my office to work on Advent of Code problems each day at lunch. This would ensure that I'll remain committed - it provides a little bit of social pressure to keep on trying each day.
This doubles as a way to practice putting myself out there - being on a call and sharing your screen while you code can be a little uncomfortable, especially as you work through a gnarly problem... so it gives me the opportunity to be accountable and to operate outside my comfort zone at the same time. Double win!
The Beginning: This is too easy
The first twelve days were a tremendous confidence boost! The problems were challenging, but I didn't feel overwhelmed. I always had a plan for solving it, even if I did it a bit slowly.
Side note about AoC: One mildly disheartening part of the experience was the leaderboard. Advent of Code operates by releasing the puzzle at a specific time (midnight in my time zone) and slots on the leaderboard are first-come, first-serve. So since I have a full life with family and work responsibilities, my schedule doesn't allow me to stay up every night to work on puzzles. Even if I started as soon as I awoke each morning, the leaderboard was already filled. My personal approach to participating in the challenge was to completely ignore the leaderboard for this reason... I was just focused on writing code and figuring out the puzzle. I feel I might have benifited from a leaderboard that allowed me to work at my own pace but I get it, rules are rules.
What got tough
Things got a little more difficult with each puzzle. One of the common tactics that AoC uses to increase the difficulty of the puzzles is to make them scale - it's easy to come up with a quick-and-dirty solution when you only have a few data points to work with, but can your solution still work in a reasonable amount of time if we 10x the data set? Building for scale is often said to be what separates the FAANG companies from the rest of us - they're solving the same problems we are, but at extreme scale.
This (for me) was the "sweet spot" in the experience - I knew enough to solve the problem on a small scale, but I was being stretched to find a more efficient solution. Good stuff happened here.
Day 13: Finally in over my head
Day 13, man. I had to raise a white flag on that puzzle - because it was based in some math classes I never had. I tried a brute-force solution but couldn't make it scale. I finally gave up and looked up some solutions other folks had posted, and while I could understand how they solved it, I just didn't have the mathematical background to come up with that on my own.
That was the halfway point. I was pleased that I'd been able to solve every puzzle up to then... but of course, the big question for me was "will I keep going after this?" I'm thrilled to say yes, I did! This was why I needed the anti-procrastination mechanism I described earlier... I knew when I hit a wall I'd need a way to keep going.
The second half: All about the learning
The second half of my calendar is a bit spotty - quite a few of the puzzles I only got the first part of the puzzle solved (though some I was able to finish up). Each of these puzzles pushed me to learn something new. I picked up memoization as a technique, I polished recursive skills, and I learned a ton about ways to optimize for efficiency. I also gained a ton of respect for python's ability to manipulate strings and build data structures - I'd always thought it was easier in python than in other languages, but having to flex those muscles more really attuned me to just how easy it is.
The Finish Line: Competing for attention
Finishing up the calendar was the hardest part - the last few days before the holiday are always the most hectic, there are parties, gifts to obtain, closing up things at work, and other responsibilities... and I was running a bit short on hours in my day.
I was still able to finish up on schedule - and overall I obtained 40 of the 50 stars: a very respectable first attempt at the challenge, if I do say so myself! Even though I only completed 80% of the work, I still see this experience as a major win... after all, I wrote a lot of code and solved a lot of problems in just a few days' time!
Where I go from here
There are a couple of things I plan to do as a result of this challenge. I thought I'd share my ideas here:
- I'd like to contribute to some Open Source projects this year. I've never done that too much before and I think it would be a valuable next step for me. I don't have a project in mind yet - if you know of one that you think would be a good fit for me, hit me up and tell me about it!
- I'd like to design an Advent of Code styled challenge for my organization next year. I see AoC as a valuable means for helping an organization learn a few "new tricks" in a fun way - I think our challenge would be more directly aimed at specific tools/technologies that we need to go deeper with.
- Encourage more people to try new stuff. We get into comfort zones, or ruts, or whatever you want to call it, and we forget that part of being in a technology career is continuously experimenting and learning and trying different things.
Top comments (0)