Skip to main content
← projects

January 1, 2025

Advent of Code

Two years of Advent of Code: learning Rust and Go

RustGoAlgorithms

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

Share This

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.

Source: github.com/YentlHendrickx/go-aoc-2024

Gallery

Advent of Code 2023 (All Stars)

Advent of Code 2023 (All Stars)

Advent of Code 2024 (All Stars)

Advent of Code 2024 (All Stars)