Concurrency patterns: threads, mpsc channels, shared state (Mutex/Arc), and why it's 'fearless'
Advanced Rust: unsafe abilities, advanced traits/types, macros, and a threaded HTTP server with shutdown
About the free online course
Rust is the language teams reach for when performance cannot come at the cost of reliability. This free online course is designed to help you move from Rust first steps to confidently building real programs that feel modern, fast, and safe by default. You will learn how to set up projects the Rust way, work productively with Cargo, and develop an intuitive workflow for compiling, running, and shipping code without the friction common in lower-level languages.
As you progress, you will build a strong mental model of what makes Rust different: ownership, borrowing, and lifetimes. Instead of treating these concepts as obstacles, you will practice using them to write code that prevents entire classes of bugs—especially memory errors—before they happen. Along the way, you will work with structs, enums, pattern matching, modules, and collections in ways that make your code expressive, maintainable, and scalable as projects grow.
The course also focuses on writing Rust that is reusable and professional: generics and traits for clean abstraction without runtime overhead, clear error handling strategies, and a testing approach that supports both unit and integration scenarios. You will apply these skills while developing practical projects such as command-line tools, learning how to structure code into libraries, and understanding the reasoning behind clean separation of responsibilities.
Beyond the fundamentals, you will explore advanced features that power serious Rust applications: iterators and closures for elegant data transformations, publishing crates, organizing larger codebases with workspaces, and using smart pointers responsibly—including scenarios involving interior mutability and reference cycles. You will also step into Rust concurrency, learning how threads, message passing, and shared-state patterns deliver fearless concurrency with fewer surprises.
Finally, you will connect the language to real systems work by building a simple web server and understanding how networking basics, thread pools, and graceful shutdown patterns translate into resilient software. By the end, you will have a portfolio of Rust skills that map directly to modern development needs in systems programming, tooling, backend services, and performance-critical applications.
Course content
Video class: ULTIMATE Rust Lang Tutorial! - Getting Started07m
Exercise: Which tool is Rust’s built-in build system and package manager used to manage dependencies and build projects?
Video class: Programming a Guessing Game in Rust!13m
Exercise: How does the guessing game handle invalid (non-numeric) user input without crashing?
Video class: Common Programming Concepts in Rust14m
Exercise: In Rust, what is the correct way to allow a variable to be reassigned after its initial value is set?
Video class: Understanding Ownership in Rust25m
Exercise: In Rust, what is the ownership model primarily used for?
Video class: Structs in Rust17m
Exercise: In Rust, what distinguishes a method from an associated function on a struct?
Video class: Enums and Pattern Matching in Rust12m
Exercise: In Rust, what is the purpose of the Option enum compared to null values in other languages?
Video class: Rust's Module System Explained!22m
Exercise: In Rust, what happens when a file named main.rs exists in the src directory of a package created with Cargo?
Video class: Common Collections in Rust24m
Exercise: Which method provides a safer way to access an element in a vector without crashing on an out-of-bounds index?
Video class: Error Handling in Rust16m
Exercise: In Rust, what is the recommended default approach for handling errors in most situations?
Video class: Generic Types in Rust15m
Exercise: Why does Rust use generics without a runtime performance penalty?
Video class: Traits in Rust11m
Exercise: In Rust, what is the purpose of using a trait like Summary for types such as a news article and a tweet?
Video class: Rust Lifetimes Finally Explained!19m
Exercise: In Rust, why does a function like longest that returns one of two string slice references often require an explicit lifetime annotation?
Video class: Testing in Rust15m
Exercise: In Rust, how do you mark a function so it is treated as a test by the test runner?
Video class: Testing in Rust - Part 214m
Exercise: In Rust, where do integration tests live and what interface can they access?
Video class: Writing a CLI App in Rust! - Part 117m
Video class: Writing a CLI App in Rust! - Part 216m
Exercise: Why were the run function and Config struct moved from main.rs into lib.rs?
Video class: Closures in Rust19m
Exercise: Which statement best describes a Rust closure compared to a regular function?
Video class: Iterators in Rust13m
Exercise: In Rust, why does calling the iterator adapter method `map` alone not produce any output or changes?
Video class: Iterators in Practice07m
Exercise: Why was the config constructor changed to accept an iterator over command-line arguments instead of a slice of Strings?
Video class: Publishing a Rust Crate!14m
Exercise: What does the command cargo build --release do compared to cargo build?
Video class: Cargo Workspaces11m
Exercise: In a Cargo workspace, which statement best describes how dependencies and build outputs are managed across member packages?
Video class: The Box Smart Pointer in Rust12m
Exercise: Why does wrapping the recursive enum field in Box fix the infinite size error?
Video class: Smart Pointers in Rust - The Deref Trait10m
Exercise: What is the main purpose of the Deref trait in Rust smart pointers?
Video class: Smart Pointers in Rust - The Drop Trait05m
Exercise: How can you manually clean up a value early in Rust without calling its Drop method directly?
Video class: Smart Pointers in Rust - Reference Counting08m
Exercise: What is the main purpose of Rust’s reference counting smart pointer (Rc)?
Video class: Smart Pointers in Rust - Interior Mutability17m
Video class: Smart Pointers in Rust - Reference Cycles15m
Exercise: How can Rust code end up with a memory leak when using smart pointers?
Video class: Concurrency in Rust - Creating Threads10m
Exercise: Why does Rust call its approach to concurrency fearless concurrency?
Video class: Concurrency in Rust - Message Passing09m
Exercise: In Rust message-passing concurrency using mpsc channels, how can you allow two different threads to send messages to the same receiver?
Video class: Concurrency in Rust - Sharing State09m
Video class: Object Oriented Programming in Rust07m
Exercise: Which object-oriented characteristic is NOT supported directly in Rust for structs (i.e., you can't inherit fields and methods from another struct)?
Video class: Using Trait Objects in Rust13m
Video class: State Design Pattern in Rust20m
Exercise: In the blog post state workflow, what should the content() method return before a post is published?
Video class: Patterns and Matching10m
Exercise: In Rust, why do match expressions often use a catch-all pattern (_) ?
Video class: Pattern Syntax in Rust15m
Exercise: In Rust pattern matching, what does the @ operator allow you to do in a match arm?
Video class: Writing Unsafe Rust15m
Exercise: Which of the following is one of the five special abilities that Rust enables inside an unsafe block?
Video class: Advanced Traits in Rust13m
Exercise: What is a key difference between associated types and generics in trait implementations?
Video class: Advanced Types in Rust08m
Exercise: What is the main reason to use the newtype pattern when implementing a trait in Rust?
Video class: Advanced Function and Closures in Rust07m
Exercise: In Rust, why might you return a boxed trait object (e.g., Box i32>) instead of using impl Fn when returning a closure?
Video class: Declarative Macros in Rust06m
Exercise: What is a key difference between Rust functions and macros?
Video class: Procedural Macros in Rust11m
Exercise: Which statement best describes how procedural macros work in Rust?
Video class: Building a Web Server in Rust - Part 116m
Exercise: When building a bare-bones single-threaded web server in Rust, which pair of protocols is used, and what does each one describe?
Video class: Building a Web Server in Rust - Part 220m
Exercise: Why does using a fixed-size thread pool help an HTTP server handle slow requests without blocking other requests?
Video class: Building a Web Server in Rust - Part 308m
Exercise: In a Rust thread pool, what change enables a graceful shutdown so worker threads can stop instead of looping forever?