Student Guide: Rust Programming Study Path

This guide navigates the Comprehensive Rust Programming Curriculum. Each module lists all related study material from the sources below.

SourceWhat it coversModules
💪 ExercismStart here for practice — 2–6 exercises per module with in-browser code editor and optional human mentor feedback (exercism.org/tracks/rust)1–15
🖥️ Rust PlaygroundOfficial online Rust editor — run, share, test any snippet instantly in your browser, no install needed (play.rust-lang.org)1–15
🦀 hightechmind.io/rust/5–12 curated live working programs per module, matched to the specific topics taught in that module (860+ examples)1–15
🏋️ RustlingsFix broken programs in your terminal — immediate feedback loop, 94 exercises (github.com/rust-lang/rustlings)1–13
📖 Book chaptersExact chapter + section links into The Rust Programming Language (free online · paperback/eBook $39.95)1–15
📗 Programming Rust, 2nd ed. (O'Reilly $59.99)Deeper treatment of every topic — excellent second text alongside the official book2–15
📘 Rust for Rustaceans (NoStarch $39.95)Advanced ownership, traits, macros, async — Jon Gjengset's book8–15
🌐 Rust by ExampleBrowser-based: see any concept running instantly, then edit and re-run in-browser (doc.rust-lang.org/rust-by-example)1–10
🎓 Comprehensive Rust (Google)Google's structured 4-day course — alternative path through Rust foundations (google.github.io/comprehensive-rust)1–5
📺 Jon Gjengset — Crust of RustLong-form video deep dives: smart pointers, channels, atomics, proc macros (YouTube playlist)11–15
📙 The Little Book of Rust MacrosThe definitive reference for macro_rules! and procedural macros (veykril.github.io/tlborm)13
📊 Polars User GuideOfficial documentation for the Polars DataFrame library (docs.pola.rs)14
📰 Serde DocumentationSerialization framework — essential for CSV and data processing (serde.rs)14

How to use this guide: For each module — do the Exercism exercises first (in-browser, no install). Then study the live hightechmind.io examples. Then read the book chapters. Use Rustlings for extra drilling. For quick experiments, paste any code snippet into play.rust-lang.org instantly. Watch Jon Gjengset for M11–15 when you feel stuck on a concept.

Course: Two-semester · ~36 weeks · designed for working professionals studying part-time.
Timeline: Start June 2026 → finish March 2027 (9 months).


Contents

PhaseWeeksModules
Phase 1The Foundation1–12Modules 1–5 · Chapters 1–7
Phase 2Core Proficiency & Certification13–28Modules 6–12 · Chapters 8–16
Phase 3Advanced Specialization29–36Modules 13–15

Phase 1 — The Foundation (Weeks 1–12)

Phase 2 — Core Proficiency & Certification (Weeks 13–28)

🎯 → Certification Milestone — Linux Foundation LFRS · Week 28 · ~$395 · performance-based · Quick Reference ↓

Phase 3 — Advanced Specialization (Weeks 29–36)

📚 Reference Resources Guide — all books, tools, courses, certifications at a glance


Phase 1: The Foundation (Weeks 1–12)

Modules 1–5 · Book Chapters 1–7


Module 1: Introduction & Environment Setup

Goal: Get comfortable with the Rust toolchain and write the first program.

Topics: What is Rust · rustup / rustc / cargo · VS Code + rust-analyzer · cargo new/build/run/check · Hello World anatomy

Exercises: Install Rust and verify version · Create a new project using Cargo · Modify "Hello, World!" to print your name.


📖 Book

ChapterSection
📕 The Rust Programming Language, 2nd ed. (NoStarch, $39.95 · ISBN 978-1-7185-0044-0)Chapters 1–3 · Print/eBook — the primary course text
Ch 1 — Getting StartedFull chapter
Ch 1.1 — Installationrustup, rustc, toolchain management
Ch 1.2 — Hello, World!First program, anatomy of main
Ch 1.3 — Hello, Cargo!cargo new, cargo build, cargo run, cargo check
Appendix D — Useful Dev Toolsrustfmt, clippy, IDE setup

🦀 hightechmind.io/rust/

ExampleWhat it shows
006-palindrome-checkShort readable function — good first "real" program to study

💪 Exercism

ExerciseFocus
hello-worldThe canonical first Rust exercise — run, modify, submit

🏋️ Rustlings (fix broken programs: rustlings run <name>)

ExerciseWhat you fix
intro1Fix a println! call — your first Rust compile-fix cycle
intro2Print with format arguments {}
clippy1Clippy: unnecessary floating-point operation — run cargo clippy for the first time
clippy2Clippy: prefer .is_none() over == None
clippy3Clippy: type cast that clippy warns about
🎓 Also in Curriculum (from Teacher Guide)
ResourceURLWhat it adds
Comprehensive Rustgoogle.github.io/comprehensive-rustGoogle's structured course — alternative path through foundations
Rust by Exampledoc.rust-lang.org/rust-by-exampleBrowser-based examples — see any concept running instantly

Module 2: Common Programming Concepts

Goal: Learn the basic building blocks of Rust syntax.

Topics: Variables & mutability (let, mut, const) · Scalar types (integers, floats, booleans, chars) · Compound types (tuples, arrays) · Functions & return values · Control flow (if, loop, while, for) · cargo fmt

Exercises: Temperature converter (F→C) · Generate the n-th Fibonacci number.


📖 Book

ChapterSection
📕 The Rust Programming Language, 2nd ed. (NoStarch, $39.95 · ISBN 978-1-7185-0044-0)Chapter 3 — Variables, Types, Functions, Control Flow
📗 Programming Rust, 2nd ed. (O'Reilly, $59.99 · ISBN 978-1-492-05259-5)Chapter 3 — Basic Types · Chapter 6 — Expressions
Ch 3 — Common Programming ConceptsFull chapter
Ch 3.1 — Variables and Mutabilitylet, mut, const, shadowing
Ch 3.2 — Data TypesIntegers, floats, booleans, chars, tuples, arrays
Ch 3.3 — FunctionsParameters, return values, statements vs. expressions
Ch 3.4 — Comments// and /// doc comments
Ch 3.5 — Control Flowif, loop, while, for, ranges
Appendix B — Operators and SymbolsComplete operator reference

🦀 hightechmind.io/rust/

ExampleWhat it shows
003-pattern-matchingmatch — the primary control flow construct
010-run-length-encodingLoop logic, tuple return values, variable shadowing
022-rangeRange expressions and for loops
069-sieve-eratosthenesBoolean arrays, nested loops, algorithm in Rust
071-collatz-conjecturewhile loop, integer arithmetic, mutability
071-gcd-lcmFunctions, recursion, integer types
824-sieve-of-eratosthenesFull sieve with idiomatic Rust
826-gcd-lcm-euclidEuclidean algorithm — clean recursive form

💪 Exercism

ExerciseFocus
lucians-luscious-lasagnaVariables, mutability, functions, const
raindropsif / else if chains, string building
grainsInteger types, overflow, Result for invalid input
fizzbuzzfor loop + modulo — classic control flow
collatz-conjecturewhile loop, integer arithmetic, Option result
leapBoolean expressions, multiple conditions
gigasecondBasic arithmetic on types
hammingLoops, comparison, counting — simple algorithm

🏋️ Rustlings (fix broken programs: rustlings run <name>)

ExerciseWhat you fix
variables1Make an immutable variable compile
variables2Add mut to allow reassignment
variables3Declare variable before initializing it
variables4Fix shadowing
variables5Add the correct type annotation
variables6const — name and annotate a constant
functions1Call a function that doesn't exist yet
functions2Fix a missing return type
functions3Fix a function body (expression vs statement)
functions4Make a function return a value implicitly
functions5Return from nested block
if1Simple if/else expression
if2if as an expression with two branches returning values
if3Chained if/else if/else
primitive_types1Boolean operations
primitive_types2Character literals
primitive_types3Array declaration and access
primitive_types4Array slices &[T]
primitive_types5Tuple unpacking
primitive_types6Index into a tuple .0, .1
quiz1Quiz 1: variables + functions + if — all three together
🎓 Also in Curriculum (from Teacher Guide)
ResourceURLWhat it adds
Comprehensive Rustgoogle.github.io/comprehensive-rustDay 1 morning content — types, expressions, control flow
Rust by Exampledoc.rust-lang.org/rust-by-exampleprimitives, flow_control, functions chapters

Module 3: Ownership, Borrowing, and Slices

Goal: Understand Rust's unique approach to memory management without a garbage collector.

Topics: Stack and heap · Ownership rules · Variable scope and drop · Move semantics vs. Copy · References and borrowing (&, &mut) · Rules of references · Slice type

Exercises: Fix ownership errors in provided code snippets · Write a function that takes a string and returns the first word.

⚠️ Take your time here. Ownership is the hardest part of the curriculum — and the most important. Everything else builds on it.


📖 Book

ChapterSection
📕 The Rust Programming Language, 2nd ed. (NoStarch, $39.95 · ISBN 978-1-7185-0044-0)Chapter 4 — Ownership, Borrowing, Slices
📗 Programming Rust, 2nd ed. (O'Reilly, $59.99 · ISBN 978-1-492-05259-5)Chapter 4 — Ownership · Chapter 5 — References
Ch 4 — Understanding OwnershipFull chapter — do not skip any section
Ch 4.1 — What is Ownership?Stack, heap, move semantics, drop
Ch 4.2 — References and Borrowing&, &mut, the one-writer rule
Ch 4.3 — The Slice TypeString slices, array slices

🦀 hightechmind.io/rust/

ExampleWhat it shows
101-move-semanticsMove — values transferred, not copied
102-clone-copyWhen .clone() is needed vs. Copy types
103-borrowing-shared& references — read-only, many at once
104-borrowing-mutable&mut — exclusive mutable access
113-string-strString vs &str — the most common beginner confusion
114-slice-patternsSlices as views into collections
115-vec-patternsVec slice patterns — destructuring collections
119-zero-cost-absZero-cost abstractions — the payoff of ownership
112-cow-clone-on-writeCow<T> — borrow when possible, clone when necessary
369-cow-clone-on-writeCow in data structure context
471-string-vs-strOwnership of strings — String vs &str full breakdown
472-string-slicesString slice rules, &str in function signatures

💪 Exercism

ExerciseFocus
reverse-string&str vs String — ownership across function boundaries
bobBorrowing strings, .trim(), immutable references
run-length-encodingBoth sides: borrowing &str input, building owned String
two-ferOption<&str> — optional borrowed string
phone-numberIterating over &str, returning Option<String>
beer-songBuilding strings, borrowing vs. owning
hammingResult with borrowed string slices

🏋️ Rustlings (fix broken programs: rustlings run <name>)

ExerciseWhat you fix
move_semantics1Fix a move error — can't use moved value
move_semantics2Pass by reference instead of moving
move_semantics3Mutable reference — only one at a time
move_semantics4Restructure code to avoid double-move
move_semantics5Borrow and reborrow — tricky lifetime situation
🎓 Also in Curriculum (from Teacher Guide)
ResourceURLWhat it adds
Comprehensive Rustgoogle.github.io/comprehensive-rustDay 1 afternoon — ownership, borrowing, lifetimes
Rust by Exampledoc.rust-lang.org/rust-by-examplescope, borrowing chapters

Module 4: Structs and Enums

Goal: Structure related data and define custom types.

Topics: Defining and instantiating structs · Tuple structs and unit-like structs · Methods and associated functions (impl) · Enums · Option<T> · match · if let

Exercises: Rectangle struct with area and perimeter methods · IpAddr enum for V4 and V6 addresses.


📖 Book

ChapterSection
📕 The Rust Programming Language, 2nd ed. (NoStarch, $39.95 · ISBN 978-1-7185-0044-0)Chapters 5–6 — Structs, Enums, Pattern Matching
📗 Programming Rust, 2nd ed. (O'Reilly, $59.99 · ISBN 978-1-492-05259-5)Chapter 9 — Structs · Chapter 10 — Enums and Patterns
Ch 5 — Using StructsFull chapter
Ch 5.1 — Defining and Instantiating StructsStruct syntax, field init shorthand, update syntax
Ch 5.2 — Example Program Using StructsWorked Rectangle example — mirrors the exercise exactly
Ch 5.3 — Method Syntaximpl blocks, methods, associated functions
Ch 6 — Enums and Pattern MatchingFull chapter
Ch 6.1 — Defining an EnumEnum variants, data in variants, Option<T>
Ch 6.2 — The match Control FlowPatterns, exhaustiveness, catch-all arms
Ch 6.3 — if letConcise single-pattern matching

🦀 hightechmind.io/rust/

Option and enums:

ExampleWhat it shows
004-option-resultOption and Result side by side
041-option-basicsOption<T> — Rust's null-safety mechanism
042-option-map.map() on Option
043-option-bind.and_then() — chaining optional operations
044-option-filter.filter() on Option
058-variants-daysEnum variants — modeling days of the week
060-option-safe-maxSafe maximum with Option return
062-recordsStruct with named fields — record-style data

Pattern matching (full series):

ExampleWhat it shows
561-pattern-or`
562-pattern-guardsif guards in match arms
563-pattern-struct-destructuringDestructuring struct fields
564-pattern-enum-variantsMatching enum variants with data
565-pattern-tuple-structTuple struct patterns
566-pattern-nestedNested patterns
567-pattern-binding-modesref, ref mut, binding modes
568-pattern-at-bindings@ bindings — match and capture
569-pattern-rangeRange patterns (1..=5)
570-pattern-sliceSlice patterns [head, tail @ ..]
571-pattern-dotdot-wildcard.. to ignore remaining fields
572-pattern-ref-patternsReference patterns in match
573-pattern-let-elselet ... else — diverging on non-match
574-pattern-if-letif let — concise single-pattern match
575-pattern-let-chainsif let chaining
576-pattern-matches-macromatches! macro
577-pattern-irrefutableIrrefutable vs. refutable patterns
578-pattern-exhaustivenessThe compiler's exhaustiveness check
579-pattern-string-matchingMatching on string slices
580-pattern-option-some-noneSome(x) / None patterns
582-pattern-tuple-matchingMatching on tuples
583-pattern-const-patternsConstants as patterns
586-pattern-multiple-armsMultiple patterns per arm
587-pattern-visitor-matchVisitor pattern via match
588-pattern-state-automataState machines with enum + match
589-pattern-command-dispatchCommand dispatch table using match

💪 Exercism

ExerciseFocus
clockStruct, impl block, Display trait, arithmetic
allergiesEnum + match, bitflag logic in struct
triangleStruct + methods + boolean conditions
grade-schoolStruct wrapping a HashMap, methods returning references
role-playing-gameStruct + Option fields + methods
beer-songEnum + match for lyrics logic

🏋️ Rustlings (fix broken programs: rustlings run <name>)

ExerciseWhat you fix
structs1Classic C-style struct — field access
structs2Struct update syntax ..other
structs3impl block with is_bigger() method
enums1Enum variants — no data
enums2Enum variants with data
enums3match on enum — all arms must be handled
options1Option — unwrap and handle None
options2if let Some(x) — destructure an Option
options3while let Some(x) — loop until None
quiz2Quiz 2: strings + vecs + move semantics + modules + enums — broad combo
🎓 Also in Curriculum (from Teacher Guide)
ResourceURLWhat it adds
Comprehensive Rustgoogle.github.io/comprehensive-rustDay 2 morning — structs, enums, pattern matching
Rust by Exampledoc.rust-lang.org/rust-by-examplecustom_types, flow_control chapters

Module 5: Modules and Project Structure

Goal: Organize code into multiple files and modules.

Topics: Packages and crates · Defining modules (mod) · Paths (use, pub, super) · Separating modules into files

Exercises: Refactor a single-file program into a library crate and a binary crate.


📖 Book

ChapterSection
📕 The Rust Programming Language, 2nd ed. (NoStarch, $39.95 · ISBN 978-1-7185-0044-0)Chapter 7 — Packages, Crates, Modules
📗 Programming Rust, 2nd ed. (O'Reilly, $59.99 · ISBN 978-1-492-05259-5)Chapter 8 — Crates and Modules
Ch 7 — Managing Growing ProjectsFull chapter
Ch 7.1 — Packages and CratesWhat a package is, library vs. binary crate
Ch 7.2 — Defining Modulesmod, privacy rules, module tree
Ch 7.3 — Paths for Referring to ItemsAbsolute vs. relative paths, super
Ch 7.4 — Bringing Paths into Scopeuse, as, re-exporting with pub use
Ch 7.5 — Separating Modules into FilesFile layout for multi-file modules

🦀 hightechmind.io/rust/

ExampleWhat it shows
063-stack-moduleComplete module: private internals, public API surface
065-association-listEncapsulated data structure with module boundary

💪 Exercism

ExerciseFocus
space-ageClean struct — good project to refactor into lib/bin
magazine-cutoutHashMap ownership — natural multi-module candidate

🏋️ Rustlings (fix broken programs: rustlings run <name>)

ExerciseWhat you fix
modules1mod — bring an item into scope with use
modules2pub — make an item visible outside its module
modules3Multi-module: use across sibling modules
🎓 Also in Curriculum (from Teacher Guide)
ResourceURLWhat it adds
Comprehensive Rustgoogle.github.io/comprehensive-rustModules and visibility section
Rust by Exampledoc.rust-lang.org/rust-by-examplemodules, crates chapters

Phase 1 Milestone: Write a CLI tool that accepts user input and processes it using structs and enums without fighting the borrow checker.


Phase 2: Core Proficiency & Certification (Weeks 13–28)

Modules 6–12 · Book Chapters 8–16


Module 6: Common Collections

Goal: Store data on the heap using standard library collections.

Topics: Vec<T> · String vs &str (UTF-8 text) · HashMap<K, V>

Exercises: Text interface to add employees to departments · Convert strings to Pig Latin.


📖 Book

ChapterSection
📕 The Rust Programming Language, 2nd ed. (NoStarch, $39.95 · ISBN 978-1-7185-0044-0)Chapter 8 — Vectors, Strings, Hash Maps
📗 Programming Rust, 2nd ed. (O'Reilly, $59.99 · ISBN 978-1-492-05259-5)Chapter 3 — Basic Types · Chapter 17 — Strings and Text
Ch 8 — Common CollectionsFull chapter
Ch 8.1 — Storing Lists of Values with VectorsVec<T> creation, reading, updating, iteration
Ch 8.2 — Storing UTF-8 Encoded Text with StringsWhy you can't index strings — critical to understand
Ch 8.3 — Storing Keys with Associated Values in Hash MapsHashMap, inserting, accessing, updating, entry API

🦀 hightechmind.io/rust/

Vec / list operations:

ExampleWhat it shows
002-list-operationsVec operations — push, pop, iterate
002-last-twoLast two elements — slice indexing
003-kth-elementIndexed access with Option
004-list-length.len() and counting patterns
005-reverse-list.rev() / reversing a Vec
007-flatten-nested-listVec<Vec<T>> — nested collections
008-eliminate-duplicatesDeduplication with HashSet
009-pack-consecutiveGrouping consecutive equal elements
014-duplicate-elementsRepeating elements in a Vec
015-replicate-n-times.repeat() equivalent with Vec
016-drop-every-nthFiltering by position
017-split-listSplitting a list at a position
018-slice-listSlicing with ranges
019-rotate-left.rotate_left()
020-remove-kth.remove(i) with bounds checking
021-insert-at.insert(i, val)
115-vec-patternsPattern matching on Vec slices
351-btreemap-orderedBTreeMap — sorted key-value storage
352-btreeset-sortedBTreeSet — sorted unique values
353-vecdeque-dequeVecDeque — efficient front+back operations
354-binary-heap-priorityBinaryHeap — priority queue
370-small-vec-patternSmall Vec optimization pattern

HashMap:

ExampleWhat it shows
068-frequency-counterHashMap for counting — the canonical use case
073-word-countHashMap<String, usize> — string keys
082-nucleotide-countCounting characters with HashMap
102-frequency-counterFrequency table — ownership-aware version
356-hashmap-patternsCommon HashMap usage patterns
357-entry-apiThe entry() API — insert-or-update idiom
359-multimap-patternHashMap<K, Vec<V>> — grouping multiple values per key

Strings:

ExampleWhat it shows
113-string-strpush_str, format!, chars()
471-string-vs-strOwned vs. borrowed — complete breakdown
472-string-slicesString slice rules
473-string-parsing-fromstrFromStr / .parse()
474-string-formattingformat!, write!, padding, alignment
475-string-buildingBuilding strings incrementally
476-string-splitting.split(), .splitn(), .split_whitespace()
477-string-trimming.trim(), .trim_start(), .trim_end()
478-string-searching.contains(), .find(), .rfind()
479-string-replacing.replace(), .replacen()
480-string-chars.chars() — iterating over chars
481-string-bytes.bytes() — iterating over bytes
482-string-unicodeUnicode awareness in Rust strings
483-string-encodingEncoding / decoding
484-string-cow-usageCow<str> for avoiding unnecessary allocations
485-string-concatenation+ operator vs. format!
486-string-regex-patternPattern-based string matching
487-string-interningString interning patterns
488-string-owning-refOwning references to string data
489-string-arcArc<str> — shared string ownership
490-string-fixed-arrayFixed-size string buffers
492-osstr-handlingOsStr / OsString for system paths
494-string-number-conversion.parse(), .to_string()
495-string-template-patternTemplate substitution patterns
496-string-diff-patternString diffing
497-string-case-conversion.to_lowercase(), .to_uppercase()
498-string-truncationSafe UTF-8 truncation
499-string-escapeEscape sequences
500-string-compressionRun-length compression on strings

💪 Exercism

ExerciseFocus
word-countHashMap — counting word frequencies
anagramHashSet, string comparison, .chars()
seriesVec, string slicing, Option for out-of-bounds
pangramHashSet + char iteration
nucleotide-countHashMap counting + error handling
custom-setBuilding a generic collection type
matrixVec<Vec<T>> — 2D data access
etlTransforming HashMap data
scrabble-scoreHashMap lookup + char iteration
matching-bracketsVec as a stack
tournamentHashMap aggregation, sorting
roman-numeralsVec of tuples as a lookup table
magazine-cutoutHashMap<&str, usize> — borrowed keys

🏋️ Rustlings (fix broken programs: rustlings run <name>)

ExerciseWhat you fix
vecs1Create a Vec and push items
vecs2Iterate over a Vec and map values
strings1&strString conversion
strings2.contains(), .replace() methods
strings3.from(), .to_string(), .to_owned()
strings4Pass &str vs &String to functions
hashmaps1Insert fruit counts into a HashMap
hashmaps2.entry().or_insert() — avoid overwriting
hashmaps3Build a score table — frequency counting pattern
🎓 Also in Curriculum (from Teacher Guide)
ResourceURLWhat it adds
Rust by Exampledoc.rust-lang.org/rust-by-examplestd/vec, std/str, std/hash chapters

Module 7: Error Handling

Goal: Handle errors robustly using Rust's type system.

Topics: panic! · Result<T, E> · The ? operator · Custom error types

Exercises: Read a file and handle "file not found" vs "permission denied".


📖 Book

ChapterSection
📕 The Rust Programming Language, 2nd ed. (NoStarch, $39.95 · ISBN 978-1-7185-0044-0)Chapter 9 — Error Handling
📗 Programming Rust, 2nd ed. (O'Reilly, $59.99 · ISBN 978-1-492-05259-5)Chapter 7 — Error Handling
Ch 9 — Error HandlingFull chapter
Ch 9.1 — Unrecoverable Errors with panic!When to panic, backtrace
Ch 9.2 — Recoverable Errors with Resultmatch on Result, ?, chaining
Ch 9.3 — To panic! or Not to panic!Decision guide — when each is appropriate

🦀 hightechmind.io/rust/

Option combinators:

ExampleWhat it shows
041-option-basicsOption<T> fundamentals
042-option-map.map() — transform the inner value
043-option-bind.and_then() — chaining optional operations
044-option-filter.filter() — conditionally discard the value
292-option-combinatorsFull catalog of Option methods
302-option-transposeOption<Result<T,E>>Result<Option<T>,E>
305-unwrap-or-patterns.unwrap_or(), .unwrap_or_else(), .unwrap_or_default()
306-ok-or-patterns.ok_or() — converting Option to Result

Result and error handling:

ExampleWhat it shows
045-result-basicsResult<T, E> — the foundation
046-result-map.map() / .map_err()
047-result-bind.and_then() — chaining fallible operations
048-error-propagationThe ? operator
049-error-conversionFrom trait — automatic error conversion
050-custom-error-typesDefining your own error enum
054-applicative-validationCollecting multiple errors instead of short-circuiting
056-monad-resultResult as a computational context
072-result-railwayRailway-oriented programming — clean chaining
072-error-accumulationCollecting all errors from a sequence
073-validated-typeValidated type — errors accumulated in parallel
291-result-combinatorsFull catalog of Result methods
293-question-mark-operator? in depth — what it desugars to
294-custom-error-typeCustom error enum with Display
295-error-trait-implImplementing std::error::Error
296-from-trait-errorsFrom for error conversion — enabling ? across types
297-thiserror-patternthiserror derive macro pattern
298-anyhow-patternanyhow for application-level errors
299-error-contextAdding context to errors
300-error-chainingChained error sources
301-result-transposeResult<Option<T>,E>Option<Result<T,E>>
303-collect-resultscollect::<Result<Vec<_>, _>>() — fail-fast collection
304-partition-resultsSeparating Ok and Err values
307-error-propagation-closures? inside closures — pitfalls
308-panic-vs-resultDecision table: panic vs. Result
309-never-type-errors! (never type) in error contexts
310-infallible-conversionsInfallible error type
311-multiple-error-typesUnifying multiple error types with Box<dyn Error>
312-error-downcasting.downcast_ref::<T>() on error traits
313-try-traitThe Try trait — what ? uses
314-validated-accumulationAccumulating errors without short-circuit
315-result-ok-err-methods.ok(), .err(), .is_ok(), .is_err()
316-io-error-handlingstd::io::Error — kind-based matching
317-parse-error-handlingParseIntError and friends
318-error-display-debugDisplay vs Debug for errors
319-error-in-testsErrors in test functions — -> Result<(), E>
320-fallible-iteratorIterating with Result items
581-pattern-result-ok-errPattern matching on Ok(v) / Err(e)
755-testing-error-pathsTesting that errors are returned correctly

💪 Exercism

ExerciseFocus
error-handlingCustom error types, Result, From — full workflow
nth-primeReturning Result for invalid input
robot-nameStruct + Result, mutable state
wordyParsing user input — Result for malformed commands
custom-setGeneric collection with error-producing operations

🏋️ Rustlings (fix broken programs: rustlings run <name>)

ExerciseWhat you fix
errors1Return a String error instead of panic!
errors2Propagate errors with ? operator
errors3Fix a ? operator in a function returning Option
errors4Custom error type with Box<dyn Error>
errors5Multiple error types — Box<dyn Error> pattern
errors6Implement From to convert between error types
🎓 Also in Curriculum (from Teacher Guide)
ResourceURLWhat it adds
Rust by Exampledoc.rust-lang.org/rust-by-exampleerror handling full chapter — Result, ?, multiple error types

Module 8: Generic Types, Traits, and Lifetimes

Goal: Write flexible, reusable code and handle references correctly.

Topics: Generic functions & structs · Traits & default implementations · Trait bounds & impl Trait · Lifetimes ('a) · Elision rules · 'static

Exercises: Summary trait for NewsArticle and Tweet · longest function returning the longer of two string slices.


📖 Book

ChapterSection
📕 The Rust Programming Language, 2nd ed. (NoStarch, $39.95 · ISBN 978-1-7185-0044-0)Chapter 10 — Generics, Traits, Lifetimes
📗 Programming Rust, 2nd ed. (O'Reilly, $59.99 · ISBN 978-1-492-05259-5)Chapter 11 — Traits and Generics · Chapter 13 — Utility Traits
📘 Rust for Rustaceans (NoStarch, $39.95 · ISBN 978-1-7185-0185-0) by Jon GjengsetChapter 2 — Types · Chapter 3 — Designing Interfaces
Ch 10 — Generic Types, Traits, and LifetimesFull chapter — core reading
Ch 10.1 — Generic Data Types<T> in functions, structs, enums
Ch 10.2 — Traits: Defining Shared Behaviortrait, impl for, default methods, bounds
Ch 10.3 — Validating References with LifetimesAnnotation syntax, elision rules, 'static
Ch 17.2 — Using Trait Objectsdyn Trait — runtime dispatch
Ch 19.3 — Advanced TraitsAssociated types, newtype pattern, operator overloading
Ch 19.4 — Advanced TypesType aliases, ! type, DSTs

🦀 hightechmind.io/rust/

Core traits:

ExampleWhat it shows
076-trait-objectsdyn Trait — heterogeneous collections
077-generic-bounds<T: Trait> — constraining type parameters
078-where-clauseswhere — readable complex bounds
079-associated-typesAssociated types — cleaner than extra generics
081-newtype-patternNewtype — wrapping for type safety
082-type-aliasestype aliases — readable complex signatures
083-display-traitDisplay — custom printing
084-from-into-traitsFrom / Into — type conversion
085-iterator-traitIterator — the most important trait to implement
123-impl-traitimpl Trait in argument and return position
124-dyn-traitdyn Trait — when types vary at runtime
125-send-syncSend + Sync — the thread safety traits

Functional trait theory (category-theoretic traits):

ExampleWhat it shows

Advanced trait patterns:

ExampleWhat it shows
381-blanket-implementationsimpl<T: Trait> OtherTrait for T
382-associated-types-advancedAssociated type defaults, multiple impl
384-trait-objects-dyndyn Trait — vtable dispatch
385-trait-objects-anydyn Any — type erasure
386-object-safe-traitsObject safety rules
387-sealed-trait-patternSealed traits — preventing external implementation
388-extension-trait-patternExtension traits — adding methods to foreign types
389-newtype-patternNewtype for orphan rule workaround
390-type-alias-impl-traitTAIT — type Foo = impl Trait
391-impl-trait-returnimpl Trait in return position
392-impl-trait-argumentimpl Trait in argument position
393-trait-bounds-whereComplex where clauses
394-supertrait-patternSupertraits — requiring another trait
395-default-methodsDefault method implementations
397-marker-traitsZero-method marker traits
398-auto-traitsAuto-implemented traits
399-coherence-orphan-rulesOrphan rule — why impl has restrictions
400-trait-dispatchStatic vs. dynamic dispatch compared
401-deref-coercionDeref coercions via the Deref trait
403-display-debug-traitsDisplay + Debug side by side
404-from-into-asFrom, Into, TryFrom, TryInto
405-iterator-trait-deepDeep dive into Iterator internals
406-hash-eq-ord-traitsHash, Eq, Ord, PartialOrd
407-default-traitDefault — zero value for your type
408-clone-copy-traitsClone vs Copy — semantic difference
409-drop-traitDrop — custom cleanup logic
410-arithmetic-operator-overloadAdd, Sub, Mul operator traits

Const generics:

ExampleWhat it shows
126-const-generics<const N: usize> — compile-time constant generics
127-const-functionsconst fn — functions evaluated at compile time
774-const-generics-basics[T; N] generic arrays
775-const-array-sizeFixed-size arrays parameterized by const
776-const-fn-basicsCompile-time computation
777-const-assert-patternsconst_assert! — compile-time guarantees
778-const-fibonacciFibonacci at compile time
779-const-lookup-tableStatic lookup tables via const eval
780-const-generic-structStructs parameterized by constants
781-const-where-boundswhere on const generics
782-const-eval-patternsPatterns for const evaluation
783-const-type-arithmeticType-level arithmetic with const generics

Lifetimes:

ExampleWhat it shows
105-lifetime-basics'a annotations — why the compiler needs them
106-lifetime-elisionWhen you do NOT write annotations
107-lifetime-structsStructs holding references
531-lifetime-basicsExtended: multiple parameters
532-lifetime-multipleMultiple lifetime parameters
533-lifetime-structLifetime in struct definition
534-lifetime-implLifetime in impl blocks
535-lifetime-enumLifetime in enum variants
536-lifetime-static'static lifetime
537-lifetime-coercionLifetime coercions
538-lifetime-varianceCovariance / contravariance
539-lifetime-nllNon-lexical lifetimes
540-lifetime-borrow-checkerBorrow checker reasoning
541-lifetime-elisionThe three elision rules
542-lifetime-higher-rankedHRTB — for<'a>
543-lifetime-trait-objectsdyn Trait + 'a
544-lifetime-closuresLifetimes and closures
545-lifetime-split-borrowSplit borrows — borrowing different fields
546-lifetime-reborrowReborrowing &mut
548-lifetime-named-returnNamed return lifetimes
549-lifetime-phantomPhantom data lifetimes
557-lifetime-output-lifetimeOutput lifetime annotation
558-lifetime-input-lifetimeInput lifetime annotation
560-lifetime-cheatsheetAll lifetime patterns in one reference

💪 Exercism

ExerciseFocus
accumulateGeneric function + trait bounds — re-implement map
dot-dslBuilder pattern with generics and traits
role-playing-gameTraits + Option — shared behavior
space-ageGeneric struct + trait implementation
clockDisplay + Add trait implementation

🏋️ Rustlings (fix broken programs: rustlings run <name>)

ExerciseWhat you fix
generics1Generic function — add type parameter <T>
generics2Generic struct — struct Wrapper<T>
traits1Define and implement a trait
traits2Default method implementation
traits3Trait objects Box<dyn Trait> — dynamic dispatch
traits4Trait bounds where T: Trait
traits5impl Trait in function signatures
lifetimes1Add 'a annotation to a function returning a reference
lifetimes2Struct with a lifetime-annotated reference field
lifetimes3Fix the 'static lifetime annotation
using_asas casting — numeric type conversion
from_intoFrom and Into traits — type conversion
from_strFromStr — parse a string into a custom type
as_ref_mutAsRef and AsMut — cheap reference conversion
try_from_intoTryFrom/TryInto — fallible conversion
quiz3Quiz 3: generics + traits — ReportCard with generic grade type
🎓 Also in Curriculum (from Teacher Guide)
ResourceURLWhat it adds
Rust by Exampledoc.rust-lang.org/rust-by-examplegenerics, traits, lifetimes chapters

Module 9: Automated Tests

Goal: Ensure code correctness.

Topics: #[test] · assert!, assert_eq!, assert_ne! · #[should_panic] · Integration tests (tests/ directory)

Exercises: Comprehensive tests for the Rectangle struct.


📖 Book

ChapterSection
📕 The Rust Programming Language, 2nd ed. (NoStarch, $39.95 · ISBN 978-1-7185-0044-0)Chapter 11 — Automated Tests
📗 Programming Rust, 2nd ed. (O'Reilly, $59.99 · ISBN 978-1-492-05259-5)Chapter 11 — Testing
Ch 11 — Writing Automated TestsFull chapter
Ch 11.1 — How to Write Tests#[test], assertions, #[should_panic]
Ch 11.2 — Controlling How Tests Are RunTest filters, --nocapture, parallelism
Ch 11.3 — Test OrganizationUnit vs. integration tests, tests/ directory

🦀 hightechmind.io/rust/

ExampleWhat it shows
744-unit-test-patterns#[test], assert_eq!, test module organization
745-integration-test-setuptests/ directory structure
746-doc-test-patterns/// doc-tests — documentation that compiles
747-test-fixturesShared setup across multiple tests
748-property-based-testingProperty-based tests — invariants not cases
749-fuzzing-conceptsFuzzing with cargo-fuzz
750-snapshot-testingSnapshot / golden file tests
751-mock-trait-patternMocking with traits — testable design
752-test-doubles-taxonomyStubs, mocks, fakes, spies
753-bench-harness-pattern#[bench] — micro-benchmarks
754-testing-async-codeTesting async functions
755-testing-error-pathsTesting error returns
756-tempfile-testingTemporary files in tests
757-golden-file-testsComparing output against golden files
758-test-isolation-patternsKeeping tests independent

💪 Exercism

ExerciseFocus
sieveTests provided — write code that makes them pass
perfect-numbers#[should_panic], Result returns in tests
grade-schoolMultiple assertions per test, test organization
prime-sieveRed-green-refactor cycle practice

🏋️ Rustlings (fix broken programs: rustlings run <name>)

ExerciseWhat you fix
tests1Write a test with assert!
tests2assert_eq! and assert_ne!
tests3#[should_panic] — test that code panics
🎓 Also in Curriculum (from Teacher Guide)
ResourceURLWhat it adds
Rust by Exampledoc.rust-lang.org/rust-by-exampletesting chapter

Module 10: Functional Features: Iterators and Closures

Goal: Use functional programming patterns.

Topics: Closures (anonymous functions, environment capture) · Iterator trait and next · Consuming adapters (sum, collect) · Producing adapters (map, filter)

Exercises: Re-implement the IO Project (grep clone) using iterators and closures.


📖 Book

ChapterSection
📕 The Rust Programming Language, 2nd ed. (NoStarch, $39.95 · ISBN 978-1-7185-0044-0)Chapter 13 — Closures and Iterators
📗 Programming Rust, 2nd ed. (O'Reilly, $59.99 · ISBN 978-1-492-05259-5)Chapter 14 — Closures · Chapter 15 — Iterators
Ch 13 — Functional Language FeaturesFull chapter
Ch 13.1 — Closures: Anonymous FunctionsFn, FnMut, FnOnce, capture by reference/move
Ch 13.2 — Processing a Series of Items with IteratorsIterator trait, adapters, consumers
Ch 12 — I/O Project (refactor section)Applying iterators to the grep clone — the exercise itself

🦀 hightechmind.io/rust/

Closures — core:

ExampleWhat it shows
005-curryingPartial application via closures
006-function-compositionComposing f(g(x))
051-applying-function-twiceHigher-order functions — apply f twice
001-higher-order-functionsFunctions as values — the foundation of iterator chains
052-function-compositionFunction composition operator
053-pipeline-operatorPipeline `
074-currying-partialCurrying and partial application
120-closure-typesFn, FnMut, FnOnce — the three traits
121-closure-captureCapture by reference vs. move
122-higher-order-fnFunctions that accept and return functions
518-function-pointersfn pointer vs closure

Closure series (501–530):

ExampleWhat it shows
501-closure-capture-rulesCapture rules with ownership
502-fn-fnmut-fnonceWhen to use each closure trait
503-closure-as-argumentPassing closures to functions
504-closure-as-returnReturning closures from functions
505-boxing-closuresBox<dyn Fn(...)> for dynamic closures
506-closure-move-semanticsmove closures
507-closure-memoizationCaching closure results
508-closure-partial-applicationBuilding specialized functions
509-closure-compositionComposing closures at runtime
510-closure-curryingCurrying via closures
511-closure-recursiveRecursive closures
512-closure-state-machineState machine using closure state
513-closure-strategy-patternStrategy pattern with closures
514-closure-observer-patternObserver pattern with closures
515-closure-once-cellFnOnce + OnceCell lazy init
516-closure-environmentClosures as environments
517-closure-coercionClosure coercion to fn pointers
519-closure-type-inferenceType inference in closures
520-closure-higher-orderHigher-order closure combinators
521-closure-map-reduceMap-reduce via closures
522-closure-predicatePredicate closures
523-closure-event-handlerEvent handlers as closures
524-closure-builder-closuresBuilder pattern with closures
525-closure-tap-pattern.tap() — side effects in chains
526-closure-pipe-operatorPipe operator via closures
527-closure-once-consumerFnOnce consumer pattern
528-closure-lifetime-captureLifetime annotations with captured references
529-closure-asyncAsync closures
530-closure-benchmark-idiomsBenchmark idioms using closures

Iterators — core:

ExampleWhat it shows
054-list-map-from-scratchBuilding map from scratch
055-list-filter-from-scratchBuilding filter from scratch
056-fold-rightRight fold
057-fold-leftLeft fold — the basis of reduce
068-tail-recursive-accumulatorAccumulator pattern — tail-recursive fold
069-unfoldunfold — generate sequences
070-scan-left.scan() — accumulate and emit each step
085-iterator-traitIteratornext() and lazy evaluation
086-custom-iteratorWriting your own iterator type
087-iterator-adapters.map(), .filter(), .chain()
088-iterator-consumers.collect(), .sum(), .fold()
089-lazy-sequencesLazy evaluation — nothing runs until consumed
090-infinite-iteratorsInfinite iterators with .take()
091-zip-unzip.zip() and .unzip()
092-scan-accumulate.scan() — stateful iteration
093-windows-chunks.windows(n) and .chunks(n)
094-peekable-iterator.peekable() — look ahead
095-double-endedDoubleEndedIterator.rev()
096-exact-sizeExactSizeIterator.len() on iterators
097-flatten-iterator.flatten() / .flat_map()
098-partition-iterator.partition() — split by predicate
099-group-by-iterGroup consecutive equal elements
100-step-by.step_by(n)
101-lazy-sequencesLazy sequence generation
103-unfolditer::from_fn()
104-scan-left.scan() left fold variant

Extended iterator series (256–290):

ExampleWhat it shows
256-iterator-chain.chain()
257-iterator-zip.zip()
258-iterator-enumerate.enumerate()
259-iterator-flat-map.flat_map()
260-iterator-scan.scan() with accumulator
261-iterator-peekable.peekable() — parser lookahead
262-iterator-windows.windows(n)
263-iterator-chunks.chunks(n)
264-iterator-take-while.take_while()
265-iterator-skip-while.skip_while()
266-iterator-step-by.step_by(n)
267-iterator-cycle.cycle()
268-iterator-unzip.unzip()
269-iterator-partition.partition()
270-iterator-position.position()
271-iterator-find-map.find_map()
272-iterator-flatten.flatten()
273-iterator-inspect.inspect() — debug side effects
274-iterator-sum-product.sum(), .product()
275-iterator-min-max.min(), .max()
276-iterator-min-by-max-by.min_by(), .max_by()
277-iterator-count.count()
278-iterator-last.last()
279-iterator-nth.nth(n)
280-iterator-any-all.any(), .all()
281-custom-iteratorCustom iterator — alternative approach
282-double-ended-iteratorDoubleEndedIterator
283-exact-size-iteratorExactSizeIterator
284-fused-iteratorFusedIterator — always returns None after first None
285-iterator-adapter-patternBuilding custom iterator adapters
286-iterator-from-fnstd::iter::from_fn()
287-iterator-successorsstd::iter::successors()
288-iterator-collect-intocollect() into different containers
289-iterator-extendExtend trait
290-iterator-unzip-partitionCombined unzip + partition

💪 Exercism

ExerciseFocus
nucleotide-count.filter().count(), HashMap
isbn-verifier.chars(), .enumerate(), .filter(), .fold()
difference-of-squares.map(), .sum()
all-your-baseIterators + error handling combined
accumulateImplement map without the standard library
sublist.windows() — sliding window search
flatten-array.flatten() / .flat_map()
pascals-triangle.zip() + accumulated builds
minesweeper2D iteration with closures
luhn.chars(), .rev(), .enumerate(), .fold()
scrabble-score.chars(), .map(), .sum()
pangram.collect::<HashSet<_>>()
roman-numeralsIterator fold over lookup table

🏋️ Rustlings (fix broken programs: rustlings run <name>)

ExerciseWhat you fix
iterators1Create an iterator with .iter() and next()
iterators2.map() — transform each element
iterators3.filter() and .chain() — compose iterators
iterators4.fold() / .sum() — consuming iterators
iterators5Complex iterator chain — .flat_map(), .zip()
🎓 Also in Curriculum (from Teacher Guide)
ResourceURLWhat it adds
Rust by Exampledoc.rust-lang.org/rust-by-exampleclosures, iterators chapters

Module 11: Smart Pointers

Goal: Advanced memory management capabilities.

Topics: Box<T> · Deref trait · Drop trait · Rc<T> (multiple ownership) · RefCell<T> (interior mutability) · Reference cycles

Exercises: Cons list using Box and Rc · Mock object using RefCell.


📖 Book

ChapterSection
📕 The Rust Programming Language, 2nd ed. (NoStarch, $39.95 · ISBN 978-1-7185-0044-0)Chapter 15 — Smart Pointers
📗 Programming Rust, 2nd ed. (O'Reilly, $59.99 · ISBN 978-1-492-05259-5)Chapter 5 — References · Chapter 22 — Unsafe Code
📘 Rust for Rustaceans (NoStarch, $39.95 · ISBN 978-1-7185-0185-0) by Jon GjengsetChapter 1 — Foundations (ownership, Box, Rc, RefCell)
Ch 15 — Smart PointersFull chapter
Ch 15.1 — Box<T>Heap allocation, recursive types
Ch 15.2 — Deref Trait*, deref coercions
Ch 15.3 — Drop TraitCustom cleanup, std::mem::drop
Ch 15.4 — Rc<T>Shared ownership, reference counting
Ch 15.5 — RefCell<T> and Interior MutabilityRuntime borrow checking
Ch 15.6 — Reference Cycles and Memory LeaksWeak<T>, avoiding cycles

🦀 hightechmind.io/rust/

ExampleWhat it shows
116-box-heapBox<T> — heap allocation and indirection
117-recursive-typesBox for recursive data structures
118-deref-coercionsDeref trait — transparent pointer behaviour
108-rc-sharedRc<T> — shared ownership, single thread
110-cell-interiorCell<T> — interior mutability for Copy types
111-refcell-runtimeRefCell<T> — borrow checking at runtime
112-cow-clone-on-writeCow<T> — clone only when needed
369-cow-clone-on-writeCow in a data structure
355-linked-list-rustLinked list in Rust — classic pointer challenge
361-rope-data-structureRope — Arc<str> chunks
363-arena-allocationArena allocator pattern
364-slab-allocatorSlab allocator pattern
368-persistent-data-structuresImmutable persistent structures via Rc
550-lifetime-cell-refcellLifetimes + Cell/RefCell interaction
551-lifetime-rc-weakRc with Weak to break cycles
552-lifetime-arena-patternArena pattern with lifetimes
553-lifetime-self-referentialSelf-referential structs — why they're hard

💪 Exercism

ExerciseFocus
simple-linked-listBox<T> for recursive list structure
circular-bufferInterior state — naturally uses RefCell patterns
doubly-linked-listRc<RefCell<Node<T>>> — the classic double-pointer problem
rpn-calculatorStack using Vec — clean pointer management
paasioShared state with Rc<RefCell<T>>

🏋️ Rustlings (fix broken programs: rustlings run <name>)

ExerciseWhat you fix
box1Box<T> — recursive enum (cons list) requires boxing
rc1Rc<T> — multiple owners via reference counting
arc1Arc<T> — thread-safe Rc with Mutex
cow1Cow<'a, T> — clone-on-write: borrow or own
🎓 Also in Curriculum (from Teacher Guide)
ResourceURLWhat it adds
Jon Gjengset — Crust of RustYouTube playlistSmart Pointers episode — deep dive into Box, Rc, RefCell

Module 12: Concurrency

Goal: Write safe concurrent code.

Topics: spawn & join · Message passing (mpsc) · Shared state (Mutex<T> & Arc<T>) · Send & Sync traits

Exercises: Build a multi-threaded web server.


📖 Book

ChapterSection
📕 The Rust Programming Language, 2nd ed. (NoStarch, $39.95 · ISBN 978-1-7185-0044-0)Chapters 16 + 20 — Concurrency + Web Server Project
📗 Programming Rust, 2nd ed. (O'Reilly, $59.99 · ISBN 978-1-492-05259-5)Chapter 19 — Concurrency · Chapter 20 — Asynchronous Programming
📙 Rust Atomics and Locks (O'Reilly, $54.99 · ISBN 978-1-098-11944-7) by Mara Bos — also free onlineThe definitive book on low-level concurrency in Rust
📘 Rust for Rustaceans (NoStarch, $39.95 · ISBN 978-1-7185-0185-0) by Jon GjengsetChapter 8 — Asynchronous Programming · Chapter 9 — Unsafe Code
Ch 16 — Fearless ConcurrencyFull chapter
Ch 16.1 — Using Threadsthread::spawn, join, move closures
Ch 16.2 — Message Passingmpsc channels, send, recv
Ch 16.3 — Shared-State ConcurrencyMutex<T>, Arc<T>, the canonical pattern
Ch 16.4 — Extensible Concurrency: Sync and SendSend, Sync — compile-time thread safety
Ch 20 — Final Project: Web ServerFull multi-threaded server — the Module 12 exercise

🦀 hightechmind.io/rust/

Thread basics:

ExampleWhat it shows
125-send-syncSend and Sync traits explained
441-thread-basicsthread::spawn, join, move closures
442-thread-scopedScoped threads — borrow stack data in threads
443-arc-mutex-patternArc<Mutex<T>> pattern in full
444-arc-rwlock-patternArc<RwLock<T>> — read-many, write-exclusive
445-mpsc-channelmpsc channel — send/recv
446-thread-pool-patternThread pool — reuse threads
447-work-stealingWork-stealing scheduler pattern
448-rayon-parallelrayon — parallel iterators
449-rayon-joinrayon::join() — fork-join parallelism
450-crossbeam-channelcrossbeam channels — multi-producer multi-consumer
451-crossbeam-selectcrossbeam::select! — wait on multiple channels
452-atomic-typesAtomicBool, AtomicUsize, AtomicPtr
453-memory-orderingRelaxed, Acquire, Release, SeqCst
454-compare-exchangeCAS operations
455-lock-free-stackLock-free stack using atomics
456-once-cell-syncOnceCell / OnceLock — lazy global state
457-condvar-patternCondvar — condition variables
458-barrier-syncBarrier — wait for all threads
459-thread-local-storagethread_local! — per-thread data
460-send-sync-boundsSend + Sync bound constraints in practice
461-producer-consumerProducer-consumer with channels
462-pipeline-concurrencyPipeline stages connected by channels
463-fan-out-fan-inFan-out / fan-in work distribution
464-actor-patternActor model with message passing
465-message-passingMessage passing patterns
466-concurrent-hashmapConcurrent HashMap patterns
467-epoch-gcEpoch-based garbage collection
468-lock-free-queueLock-free queue
469-parallel-reduceParallel reduce / fold
470-concurrent-btreeConcurrent B-tree

Async/await (related to concurrency):

ExampleWhat it shows
321-async-basicsasync fn, .await
322-future-traitFuture trait
323-async-blockasync { } blocks
324-join-futuresjoin! — concurrent futures
325-select-futuresselect! — first future wins
326-async-move-closureasync move closures
327-spawn-taskstokio::spawn task spawning
328-channel-asyncAsync channels
329-async-streamAsync streams
330-async-sinkAsync sinks
331-timeout-asyncTimeout on async operations
332-retry-asyncRetry logic
333-async-recursionRecursive async functions
334-pin-unpinPin<T> — why self-referential futures need pinning
335-waker-contextWaker — how executors wake tasks
336-executor-basicsBuilding a minimal executor
337-async-mutexAsync-aware Mutex
338-async-rwlockAsync RwLock
339-semaphore-asyncAsync semaphore
340-async-trait-patternasync-trait crate pattern
341-buffered-streamBuffered async streams
342-async-ioAsync I/O operations
343-cancellation-tokenCancellation tokens
344-structured-concurrencyStructured concurrency pattern
345-async-dropCleanup in async contexts
346-runtime-contextRuntime context propagation
347-blocking-in-asyncspawn_blocking for CPU-bound work
348-async-generator-patternAsync generators
349-broadcast-channelBroadcast channels
350-oneshot-channelOne-shot channels

💪 Exercism

ExerciseFocus
parallel-letter-frequencythread::spawn, Arc, joining handles
bank-accountMutex for shared mutable state

🏋️ Rustlings (fix broken programs: rustlings run <name>)

ExerciseWhat you fix
threads1thread::spawn + .join() — basic thread creation
threads2Arc<Mutex<T>> — shared mutable state across threads
threads3mpsc channels — send messages between threads
🎓 Also in Curriculum (from Teacher Guide)
ResourceURLWhat it adds
Jon Gjengset — Crust of RustYouTube playlistChannels episode, Atomics episode


Certification Milestone: LFRS Exam (End of Phase 2, Week 28)

You have completed Modules 1–12. This is the natural exam point.

Linux Foundation Rust Programming Professional Certificate (LFRS)

ProviderLinux Foundation / edX
Exam pagetraining.linuxfoundation.org/certification/rust-programming-professional-certificate
Cost~$395 USD (bundles occasionally discounted on edX)
FormatPerformance-based online exam (write real Rust code in a browser IDE) — no multiple choice
Duration2 hours
Passing score66%
Validity3 years, then renewable
ProctoredYes — via PSI Online; requires webcam + quiet room

What the exam covers

The exam maps directly to Modules 1–12 of this curriculum:

Exam domainCovered in
Syntax, types, control flowModules 1–2
Ownership, borrowing, lifetimesModules 3, 8
Structs, enums, pattern matchingModule 4
Modules and cratesModule 5
Collections, stringsModule 6
Error handlingModule 7
Traits and genericsModule 8
TestingModule 9
Closures and iteratorsModule 10
Smart pointers (Box, Rc, RefCell)Module 11
Concurrency (threads, channels, async)Module 12

Modules 13–15 are NOT required for this certification. Macros, Polars/CSV data processing, and the capstone are advanced specializations beyond the LFRS scope — that is why they come after.

How to register

  1. Go to training.linuxfoundation.org/certification/rust-programming-professional-certificate
  2. Click "Get Certified" — you can also bundle it with the LFD459 training course for a discount
  3. You have 12 months from purchase to schedule the exam
  4. Schedule via the PSI Online portal (link sent by email after purchase)
  5. You get one free retake if you do not pass on the first attempt

Final prep checklist (Week 27–28)

  • Complete all Rustlings exercises through Module 12
  • Solve 5+ Exercism exercises at the "hard" difficulty
  • Read the official LFRS Exam Prep Guide (linked from the cert page)
  • Practice writing code in a plain editor without auto-complete — the exam IDE is minimal
  • Time yourself: aim to solve a medium-difficulty exercise in under 15 minutes
  • Review unsafe, Pin, Send/Sync — these appear in Module 11–12 and trip up candidates

Phase 3: Advanced Specialization (Weeks 29–36)

Modules 13–15 — post-certification, not required for LFRS


Module 13: Advanced Rust (Macros)

Goal: Metaprogramming — write code that writes code.

Topics:

  • Declarative Macros (macro_rules!) — syntax, matchers, transcribers, repetition, recursion, hygiene
  • Procedural Macros — custom derive, attribute-like, function-like · syn and quote

Exercises: my_vec! macro (like vec!) · Derive macro that implements Hello trait.


📖 Book & References

ResourceSection
📕 The Rust Programming Language, 2nd ed. (NoStarch, $39.95 · ISBN 978-1-7185-0044-0)Chapter 19.5 — Macros
📗 Programming Rust, 2nd ed. (O'Reilly, $59.99 · ISBN 978-1-492-05259-5)Chapter 21 — Macros (declarative + procedural)
📘 Rust for Rustaceans (NoStarch, $39.95 · ISBN 978-1-7185-0185-0) by Jon GjengsetChapter 6 — Testing · Chapter 7 — Macros
Ch 19.5 — MacrosDeclarative and procedural macros
The Little Book of Rust MacrosFull book — the definitive macro guide
Rust Reference — MacrosOfficial specification
Rust Reference — Procedural MacrosDerive, attribute, function-like proc macros

🦀 hightechmind.io/rust/

Declarative macros:

ExampleWhat it shows
411-macro-rules-basicsmacro_rules! — syntax and structure
412-macro-repetition$(...)* — repetition patterns
413-macro-fragment-typesexpr, ty, ident, pat, tt fragments
414-macro-recursiveRecursive macro expansion
415-macro-tt-munchingTT munching — consuming token trees
416-macro-builder-patternBuilder pattern via macros
417-macro-vec-likevec!-style macro — the exercise itself
418-macro-stringifystringify! — compile-time to string
419-macro-cfg-attr#[cfg] conditional compilation
420-macro-envenv! — compile-time environment variables
421-macro-includeinclude!, include_str!, include_bytes!
428-macro-hygieneMacro hygiene — variable scoping rules
429-macro-scopingMacro visibility and scoping
430-macro-debuggingDebugging macro expansion
431-macro-count-patternCounting repetitions in macros
432-macro-enum-dispatchEnum dispatch via macro
433-macro-state-machineState machine DSL via macros
434-macro-dslDomain-specific language in macros
435-macro-lazy-staticlazy_static! pattern
436-macro-newtype-deriveNewtype boilerplate via macro
437-macro-test-helpersTest helper macros
438-macro-format-argsformat_args! internals
439-macro-assert-variantsCustom assert macros
440-macro-log-patternLogging macros

Procedural macros:

ExampleWhat it shows
422-derive-macro-conceptDerive macro concept
423-proc-macro-introProcedural macro basics
424-proc-macro-deriveCustom #[derive(MyTrait)]
425-proc-macro-attributeAttribute-like macros #[route(...)]
426-proc-macro-function-likeFunction-like proc macros sql!(...)
427-syn-quote-basicssyn and quote — parsing and generating tokens

Type-level patterns (macro-adjacent):

ExampleWhat it shows
066-phantom-typesPhantom types — compile-time state
128-type-level-boolType-level booleans
129-type-level-natType-level natural numbers
130-typestate-patternTypestate — state machines in types
131-builder-patternBuilder pattern — types enforce valid construction
140-type-safe-printfType-safe format strings
734-typestate-basicsTypestate fundamentals
735-typestate-builderTypestate builder — what derive macros enable
736-typestate-connectionConnection state: OpenAuthenticatedClosed
737-typestate-file-handleFile handle with typestate safety
738-phantom-type-basicsPhantomData explained
739-phantom-units-of-measureUnits of measure via phantom types
740-phantom-variance-controlVariance control with PhantomData
741-parse-dont-validateParse-don't-validate — type-level guarantees
742-type-witnessesType witnesses
743-session-typesSession types — protocol enforcement

💪 Exercism

ExerciseFocus
macrosDirect macro_rules! practice

🏋️ Rustlings (fix broken programs: rustlings run <name>)

ExerciseWhat you fix
macros1Call a macro that doesn't exist — understand the ! call syntax
macros2Write a macro_rules! that takes an argument
macros3Macro with multiple patterns — $(...)* repetition
macros4Macro export — #[macro_export] for crate-wide visibility
🎓 Also in Curriculum (from Teacher Guide)
ResourceURLWhat it adds
Jon Gjengset — Crust of RustYouTube playlistProc Macros episode — live coding a derive macro

Module 14: Data Processing with Polars and CSV

Goal: Efficiently handle and analyze large datasets using Rust.

Topics: CSV with the csv crate · Polars: Series and DataFrames · Filtering, selecting, sorting · Aggregations and GroupBy · Lazy vs. eager execution

Exercises: Read CSV weather data, calculate average temperature · Polars: load dataset, filter, export summary CSV.


📖 Books (Print / eBook)

TitleChapters
📗 Programming Rust, 2nd ed. (O'Reilly, $59.99 · ISBN 978-1-492-05259-5)Chapter 17 — Strings and Text · Chapter 18 — Input and Output
📙 Zero To Production In Rust (self-published, $39.99 — also ebook) by Luca PalmieriChapter 5+ — data ingestion, serialization, production patterns

📖 Documentation & Guides

ResourceSection
Polars User GuideStart with "Getting Started" then "Expressions"
Polars Rust APIRust-specific API reference
csv crate docsReading, writing, serde integration
Serde documentationSerialization framework — used by both csv and Polars
Serde JSONJSON serialization/deserialization

🦀 hightechmind.io/rust/

Serialization:

ExampleWhat it shows
759-manual-serialize-traitSerialize by hand — understanding internals
760-serde-derive-concept#[derive(Serialize, Deserialize)] — the standard path
761-custom-serialize-logicCustom serialization for non-standard formats
762-custom-deserialize-logicCustom deserialization with validation
763-json-format-from-scratchJSON format implementation from scratch
764-binary-format-encodingBinary formats — compact and fast
765-csv-parsing-patternCSV reading and writing
766-config-file-parsingTOML/JSON config files
767-versioned-data-formatHandling versioned data schemas
768-zero-copy-deserializeZero-copy deserialization — no allocation
769-streaming-parser-patternStreaming parsers — files larger than RAM
773-serde-attributes-concept#[serde(rename)], #[serde(default)], etc.

Parsers (data ingestion):

ExampleWhat it shows
151-parser-introParser combinator introduction
171-csv-parserCSV parser from scratch
172-ini-parserINI file parser
175-json-parserJSON parser from scratch
770-recursive-descent-parserRecursive descent parser
771-pratt-parserPratt parser — operator precedence
772-parser-combinator-patternParser combinator composition

💪 Exercism (prerequisite data-processing skills — Exercism has no dedicated Polars exercises)

ExerciseFocus
saddle-points2D data processing — grid filtering
largest-series-productString parsing + numeric processing
matrixParsing text into 2D data structure
dominoesGraph-style data manipulation
tournamentParsing, aggregating, sorting tabular data — closest to Polars use case

🎓 Also in Curriculum (from Teacher Guide)

ResourceURLWhat it adds
Polars User Guidedocs.pola.rsPrimary reference — start here before coding
Jon Gjengset — Crust of RustYouTube playlistSerde / data processing episodes

Module 15: Final Capstone Project

Goal: Apply all learned concepts in a substantial, portfolio-ready application.

Options: CLI Tool (like ripgrep) · Web Server (multi-threaded, from scratch) · Data Pipeline (CSV/JSON → Polars → reports) · TUI Application (ratatui) · Embedded (microcontroller driver)


📖 Book & References

ResourceWhat to read
📕 The Rust Programming Language, 2nd ed. (NoStarch, $39.95 · ISBN 978-1-7185-0044-0)Chapter 12 (grep project) · Chapter 20 (web server)
📗 Programming Rust, 2nd ed. (O'Reilly, $59.99 · ISBN 978-1-492-05259-5)Full book — production-quality Rust reference
📙 Zero To Production In Rust (self-published, $39.99 — also ebook) by Luca PalmieriComplete web service in production Rust — ideal Web Server capstone companion
📘 Rust for Rustaceans (NoStarch, $39.95 · ISBN 978-1-7185-0185-0) by Jon GjengsetAll chapters — write Rust like an expert
Ch 12 — I/O Project: grepFull worked CLI tool — direct capstone blueprint
Ch 20 — Final Project: Web ServerFull multi-threaded server from scratch
ratatui docsTUI framework for terminal dashboards
clap crateCLI argument parsing — essential for CLI capstone
axum crateModern async web framework
tokio docsAsync runtime — the foundation for network services

🦀 hightechmind.io/rust/

Data structures for capstone projects:

ExampleWhat it shows
029-binary-treeBinary tree — fundamental structure
030-count-leavesTree traversal
035-layout-binary-treeTree layout algorithms
036-tree-stringTree serialization to string
037-tree-preorderPre-order traversal
038-tree-inorderIn-order traversal
061-binary-treeBinary tree — functional approach
105-trieTrie data structure
251-quicksortQuicksort
252-insertion-sortInsertion sort
253-graph-bfsBFS graph traversal
254-graph-dfsDFS graph traversal
261-binary-search-treeBST implementation
263-avl-treeAVL self-balancing tree
362-trie-structureTrie as a data structure
365-disjoint-setUnion-Find
366-segment-treeSegment tree — range queries
367-fenwick-treeFenwick tree — prefix sums
375-lru-cacheLRU cache — important for real apps
376-bloom-filterBloom filter — probabilistic membership
377-graph-adjacency-listGraph adjacency list
378-graph-adjacency-matrixGraph adjacency matrix

Algorithms:

ExampleWhat it shows
075-merge-sortMerge sort
784-fibonacci-memo-tabDynamic programming: memoization + tabulation
785-knapsack-010/1 knapsack DP
786-longest-common-subsequenceLCS — string alignment
787-edit-distance-levenshteinEdit distance
788-coin-change-dpCoin change
798-kadane-max-subarrayMaximum subarray — Kadane's
799-bellman-fordShortest paths
800-floyd-warshallAll-pairs shortest paths
801-prims-mstPrim's MST
802-kruskals-mstKruskal's MST
803-a-star-pathfindingA* pathfinding
804-tarjan-sccTarjan's SCC
808-topological-sort-dfsTopological sort
809-max-flow-ford-fulkersonMaximum flow
814-kmp-pattern-matchingKMP string matching
821-trie-autocompleteTrie autocomplete
834-convex-hull-grahamConvex hull
840-divide-and-conquer-patternDivide and conquer framework
841-backtracking-frameworkBacktracking template
842-branch-and-boundBranch and bound
843-memoization-genericGeneric memoization
844-greedy-algorithm-patternsGreedy algorithm patterns
848-algorithm-complexity-guideBig-O reference for all algorithms

Unsafe Rust / FFI / performance (advanced capstone):

ExampleWhat it shows
699-raw-pointer-basicsRaw pointers
700-unsafe-blockunsafe {} blocks
701-unsafe-functionunsafe fn
710-extern-c-functionsFFI: calling C from Rust
712-ffi-string-conversionCString / CStr
719-struct-of-arraysSoA layout for cache performance
720-cache-friendly-iterationCache-friendly data access
722-memory-layout-repr#[repr(C)], #[repr(packed)]
724-zero-copy-parsingZero-copy parsing
728-inline-hints#[inline], #[inline(always)]
729-avoid-allocationsAllocation avoidance patterns
732-benchmarking-harnessBenchmarking — measure before optimizing

Learning paths — curated sequences:

PathBest for
path-first-stepsBeginner arc: setup → ownership → types
path-backend-engineerWeb server / data pipeline capstone
path-systems-masteryCLI tool / embedded capstone
path-functional-puristParser / interpreter capstone
path-from-ocamlComing from OCaml/Haskell background

💪 Exercism (final-stage challenges)

ExerciseFocus
pokerComplex domain: sorting, comparing, grouping
forthInterpreter — stack machine, language design
reactReactive event graph — dependency tracking, ownership
robot-simulatorState machine — structs + enums + methods combined
xorcismLifetime-heavy streaming XOR cipher
decimalArithmetic on custom types — operator overloading

Final Deliverable: A complete, tested, and documented Rust application to showcase in your portfolio.



Reference Resources Guide

Complete at-a-glance overview of every resource used in this curriculum. Use this page as your bookmark hub.


📖 Books

TitleURLCostFormatBest For
The Rust Programming Languagedoc.rust-lang.org/bookFreeWeb / PDFModules 1–12 — the primary text
The Rust Programming Language (print)nostarch.com~$39.95PaperbackSame content — desk reference
Rust by Exampledoc.rust-lang.org/rust-by-exampleFreeWebModules 1–12 — see every concept running in-browser
The Little Book of Rust Macrosveykril.github.io/tlbormFreeWebModule 13 — definitive macro reference
The Rustonomicon (Nomicon)doc.rust-lang.org/nomiconFreeWebModule 15 (Unsafe) — unsafe Rust deep dive
The Async Bookrust-lang.github.io/async-bookFreeWebModule 12 (Async) — async/await in depth
The Cargo Bookdoc.rust-lang.org/cargoFreeWebModule 1 — build system and project management
The Rust Referencedoc.rust-lang.org/referenceFreeWebAll modules — language specification
Polars User Guidedocs.pola.rsFreeWebModule 14 — DataFrame library

🖥️ Interactive Practice & Online Playgrounds

ResourceURLCostWhat You DoBest For
Exercism — Rust Trackexercism.org/tracks/rustFree (mentored)Solve 100+ exercises with in-browser editor — no install needed. Optional human mentor feedback.⭐ All modules — best hands-on practice
Rust Playgroundplay.rust-lang.orgFreeOfficial playground — run, share, format, Clippy-check any Rust snippet instantly. Shareable links.All modules — paste any example, test immediately
Rust Explorergodbolt.org/z/rustFreeCompiler Explorer — see what your Rust compiles to (assembly, MIR, LLVM IR). Multiple Rust versions.M3+ — understand what the compiler actually does
Rustlingsgithub.com/rust-lang/rustlingsFreeFix 94 broken programs in your terminal — immediate red/green feedback loopModules 1–13 — fast syntax and concept drilling
Codewars — Rustcodewars.com/kata/search/rustFreeKata challenges in Rust with in-browser editor — community-rated difficultyM5+ — algorithm practice beyond Exercism
LeetCode — Rustleetcode.comFree/Paid2000+ algorithm problems — Rust is supported with in-browser editorM8+ — interview prep in Rust
Rust Quizdtolnay.github.io/rust-quizFreeTricky language questions with explanationsModules 3–8 — deepen understanding
Replitreplit.comFree/PaidFull Rust project in browser — install crates, run cargo commandsM5+ — when you need a full project environment online

🎓 Courses

ResourceURLCostFormatBest For
Comprehensive Rust (Google)google.github.io/comprehensive-rustFree4-day course (self-paced)Modules 1–5 — structured alternative to the book
Linux Foundation: Rust Fundamentalstraining.linuxfoundation.orgPaidOnline, self-pacedModules 1–12 — prep for LF certification
Zero To Production In Rustzero2prod.comPaid bookBook + exercisesModule 15 (Web) — production web server in Rust

🎥 Video

Channel / SeriesURLCostTopics CoveredBest For
Jon Gjengset — Crust of Rustyoutube.com — playlistFreeSmart pointers, concurrency, atomics, channels, proc macrosModules 11–13 — deep dives
Jon Gjengset — Decrustedyoutube.com/@jonhooFreeExploring popular crates (tokio, serde, axum)Modules 12–15
Let's Get Rustyyoutube.com/@letsgetrustyFreeBook chapters, ownership, traitsModules 1–8 — accessible walkthroughs
Ryan Levick — Rust streamsyoutube.com/@ryanlevicksoftwareFreeRust in production, error handlingModules 7–12

🦀 Live Examples Library

ResourceURLCostExamplesBest For
hightechmind.io/rust/hightechmind.io/rustFree860+ working programsAll modules — see every concept in working code
path-first-stepscurated pathBeginner arcModules 1–5
path-backend-engineercurated pathWeb / API / dataModules 12–15
path-systems-masterycurated pathUnsafe, FFI, perfModule 15
path-functional-puristcurated pathMonads, optics, FPModules 8–15
path-from-ocamlcurated pathOCaml → RustModules 3–10

📜 Official Reference Docs

ResourceURLWhat It Is
Standard Library Docsdoc.rust-lang.org/stdFull API reference — look up any type, trait, or function
Docs.rsdocs.rsDocs for every crate on crates.io — essential for dependencies
Crates.iocrates.ioPackage registry — find and choose crates
Lib.rslib.rsBetter crate search — categorised, ranked by quality
Rust API Guidelinesrust-lang.github.io/api-guidelinesHow to design idiomatic APIs
Rust Forgeforge.rust-lang.orgRust project processes
Are We Web Yet?arewewebyet.orgWeb framework status — which crates to use
Are We Async Yet?areweasyncyet.rsAsync ecosystem status

🛠️ Tools

ToolInstallWhat It Does
rustupcurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | shToolchain manager — install Rust, switch versions
cargoincluded with rustupBuild, test, run, publish
rust-analyzerVS Code extension or rust-analyzer.github.ioIDE support — completions, errors, go-to-def
clippyrustup component add clippycargo clippyLinter — catches common mistakes
rustfmtrustup component add rustfmtcargo fmtFormatter — enforces style
cargo-watchcargo install cargo-watchAuto-recompile on save
cargo-expandcargo install cargo-expandExpand macros — essential for Module 13
cargo-flamegraphcargo install flamegraphProfiling — for Module 15 performance work
cargo-criterioncargo install cargo-criterionBenchmarking framework

🏆 Certifications

CertificationProviderURLCostWhen to Take
Rust Programming Professional CertificateLinux Foundation / edXtraining.linuxfoundation.org~$395Week 28 — after completing Modules 1–12
Member Training OfferingsRust Foundationfoundation.rust-lang.org/resources/educationVariesAny time — lists approved training providers

🗺️ Per-Module Resource Map

ModuleTopicBook ChaptersCurriculum ResourcesLive ExamplesExercism
1SetupCh 1, App DRustlings · Comprehensive Rust · Rust by Example001, 006hello-world
2Common ConceptsCh 3, App BRustlings · Comprehensive Rust · RBE flow_control003, 022, 058, 069–071lucians-lasagna · raindrops · grains · fizzbuzz
3OwnershipCh 4Rustlings · Comprehensive Rust · RBE scope101–104, 113–115reverse-string · bob · run-length-encoding
4Structs & EnumsCh 5–6Rustlings · Comprehensive Rust · RBE custom_types041–044, 058, 061–590clock · allergies · triangle
5ModulesCh 7Rustlings · RBE modules063, 065space-age
6CollectionsCh 8RBE std/vec · RBE std/hash002–028, 068, 073, 113, 471–500word-count · anagram · pangram
7Error HandlingCh 9RBE error045–050, 072–073, 291–320error-handling · wordy
8Traits & LifetimesCh 10, 17.2, 19.3–4RBE generics · RBE traits077–085, 123–150, 381–410, 531–560accumulate · dot-dsl
9TestingCh 11RBE testing744–758sieve · perfect-numbers
10Iterators & ClosuresCh 13RBE closures · RBE iterators054–057, 085–104, 256–290, 501–530nucleotide-count · isbn-verifier · accumulate
11Smart PointersCh 15Jon Gjengset: Smart Pointers108–118, 355–368, 550–553simple-linked-list · doubly-linked-list
12ConcurrencyCh 16, 20Jon Gjengset: Channels · Atomics109, 321–350, 441–470parallel-letter-frequency · bank-account
13MacrosCh 19.5 + tlbormJon Gjengset: Proc Macros411–440, 422–427, 734–743macros
14Data ProcessingPolars Guide · csv docs · Serde docsJon Gjengset: Serde episodes171, 175, 759–773saddle-points · tournament
15CapstoneCh 12 + Ch 20 + crate docsJon Gjengset: axum/tokio251–263, 784–848, 699–732, path-*poker · forth · react

Certification Quick Reference

You've completed Modules 1–15. Here is everything you need to get certified.

Linux Foundation Rust Programming Professional Certificate (LFRS)

ProviderLinux Foundation / edX
Exam pagetraining.linuxfoundation.org/certification/rust-programming-professional-certificate
Cost~$395 USD (bundles occasionally discounted on edX)
FormatPerformance-based — write real Rust code in a browser IDE (no multiple choice)
Duration2 hours
Passing score66%
Validity3 years, then renewable
ProctoredYes — via PSI Online; requires webcam + quiet room
Free retakeOne free retake included if you do not pass first attempt

Exam domain coverage

Exam domainCovered in
Syntax, types, control flowModules 1–2
Ownership, borrowing, lifetimesModules 3, 8
Structs, enums, pattern matchingModule 4
Modules and cratesModule 5
Collections, stringsModule 6
Error handlingModule 7
Traits and genericsModule 8
TestingModule 9
Closures and iteratorsModule 10
Smart pointers (Box, Rc, RefCell)Module 11
Concurrency (threads, channels, async)Module 12

Modules 13–15 (Macros, Data Processing, Capstone) are advanced specializations — they go beyond the LFRS exam scope.

How to register

  1. Go to training.linuxfoundation.org/certification/rust-programming-professional-certificate
  2. Click "Get Certified" — optionally bundle with LFD459 training course for a discount
  3. You have 12 months from purchase to schedule the exam
  4. Schedule via the PSI Online portal (link emailed after purchase)
  5. One free retake if you do not pass on the first attempt

Final prep checklist

  • Complete all Rustlings exercises through Module 12
  • Solve 5+ Exercism exercises at the "hard" difficulty
  • Read the official LFRS Exam Prep Guide (linked from the cert page)
  • Practice writing code in a plain editor without auto-complete — the exam IDE is minimal
  • Time yourself: aim to solve a medium-difficulty exercise in under 15 minutes
  • Review unsafe, Pin, Send/Sync — these appear in Modules 11–12 and trip up candidates

Back to top