Modern C++ Made Simple

Whether you're new to coding or switching careers, we've got you covered. Learn C++ from the ground up starting with our introductory course.

Intro to C++ Programming

Free Beginner Course

Intro to C++ Programming

Become a software engineer with C++. Starting from the basics, we guide you step by step along the way

Progress0 / 61
Get Started

Free Intermediate Course

Professional C++

Comprehensive course covering advanced concepts, and how to use them on large-scale projects.

Progress0 / 128
Get Started

Free Intermediate Course

Practical DSA

Learn data structures and algorithms by building real systems, measuring performance, and understanding how your code interacts with the physical hardware.

Progress0 / 61
Get Started

Intermediate Course

Managing C++ Projects Using CMake

Manage complex, cross-platform builds using industry-standard tools. Create scalable build systems that automate the entire development lifecycle.

Progress0 / 61
Get Started

Intermediate Course

Game Development with SDL3

Learn C++ and SDL development by creating hands on, practical projects inspired by classic retro games

Progress0 / 132
Get Started

Recent Updates

New content is added on a regular basis, and we consistently update, improve, and revise what's already available.

Intro to C++ Programming

References

This lesson introduces references, explaining how they work, their benefits, and their role in performance and data manipulation

• Updated
View
Practical DSA

Queues and Stacks

Learn how to decouple producers and consumers using FIFO and LIFO buffering structures.

• Updated
View
Practical DSA

MPMC Ring Buffers

Build a Multi-Producer Multi-Consumer lock-free queue using CAS loops, Sequence Tickets, and memory ordering.

• New
View
Practical DSA

Lock-Free Object Pools

Build a highly concurrent, lock-free object pool and defeat the ABA problem using generation tags.

• New
View
Practical DSA

Lock-Free Stacks

Build a highly concurrent Treiber stack using atomic Compare-And-Swap (CAS) instructions.

• New
View
Practical DSA

Locks and Atomics

Learn how mutexes and atomics prevent race conditions, and why hardware contention can make multithreaded code slower than single-threaded code.

• Updated
View
Practical DSA

Cache Coherency and False Sharing

Explore the performance cost of synchronization, how to mitigate it, and how to avoid it entirely with better algorithm design.

• Updated
View
Practical DSA

Execution Contexts and std::thread

Review concurrency and learn how to directly manage OS threads using std::thread and std::jthread.

• New
View
Practical DSA

Data Tearing and std::atomic

Understand the physical reality of moving data between RAM and registers. Learn why explicit loads and stores are required to prevent data tearing in complex structs.

• Updated
View
Practical DSA

Compare-And-Swap (CAS)

Learn how to perform complex lock-free atomic updates using compare_exchange_weak() and the hardware limitations.

• Updated
View
Practical DSA

Instruction Reordering

Learn how CPU out-of-order execution breaks lock-free code, and how to use seq_cst, acquire, release, acq_rel, and relaxed to fix it.

• Updated
View
Practical DSA

Lock-Free Pointers

Discover why using CAS on pointers is a hardware minefield, exposing the physical realities of memory allocators and the infamous ABA problem.

• New
View