Manuel Paccagnella about blog archive Subscribe to RSS Feed

Learning a new programming language

24 Oct 2025 #Rust , #Learning

I’m learning Rust. After years of programming professionaly in Scala (mainly distributed systems), I felt the need to try something new. I liked the idea of going back to a system programming language, closer to the metal, without a GC. But still stronly typed and with a modern approach to memory management.

Not only that: I didn’t want just an intellectual exercise. To have a potential return of investment I also wanted a programming language actually used in the wild. And Rust fits the bill quite well IMHO: it has good documentation, good DX and a fair amount of support as far a tooling/libraries/frameworks are concerned.

So I started last year with the official Rust book. I got maybe one third of the way into it and shelved it (priorities shifted). Then, this year I returned into it with a hands-on course, that I completed successfully.

However, it’s not enough to study a language to get proficient with it. There is more to it than syntax and concepts: it’s about purposefully chasing that desiderable difficulty and learning the tooling, the major libraries, and building your mental catalog of patterns. This way your mind becomes free to think about the problem/solution spaces without getting (too much) distracted by the particular programming language intricacies.

To do that, a fun and easy way is to practice with some hand-on projects. They should be small enough to not take too much time, but have enough “meat” to give you experience with actually using the language and tooling to a meaningful degree. My recommendation is to attempt multiple small/medium projects with a variety of characteristics. There are lots of lists out there to take as inspiration:

Take your time. Accept that the first few ones will be challenging, but keep going. Review your code, refactor it and purposefully find the cleanest, most idiomatic way to write them as you can. Ask for advice if you want/can.

As for me, I’ve written a couple of projects so far:

I’d also take a step further: choose one/two of those projects and keep working on them. Add new features, redesign them, change the underlying technologies (for example the UI layer). Practice with the tooling, publish something more polished for the general public to use. The goal here is to purposefully getting experience with the long game: managing the entire lifecycle and get a better picture of what it means to work on a real project. You don’t need to maintain it for life if you don’t want to, it can remain a practice project (just make sure to explicitly say so in the README!).

Plus, I’d also keep learning by getting more in depth with the language itself. For example, I’m planning to read the Programming Rust, 2nd edition book.