My experience with Rust has been having a lot of motivation to learn, getting frustrated & quitting, and then repeating the cycle a few months later. In late 2022 I think I’ve finally found my stride.
Rust has a notoriously difficult learning curve. Here are some of the resources I’ve used to learn Rust since December 2020 and some that I’ll be using to learn Rust in 2023.
Note: I only list resources that have been impactful to me. Your mileage may vary. You can find other great resources here, here, and here.
Beginner Rust
This December marks two years of attempting to learn Rust.
I started with a physical copy of The Rust Programming Language, “the book”:
You purchased this item on December 12, 2020.
This book, like many others, teaches you about core concepts in the language such as Ownership, Borrowing, and Lifetimes. I read it front to back & wrote the examples in my code editor.
I used IntelliJ Rust because I was familiar with (and prefer) IntelliJ. I’ve since switched to CLion because CLion allows you to debug your rust code.
Projects
I was in University when I read the book & had a course that taught systems programming from the perspective of rust. Our homework assignments had us create CLI programs like wc, a shell, a chat server, and more. If you’re looking for similar CLI challenges, you can follow Command-Line Rust.
In my spare time I started cooking half-baked projects like turtle and rust-coreutils. These projects were small enough to be approachable, yet complex or useful enough to be interesting.
You might find some inspiration on build-your-own-x, but I find that these may be too difficult for beginners. Maybe ChatGPT can give you some suggestions…
Reading and writing Rust is the surest way to get familiar with Rust.
Intermediate Rust
After 2 years I think I can finally say that I have intermediate-level Rust skills.
I think that this means I have a good awareness of the Rust ecosystem (keeping up with the latest stable releases, following r/Rust, reading blogs, listening to podcasts), I can write idiomatic Rust code, and I can learn how to leverage tools like Cargo, Rustfmt, Clippy, Macros, Fuzzing, Benchmarking, etc to my advantage.
After learning the basics, what helped me get to the intermediate level?
Getting involved with the Community
This post is my first attempt at directly getting involved with the Rust community; I try to share my experience as a hobbyist of 2 years outside of school and work.
Listening to podcasts on Rustacean Station has helped me gain insight for what’s happening in the community as well as the experience & pathways that that interviewees took to strengthen their skills.
For example, Alice Ryhl appeared on the podcast & explained that their participation on the Rust user forum and Rust Discord helped grow their skills & involvement with Rust.
I think that engaging with the community is a natural step towards increasing your experience and understanding.
Books & Blogs
Books (and blogs to a lesser extent) have been my primary way to learn.
People like Jon Gjengset, Mara Bos, Luca Palmieri, Brian Anderson and Aaron Turon have been catalysts for my learning. Their blogs, books, videos, and tutorials are wonderful resources.
Below you will find some resources I’ve used with great success.
Ranked List of Resources
A list of the resources that have been most impactful for me for learning “intermediate” Rust:
- zero2prod - An introduction to backend development in Rust
- Rust Atomics and Locks - low-level concurrency in Rust
- Rust for Rustaceans - next steps into intermediate Rust
- Pingcap Talent Plan
- Fasterthanlime blog
- Build a Fintech Platform in Rust - project-based learning
Resources that I’m looking into next
In no order:
- High Assurance Rust - write software you can justifiably trust
- MacroKata - learn about declarative macros
- Build a Stock-Tracking CLI With Async Streams in Rust - project-based learning
lib-wc
lib-wc is my attempt at learning how to create a Rust library.
The library contains implementations of utilities like QuickSort, Mutex, Channel, Semaphore, Condvar, Treiber Stack, Thread Pool, and more. Many of these implementations were found in the wild then adapted and tested for learning purposes.
I’ve integrated property testing, benchmark testing, and fuzz testing into the library to learn about how these techniques are applied to Rust projects. I think they are a great addition to the usual suspects like unit testing & integration testing.
The purpose of this library is to act as a laboratory where I can experiment with ideas. It’s been useful for me & a similar project might be useful for you too.
The gist
Intermediate Rust is a weird place. There’s no clear guide on how to make the jump from Beginner to Intermediate (nor Intermediate to Advanced). It will be different for everyone.
If you are interested in gaining intermediate skills you can try out some of what I’ve specified above. The Rust community can also help guide you in the right direction.
Advanced and beyond
To be blunt, I haven’t yet figured out how to become “advanced” with Rust. I don’t know what it means to be advanced. I’m writing this blog post so people can see how I got to the level that I’m at today, at the end of 2022.
I see people who build popular open-source projects, or people who are on the various rust governance teams and wonder how they got to the level that they’re at. I figure that this is from spending a large amount of time using the language & getting involved with the community.
I have some ideas on how to creep closer to the “advanced” level:
- Working with Rust more consistently
- Engaging with Rust Mentors
- Learning from Jon Gjengset’s videos
- Learning about & contributing to Rust itself or open-source projects
- Continuing to engage with the community
- Finding relevant Discord servers (e.g., Tokio, Rust)
- Writing blog posts about Rust
- Discussing on r/Rust
- Discussing on the Rust User Forum
Wrapping up
Thanks for reading. If this helped you, that’s great!
If you want to reach out of give any feedback, feel free to find me on Discord (wcygan#5049) or Reddit (gene-amdahl)
Happy holidays!