A 7-day learning plan
Day 1 — Syntax & bindings. Install rustup, cargo new. Learn let/mut, functions, if/loop/for, expressions-vs-statements (the semicolon rule). Do Rustlings variables, functions, if.
Day 2 — Ownership. The single most important day. Read The Book, Ch. 4 . Understand move vs copy vs clone, then borrowing (&, &mut) and the aliasing-XOR-mutability rule. Rustlings move_semantics.
Day 3 — Structs, enums, match. Model data. impl methods, Option, exhaustive match, if let/let else. This is where your Kotlin sealed class/when intuition pays off. Rustlings structs, enums, options.
Day 4 — Error handling & traits. Result, the ? operator, panic! vs recoverable errors. Then traits: default methods, impl Trait for Type, derives. Rustlings error_handling, traits.
Day 5 — Generics, collections, iterators. Vec, HashMap, and the iterator chains (map/filter/collect/fold). Generic functions with trait bounds. Rustlings generics, iterators, hashmaps.
Day 6 — Modules, tooling, a small project. mod/use/pub, Cargo.toml, cargo add. Build a small CLI (a to-do list or a word counter). Run cargo clippy and read every suggestion.
Day 7 — Async or a real crate. Either learn async/.await with tokio (reqwest to hit an API, serde to parse JSON), or deepen ownership with Rc/Arc/RefCell. Read others’ idiomatic code.
Bookmark these
- The Rust Book — the canonical, excellent tutorial
- Rustlings — hands-on compiler-driven exercises
- Rust by Example — runnable snippets
- The Rust Playground — try things instantly
- Comprehensive Rust (Google) — course-format, great for experienced devs
- std docs — searchable, always the source of truth
Bottom line: the syntax is a weekend. The real curriculum is ownership — spend Day 2 there and re-read it Day 5. Once you stop fighting the borrow checker and start hearing it as “you’re aliasing mutable state, and I won’t let that be a bug,” Rust becomes the language that catches your mistakes at compile time instead of 3 AM in production. Lean on clippy, model everything with enums, and reach for .clone() without guilt while you’re learning — you can optimize the borrows later.