Rust Team Training Curriculum

Ultimate Rust: Foundations
Starts with an introduction to Rust, and why you benefit from using – both as a foundation and within your existing ecosystem.
with Herbert WolversonShow Details
Course Description
The Ultimate Rust Foundations class starts with an introduction to Rust, and why you benefit from using – both as a foundation, and within your existing ecosystem.
Course Outline
- Rust includes Cargo, a swiss-army knife tool that can:
- Using Rust without Cargo
- Rust’s Safety Guarantees
- “Hello World” application – the foundation of most languages.
- Arrays, vectors and slices.
- Strict types and strong typing.
- Serializing and De-Serializing data.
- Iterative Programming – using iterators to combine operations.
- Working with Strings
- Protection from data races
- Easy multi-threaded concurrency with Rayon
- Ultimate control with raw threads
- High-performance Input/Output with Asynchronous design and Tokio.
- Build a CPU bound program with Rayon, and use all of your CPU power.
- Manage raw-threads and shared data.
- Spin up a simple server in 10 minutes.
- The classic Object-Oriented Programming example of different objects printing different text – but with traits.
- Designing a simple generic function with ToString.
- Stacked traits – traits that depend upon one another, combined with generic programming.

Ultimate Rust: Integrating Pipelines
Rust doesn’t have to be an all-or-nothing proposition. Rust is very good at sliding into an existing platform, allowing you to focus on optimizing – both for speed and safety.
with Herbert WolversonShow Details
Course Description
Rust doesn’t have to be an all or nothing proposition. Rust is very good at sliding into an existing platform, allowing you to focus on optimizing – both for speed and safety – the parts that matter without throwing away all of your existing hard work.
Course Outline
- Introducing FFI, the Foreign Function Interface.
- Consuming a C library from Rust:
- From C to Rust:
- Calling Go from Rust
- Building a Rust FFI Crate
- Consume the Rust crate from C
- Consume the Rust crate from Go
- Managing Your Build Process – Practical Observations
- Porting Parts to Rust
- Build an HTTP authentication service with Actix in under 200 lines of Rust.
- Build an efficient, binary protocol server with Tokio.
- Combining asynchronous high-performance I/O with CPU-bound computation.
- Event tracing
- Use a Unikernel to host a Rust service as a single-purpose virtual machine.
- Use WebAssembly (WASM) to host high-performance code in the browser.
- Build without a standard library for embedded targets

Ultimate Rust: Optimizing Rust & Debugging
The Rust compiler catches many bugs for you that are common in other languages. Use the tools to avoid bugs and use Rust’s error system to pass meaningful errors and handle them appropriately.
with Herbert WolversonShow Details
Course Description
The Rust compiler catches many bugs for you that are common in other languages. Use the tools to avoid bugs and use Rust’s error system to pass meaningful errors and handle them appropriately.
Optimizing Rust
- Measure First: the importance of knowing what to optimize
- Use Rust’s built-in benchmark system to test component performance.
- Use a Profiler to find hotspots.
- When NOT to optimize
- Optimize the Algorithm First
- Optimization levels, Safety, Link Time Optimization.
- Understanding your cache: When Optimizing for Size is faster than Optimizing for Speed.
- Using unsafe safely.
- Profile-Guided Optimization.
- Compiler hints and inlining.
- Tracing distributed components
- Is your microservice too micro?
- Blocking Operations
- Waiting for Databases, File and Network I/O
- Fast, Efficient Logging
Debugging Rust
- Using your tools
- Debugging with println statements.
- Faster printing: tracing with tokio, and fast logging.
- Types of bug
- Attaching a debugger
- Unit testing to avoid bugs in the first place.
- Use Rust’s error system to pass meaningful errors—-and handle them appropriately.
- Avoiding Bugs with the Rust Type System.
- Strong Types, compile-time checking.
- Strong Types, run-time checking.
- Floating point errors.
- Unicode errors.
- Type-conversion errors.
- Always test in debug mode to catch overflow and out-of-bounds errors.
- Memory Issues
- Great Documentation with Rust.
- Integration testing with library examples.

Rust From C/C++
This course bridges the transition from C and C++ to Rust by highlighting their similarities and differences. Exploring Rust's native compilation, memory management, and advanced features, you'll compare and contrast key concepts like types, control flow, and data structures in this class. Delve into Rust's strengths in memory safety and concurrency, alongside its unified tool, Cargo, streamlining development. Additionally, learn how Rust facilitates interoperability with C and C++ through Foreign Function Interface (FFI).
with Herbert WolversonShow Details
Course Description
This course bridges the transition from C and C++ to Rust by highlighting their similarities and differences. Exploring Rust’s native compilation, memory management, and advanced features, you’ll compare and contrast key concepts like types, control flow, and data structures in this class. Delve into Rust’s strengths in memory safety and concurrency, alongside its unified tool, Cargo, streamlining development. Additionally, learn how Rust facilitates interoperability with C and C++ through Foreign Function Interface (FFI).
Course Outline
Introduction:
- 1.0 - Introduction
Hello World:
- 2.1 - Setup & Update Rust
- 2.2 - Setup Dev Environment
- 2.3 - IDE Configuration
- 2.4 - Rust Fundamentals
Touring the Rust Langauge:
- 3.1 - Primitive Types
- 3.2 - Mutability
- 3.3 - Primitive Type Conversion
- 3.4 - Numeric Overflow
- 3.5 - Control Flow
- 3.6 - Loops
- 3.7 - Strings
- 3.8 - Functions and Scopes
- 3.9 - Structures
- 3.10 - Structure Functions
- 3.11 - Destructors - Drop
- 3.12 - Tuples and Destructuring
- 3.13 - Enums
- 3.14 - Containers
- 3.15 - Iterators
- 3.16 - Move by Default
- 3.17 - Borrowing
- 3.18 - Slices
- 3.19 - Memory Management
- 3.20 - Concurrency
- 3.21 - Program Organization
- 3.22 - Traits
- 3.23 - Generics
- 3.24 - Error Handling
Touring the Rust Ecosystem:
- 4.1 - Tool Equivalencies
- 4.2 - Unit Tests
- 4.3 - Benchmarking
Calling C from Rust with FFI:
- 5.1 - Calling C from Rust with FFI

Rust as a Service
This course teaches integrating Rust into service-oriented architectures, covering REST server development, data handling, error management, and modularization. You'll learn tracing, automated OpenAPI documentation, configuration for different environments, and alternative connectivity mechanisms like gRPC and WebSockets. Explore deploying a test service in a containerized environment, along with insights into service design, deployment strategies, and scaling. This prepares you for deploying high-performance Rust services in enterprise environments.
with Herbert WolversonShow Details
Course Description
This course teaches integrating Rust into service-oriented architectures, covering REST server development, data handling, error management, and modularization. You’ll learn tracing, automated OpenAPI documentation, configuration for different environments, and alternative connectivity mechanisms like gRPC and WebSockets. Explore deploying a test service in a containerized environment, along with insights into service design, deployment strategies, and scaling. This prepares you for deploying high-performance Rust services in enterprise environments.
Course Outline
Introduction:
- 1.0 - Introduction
REST Service:
- 2.1 - Minimal HTTP Server
- 2.2 - Service Stack
- 2.3 - Extractors
- 2.4 - Add a Simple Tower Layer (State)
- 2.5 - Add a Simple Tower Layer (Mutable State)
- 2.6 - Multiple States - Extension Layers
- 2.7 - Quick Recap on State and Layers
- 2.8 - Nesting Multiple Routers
- 2.9 - Nested Routers with State
- 2.10 - Calling Other Services
- 2.11 - Returning Status Codes
- 2.12 - Using IntoResponse
- 2.13 - Error Handling with IntoResponse
- 2.14 - Quick Recap on Nesting, Making Calls and Responses
- 2.15 - Serving Static Content with Tower
- 2.16 - Simple Header-Based Authentication
- 2.17 - Simple Header-Based Auth with Middleware
- 2.18 - Middleware Auth with Injection
- 2.19 - Selectively Applying Layers
- 2.20 - Router Layers
- 2.21 - Layer Recap
Tracing:
- 3.1 - Minimal Example
- 3.2 - Logging Axum/Tower
- 3.3 - Timing Spans
- 3.4 - Axum Spans
- 3.5 - Logging to a File
- 3.6 - Structured Logging to JSON
- 3.7 - OpenTelemetry
OpenAPI Documentation:
- 4.1 - OpenAPI Documentation
Handling Service Configuration:
- 5.1 - Environment Variables with .env
- 5.2 - The Config Crate - Basics
- 5.3 - Loading Config via HTTP
- 5.4 - CLI configuration with Clap
- 5.5 - Recap
Handling Service Configuration:
- 6.1 - Hello Tonic - Protocol Definition
- 6.2 - Hello Tonic - Project Definition and Build
- 6.3 - Hello Tonic - The Server
- 6.4 - Hello Tonic - The Client
- 6.5 - gRPC Streaming
- 6.6 - gRPC Streaming - Protocol Definition
- 6.7 - gRPC Streaming - The Server
- 6.8 - gRPC Streaming - The Client
- 6.9 - Recap So Far
- 6.10 - Authentication
- 6.11 - Tracing
- 6.12 - When to use gRPC
Web Sockets:
- 7.1 - Minimal Echo Server
- 7.2 - A native WS client
- 7.3 - JSON
Service Deployment:
- 8.1 - Test Service
- 8.2 - Native Host Deployment
- 8.3 - Docker Deployment
Service Design:
- 9.1 - Understanding Your Company Architecture
- 9.2 - Designing Individual Services
- 9.3 - Combining Services into a Modular Monolith
- 9.4 - Service Exposure
- 9.5 - Scaling Out
Wrap Up:
- 10.1 - Wrap Up