TL;DR Go to https://adventofcode.com. Have fun.
Today the Advent of Code challenge started, which is a programming puzzle contest where puzzles are unlocked each day from december 1st until december 25th. Around 300000 programmers around the world compete in friendly spirit to be the first to finish the puzzle each day. Advent of Code was created by Eric Wastl out of a love for teaching people programming through puzzles.
This is the third year that we're participating at Xebia, and it's also the third year we've been sponsors of Eric's great initiative. We're always amazed at the impact this labour of love has on the community, and we're proud of such a great member of our programming community.
We've learned some things from previous editions that I'd like to share with you: hopefully this helps you enjoy this great challenge just as much as we do!
Community over Contest
You can participate in AoC as a straight contest, which is definitely fun. You can create your own leaderboards with your colleagues and friends, allowing you to compete with each other directly instead of having to turn to the global leaderboard. This is good fun: we've had prizes and totally geeky awards for 0th through 2nd place (yes, you got the joke. Programmers count from 0)
After running it as a straight contest for two years we decided that we'll run it more as a community this year, which also fits in the spirit of Christmas. The reason is that by now we know who our big stars are. The difference is pretty pronounced, and we've had quite a number of people drop off because they didn't have a snowball's chance in hell after a few days to come anywhere close to the top.
So... we'll be handing out awards to anyone who sticks with it for the whole duration. We plan on figuring out a fun reason to give everyone an award who stuck around, because our experience has proven that's a challenge in itself!
It's like running a marathon
If there's anything we've learned, it's that AoC is as much an endurance contest as it is a programming contest. The puzzles get harder and harder, and in the puzzles are unlocked at 6 AM EU time, so if you really want to compete you're looking at getting up REALLY early for 25 days. The endurance aspect has proven to be the main reason people stop midway. What to do about this?
If I can speak from personal experience, last year I chose to simply not compete in this aspect. I got up at my normal time, read the day's challenge first, then mulled over the problem as I took my shower (really cool that Eric uses the picture in that tweet in his presentations :-) ), and then fix it. You may not get top score the first few days, but as the problems get harder those few hours in the morning don't matter that much anymore.
When the puzzles unlock, they unlock for ever
The way we run the contest is that we only take the total end score at the very end, which means that there's more than enough opportunity to take multiple days on one assignment. Especially with the harder ones it's worth it to solve it after a few days, because the score is based on if you were the first, second, third etc. to solve it, not exactly when that was. So you can always score some nice points later.
Publish to GitHub, share and learn
If you publish your solutions to GitHub and go over them later with your colleagues and friends you can learn a lot about good programming from each other. My Python programming skills have improved greatly by comparing my solutions to the ones of awesome (ex-)colleagues like Ade and Jeroen...
Join! Have fun!
In conclusion I have only this to say: Advent of Code is a great initiative, we're dedicated to supporting Eric in this great gift he gives a large part of his life to give to the programming community. So join in and participate, and really consider donating to him if you're having fun!
See you at the other end! Good luck!