January 1, 2025
Advent of Code
Two years of Advent of Code: learning Rust and Go
Objective
Complete Advent of Code and use it as an excuse to learn a new programming language each year: Rust in 2023 and Go in 2024.
Tools & Technologies
Details
Advent of Code is a yearly programming challenge that runs through December: 25 days of puzzles, two parts each. The first days are usually simple parsing and simulation problems, but by the end you're solving tricky graph problems and sometimes even building your own little virtual machine.
I like using AoC to learn new languages. Instead of following tutorials or doing toy exercises, I just pick a language and start solving real problems from day one. You get familiar with a language really fast that way. Both years I finished all 25 days, both parts, and I'm pretty proud of that since the later days can get seriously difficult.
2023: Learning Rust
I had been curious about Rust for a while: the ownership model, the performance, the way memory safety gets checked at compile time. AoC 2023 was my first real exposure to it.
The early days went slowly. The borrow checker pushes back hard on things that feel completely normal in other languages, like mutating a collection while looping over it. Luckily the error messages are actually helpful, so the learning curve is steep but never hopeless.
By mid-December things clicked and I was writing proper Rust: iterators instead of index loops, reaching for HashMap and BTreeMap without thinking, and knowing when to just clone something instead of fighting the borrow checker. The pathfinding problems in week 3 (BFS, DFS, Dijkstra) were where it all came together.
Source: github.com/YentlHendrickx/rust-aoc-2023
2024: Learning Go
After Rust, Go felt refreshingly simple. No lifetimes, no borrow checker, garbage collected. The language really gets out of your way. AoC 2024 was all about learning how Go wants you to do things: goroutines and channels for concurrency, and errors as values instead of exceptions.
The contrast with Rust is big. Rust makes you prove everything at compile time, Go trusts you and lets you find out at runtime. The toolchain is fast, gofmt means nobody argues about formatting, and the standard library covers almost everything without external packages.
The simulation-heavy days were the most fun in Go: spinning up a bunch of goroutines to run independent state machines in parallel and collecting the results over channels is a really nice pattern once it clicks.
Gallery

Advent of Code 2023 (All Stars)

Advent of Code 2024 (All Stars)


