// LEARN · LANGUAGES & FRAMEWORKS
C++
A practical modern C++ course from a first compiled program to ownership, move semantics, templates, concurrency and performance. Every example is compiled and run as C++23 with sanitizers switched on.
Level: Beginner to advanced · For: Anyone who wants to write safe, current C++, from a first program to systems code. Prior programming helps but is not required.
Syllabus
Beginner
Coming soon
After this level you can
- Compile and run a single-file C++23 program with warnings and sanitizers switched on, and read the first error the compiler reports
- Write programs with fundamental types, if and switch, loops and functions that take parameters by value or by const reference
- Store and process data with std::string, std::vector, std::array, std::map and std::unordered_map
- Define a class whose constructor enforces an invariant and whose destructor releases what the object owns
B1Toolchain and first programsComing soon · 5 lessonsRuns on your computer
Compile, run and fix a small program with -Wall -Wextra and sanitizers
You build: A unit converter
- B1.1Coming soon
- B1.2Coming soon
- B1.3Coming soon
- B1.4Coming soon
- B1.5Coming soon
B2Types, variables and control flowComing soon · 5 lessonsRuns on your computer
Use fundamental types, brace initialisation, if, switch and loops correctly
You build: A number-guessing game with <random>
- B2.1Coming soon
- B2.2Coming soon
- B2.3Coming soon
- B2.4Coming soon
- B2.5Coming soon
B3Functions, references and namespacesComing soon · 5 lessonsRuns on your computer
Split logic into functions with the right parameter passing, across header and source files
You build: A small maths library in a header and source file
- B3.1Coming soon
- B3.2Coming soon
- B3.3Coming soon
- B3.4Coming soon
- B3.5Coming soon
B4Strings and standard containersComing soon · 6 lessonsRuns on your computer
Store and process text and collections with the standard library
You build: A word-frequency counter
- B4.1Coming soon
- B4.2Coming soon
- B4.3Coming soon
- B4.4Coming soon
- B4.5Coming soon
- B4.6Coming soon
B5Classes and invariantsComing soon · 5 lessonsRuns on your computer
Write a class whose constructor enforces an invariant and whose destructor cleans up
You build: A bank-account class
- B5.1Coming soon
- B5.2Coming soon
- B5.3Coming soon
- B5.4Coming soon
- B5.5Coming soon
Beginner project
Contact book CLI
Reads add, list, find, delete, save and load commands, keeps contacts in a vector of structs, saves them to a text file and runs sanitizer-clean.
Runs on your computerSelf-checked against a rubric
Intermediate
Coming soon
After this level you can
- Choose between a local object, std::unique_ptr and std::shared_ptr for an ownership need, and spot a dangling reference
- Implement a resource-owning type that follows the rule of zero or the rule of five, and explain when a move happens
- Report errors with exceptions, std::optional or std::expected, and give each function a stated exception-safety guarantee
- Process data with algorithms, lambdas and range views, and write function templates constrained by concepts
- Split a program into a CMake project with CTest tests and debug it with GDB
I1Memory, lifetime and smart pointersComing soon · 6 lessonsRuns on your computer
Choose the right owner and catch lifetime bugs with AddressSanitizer
You build: A tree of nodes owned by unique_ptr
- I1.1Coming soon
- I1.2Coming soon
- I1.3Coming soon
- I1.4Coming soon
- I1.5Coming soon
- I1.6Coming soon
I2Copy, move and value semanticsComing soon · 5 lessonsRuns on your computer
Implement rule-of-zero and rule-of-five types and predict copies versus moves
You build: A Buffer type with tests
- I2.1Coming soon
- I2.2Coming soon
- I2.3Coming soon
- I2.4Coming soon
- I2.5Coming soon
I3Error handlingComing soon · 5 lessonsRuns on your computer
Pick exceptions, std::optional or std::expected for a failure and state the guarantee
You build: A config-file parser
- I3.1Coming soon
- I3.2Coming soon
- I3.3Coming soon
- I3.4Coming soon
- I3.5Coming soon
I4Algorithms, lambdas and rangesComing soon · 6 lessonsRuns on your computer
Replace hand-written loops with algorithms and range views
You build: A CSV sales report
- I4.1Coming soon
- I4.2Coming soon
- I4.3Coming soon
- I4.4Coming soon
- I4.5Coming soon
- I4.6Coming soon
I5Generic programmingComing soon · 5 lessonsRuns on your computer
Write templates constrained by concepts, and compile-time code with constexpr
You build: A generic statistics header
- I5.1Coming soon
- I5.2Coming soon
- I5.3Coming soon
- I5.4Coming soon
- I5.5Coming soon
I6Files, projects, testing and debuggingComing soon · 5 lessonsRuns on your computer
Organise a multi-file CMake project with CTest tests and step through it in GDB
You build: A log-file analyser
- I6.1Coming soon
- I6.2Coming soon
- I6.3Coming soon
- I6.4Coming soon
- I6.5Coming soon
Intermediate project
Log analyser
A CMake project that parses every log file in a directory with std::expected and reports per-level counts and the top messages using ranges.
Runs on your computerSelf-checked against a rubric
Advanced
Coming soon
After this level you can
- Design polymorphic code with virtual interfaces, std::variant or templates, and justify the choice
- Write concurrent code with std::jthread, mutexes, condition variables and atomics that ThreadSanitizer reports clean
- Measure and improve performance with optimisation flags, data layout and avoided copies, with before-and-after numbers
- Find and fix bounds, lifetime and integer-overflow bugs, and harden a build with sanitizers and library assertions
A1Polymorphism and designComing soon · 5 lessonsRuns on your computer
Choose between virtual interfaces, std::variant and templates for a design
You build: A pluggable shape renderer
- A1.1Coming soon
- A1.2Coming soon
- A1.3Coming soon
- A1.4Coming soon
- A1.5Coming soon
A2ConcurrencyComing soon · 6 lessonsRuns on your computer
Write threaded code that ThreadSanitizer reports clean
You build: A parallel word counter
- A2.1Coming soon
- A2.2Coming soon
- A2.3Coming soon
- A2.4Coming soon
- A2.5Coming soon
- A2.6Coming soon
A3PerformanceComing soon · 5 lessonsRuns on your computer
Measure, then speed up code with flags, data layout and fewer copies
You build: Optimising a slow report, with before and after timings
- A3.1Coming soon
- A3.2Coming soon
- A3.3Coming soon
- A3.4Coming soon
- A3.5Coming soon
A4Safety and security pitfallsComing soon · 5 lessonsRuns on your computer
Find and fix bounds, lifetime and overflow bugs, and harden a build
You build: Fixing a vulnerable parser
- A4.1Coming soon
- A4.2Coming soon
- A4.3Coming soon
- A4.4Coming soon
- A4.5Coming soon
A5Modern features and the ecosystemComing soon · 5 lessonsRuns on your computer
Use custom formatters, coroutine generators and modules, and add a dependency with CMake
You build: A formatted report with a generator pipeline
- A5.1Coming soon
- A5.2Coming soon
- A5.3Coming soon
- A5.4Coming soon
- A5.5Coming soon
Advanced project
Thread-safe key-value store
An in-memory store with a SET, GET, DEL and STATS line protocol driven by worker threads, sanitizer-clean and benchmarked before and after one optimisation.
Runs on your computerSelf-checked against a rubric
Capstone
Capstone
File indexer and search tool
Walks a directory tree, builds an inverted index in parallel with a thread pool, saves it to a binary file and answers AND and OR queries.
Runs on your computerSelf-checked against a rubric