Advent of Code 2019: Motivations

Next month marks seven years that I’ve been at Google, not counting the two internships. That’s seven years since I last went on an interview, and seven years since I last cared about algorithm design and coding challenges. I’ve occasionally spent a weekend on a side project – mostly Sudoku solvers and Lisp interpreters, my standard projects for learning a new language – but mostly I go to work, where I try to fit bits of code into enormously complex systems and occasionally refactor them somewhat, and go home, where I do something completely unrelated, like read German or watch TV.

After a burnout episode earlier this year, the details of which I’ll omit, I decided to get back in touch with programming outside of the day-to-day grind of fiddling in million-line codebases. I considered applying to the Recurse Center, but it turns out that rent and childcare are too expensive for me to justify taking twelve weeks off without pay. Instead I’ve been fiddling around with various small projects. Somewhere I stumbled across Advent of Code, and I’m a huge sucker for holiday-themed stuff like this, so I’m giving it a shot.

I’m writing the solutions in Go, even though Rust would be my first choice. I spent several months with Rust earlier this year, and I think it’s brilliant. It could very well transform the development of safe and performant large systems. But when I went back recently to some of the code I’d written just a few months ago, I couldn’t understand a thing, and trying to write something new was as painful as if I’d never used it at all. It occurred to me to try Go again – which I last used nontrivially in 2012 – and feeling proficient took about two days. I’m hoping to come back to Rust next year.

I’ll try to solve each problem on the day it appears and then write about it on this blog. The full code will be in a GitHub repository. I also found some coworkers to join in, so I’ll try to include interesting things that come out of those discussions. Anyway, good luck to everyone participating!