How Advent of Code made me love competitive programming again
This blog is an effort to document what work I do at The Recurse Center and keep me accountable. View all Recurse Center posts tag:rc.
I’ve come to loathe modern competitive programming.
I’m fully on board with people using programming challenges as a way to improve and measure their skills but unfortunately the tech industry increasingly relies on it as a crutch to quantify and select candidates when hiring. This then leads to toxic downstream effects where candidates (especially those in college or just starting out) now sink hours and hours into getting good at them in hopes of clearing these interviews. People who don’t do well at them feel they are bad programmers or that programming is not for them. At a time when the tech industry should be trying to be more inclusive and diverse, it’s hiring process is still fundamentally broken.
Programming challenges are about isolated data structures and algorithms, hacking together solutions quickly, and working by yourself. The reality of being a good programmer is more reading other people’s code, documenting your own, thinking of the bigger picture, and working well with others. Competitive programming neither prepares or tests you for any of that.
Ultimately, there is little correlation between coding challenges and real life programming.
Peter Norvig goes so far as to say that “Being good at programming competitions correlates negatively with being good on the job”.
David Hansson tweet (below) even spawned a public list of companies that don’t have whiteboard interviews - poteto/hiring-without-whiteboards
Hello, my name is David. I would fail to write bubble sort on a whiteboard. I look code up on the internet all the time. I don't do riddles.— DHH (@dhh) February 21, 2017
My interest in competitive programming dwindled pretty quickly and eventually I stopped doing it all together.
Until I discovered Advent of Code.
This is the third year of AoC but I only heard about it a few weeks ago when someone at The Recurse Center mentioned it. From AoC’s website:
Advent of Code is a series of small programming puzzles for a variety of skill levels. They are self-contained and are just as appropriate for an expert who wants to stay sharp as they are for a beginner who is just learning to code. Each puzzle calls upon different skills and has two parts that build on a theme.
In short: Every day from Dec 1st to Dec 25th, a small programming challenge is revealed and people race to solve it.
The challenges themselves are wonderful. If you’ve been programming for a while, these shouldn’t take you much time to solve. It’s easily something you can find time for each day. They are usually built on an existing problem type which you can always Google solutions for. They never seem too complicated to be put off by, but are require enough thinking to make it interesting (My solutions have been an average of 7 lines of code for what it’s worth).
but what’s wonderful about this is the community that exists around it. As trite as this sounds, it really is about people and their love for programming. It accessible to people of all skills levels, as beginners can use it as a way to learn a new language, and experts can do batshit things like solving everything in Excel.
The reddit community r/adventofcode is an excellent example of people sharing creative and novel solutions.
Advent of Code also does leaderboards right. Allowing groups to compete among themselves is a great incentive to stay motivated. Users can create a private leaderboard that others join, and you are scored based on who finishes the challenge first. For N users, the first user gets N points, the second gets N-1, and the last gets 1.
I’m on a leaderboard with some RCers, and the first couple of days was mad competitive with people staying up until midnight to wait for the challenge to come out. As time goes by, I see this becoming more a battle of who can keep the cadence of doing this every day (instead of within minutes/hours).
As you can see, it’s pretty competitive
It’s only Day 5 of 25, so I’d strongly urge you to sign up and participate. If you are anything like me, you’ll love solving the puzzles but be way more fascinated by how others do it and what you can learn from that.
I publish my (simple) solutions as viewable IPython notebooks on GitHub karthikb351/advent-of-code-2017
You can sign up for AoC 2017 at adventofcode.com And feel free to join my leaderboard with the code 189329-8ca572e5.