What do you want to learn this week?

Learn anything, with the time you have. If it's not in the catalog, describe it and your course is ready in minutes.

Browse courses

Free to start · no card needed

How a course goes

By the end, you can do it without the tutor.

Syllabus

C++ Core Concepts in Practice

4 modules · 15 lessons. The whole plan, with no account.

Browse the catalog →

marks each module's capstone lesson.

01Language Essentials3 lessons

This module refreshes the C++ language foundations needed for later work: declaring and reasoning about values, evaluating expressions, and tracing control flow through functions.

  • Types, Variables, and Scope

    Review fundamental and user-defined type distinctions, declarations, initialization, constness, and the relationship between variables and their scopes. Practice predicting which declarations are visible and how type choices affect valid operations.

  • Expressions and Operators

    Refresh arithmetic, comparison, logical, assignment, increment, and conditional operators, with attention to the types and values they produce. Trace nontrivial expressions without confusing evaluation order, implicit conversion, and precedence.

  • Control Flow and Functions

    Synthesize the language essentials by reasoning through conditional and iterative control flow alongside function declarations, calls, parameters, and returns. Assessment focuses on predicting execution, identifying scope and type effects, and explaining how expressions determine control decisions.

02Memory and Indirection4 lessons

Refresh how C++ names, accesses, allocates, and releases objects in memory. Learners progress from references and pointers through array addressing and dynamic lifetime, then synthesize these ideas to diagnose memory-safety problems.

  • References and Pointers

    Review references as aliases and pointers as objects that store addresses, including initialization, null pointers, dereferencing, and the address-of operator. Use short code traces to determine which object an expression accesses.

  • Arrays and Pointer Arithmetic

    Connect built-in arrays, indexing, and pointers through the equivalence between a[i] and *(a + i) in valid expressions. Determine how pointer increments and differences relate to element positions, and identify when an address falls outside the array's valid access range.

  • Dynamic Memory and Lifetime

    Examine how new creates dynamically allocated objects or arrays and how delete or delete[] ends their lifetimes. Reason about the difference between an address stored in a pointer and the lifetime of the object at that address.

  • Memory Safety Reasoning

    Synthesize references, pointers, pointer arithmetic, and dynamic lifetime to trace memory states and classify failures such as null dereferences, out-of-bounds access, use-after-delete, and mismatched deallocation. Justify whether each access is valid and explain the reasoning from object lifetime and bounds.

03Object-Oriented Design4 lessons

This module refreshes how C++ models objects through classes, controls object state, manages construction and copying, and preserves interface guarantees with constness and parameter passing. Learners then trace inheritance and dynamic dispatch while synthesizing object lifetime, copying, and polymorphic behavior.

  • Classes and Encapsulation

    Review class definitions, data members, member functions, and the distinction between an object's interface and its representation. Trace how public, private, and protected access affect which code can inspect or modify an object's state.

  • Constructors, Destructors, and Copying

    Reason about when constructors and destructors run and how copying creates or assigns object state. Distinguish copy construction from copy assignment and connect each operation to the lifetime of the objects involved.

  • Constness and Parameter Passing

    Analyze const objects, const member functions, and const references as guarantees about permitted modification. Compare pass-by-value, pass-by-reference, and pass-by-pointer by tracing aliasing, copying, and whether a function can change the caller's object.

  • Inheritance and Dynamic Dispatch

    Synthesize class interfaces, object construction and copying, constness, and parameter passing with inheritance and dynamic dispatch. Analyze base and derived objects through references or pointers, including the role of virtual functions and virtual destructors in safe polymorphic use.

04Generic STL Reasoning4 lessons

This module refreshes generic programming and the Standard Template Library through focused reasoning about function templates, container capabilities, iterator-based algorithms, and performance trade-offs. Learners progress from reading template code to selecting and evaluating STL data structures in unfamiliar C++ code.

  • Function Templates

    Function templates define type-independent operations that the compiler specializes for particular arguments. Learners reason about template parameters, deduction, explicit type arguments, and how the resulting types affect overload behavior and expressions.

  • STL Container Selection

    STL containers provide different guarantees for storage, access, insertion, removal, ordering, and key lookup. Learners compare those guarantees to determine which container fits a stated set of operations.

  • Iterators and Algorithms

    Iterators provide a common way to traverse ranges, while STL algorithms operate on those ranges without depending on a particular container. Learners reason about half-open ranges, iterator categories, algorithm preconditions, return iterators, and element mutation.

  • STL Performance and Data-Structure Choices

    This synthesis assessment combines template reasoning, container selection, iterator-based algorithms, and complexity analysis. Learners diagnose mismatches between required behavior and chosen STL components, then compare alternatives by access, update, lookup, traversal, and invalidation costs.

2 more modules in the full syllabus.

The obvious question

Why not just ask ChatGPT?

For a one-off question, go and do that. The difference shows up over weeks, when you need to finish something and still be able to do it yourself afterwards.

Structure

A general chatbot

Whatever you think to ask

codeset

A full syllabus, in order

Before you start

A general chatbot

You find out as you go

codeset

You read the whole plan first

What it sees

A general chatbot

Text you paste in

codeset

The work you actually did

Progress means

A general chatbot

The conversation continued

codeset

You worked through the syllabus

When you're stuck

A general chatbot

It hands you the answer

codeset

It finds the gap, then teaches it

Checks

A general chatbot

Nothing you have to pass

codeset

Checks along the way, then an assessment

Tomorrow

A general chatbot

Starts over, remembers nothing

codeset

Picks up where you left off in this course

What you end up with

A general chatbot

A transcript you'll never reread

codeset

The thing you built, and the syllabus behind it

The things you'd ask before signing up.

What does it cost?
Nothing to start. Every account gets 2,000 free credits, worth about forty lessons or a course you generate yourself with plenty left over, with no card and no trial clock. Past that, plans start at $14 a month, and the pricing page shows what a credit buys before you spend one.
Which languages can I learn?
The catalog covers programming languages and software engineering topics. If the language or topic you need isn't there, describe it and the tutor can generate a complete syllabus for you.
What if my language or topic isn't in the catalog?
Describe it and the tutor writes the syllabus, module by module, before you commit to any of it. Generating a course costs credits from the same free balance every account starts with, and what comes out is a course like the others: readable in full, and yours to start or discard.
Will it just hand me the answer?
It's built not to. When you get stuck it looks for the thing you've misunderstood and teaches that instead of pasting in a fix. It isn't flawless at this, but it's what the whole tutor is tuned around.
Do I have to install anything?
No. Lessons run in the browser. The editor, terminal, and files open when a lesson needs you to write code. A refresher does not open an editor.
How much time does it take?
One lesson at a time, and it holds your place exactly. Come back a week later and the tutor picks up mid-thought instead of asking you to explain your project again.
What's still rough?
It's early. Some courses go deeper than others, the tutor gets things wrong now and then, and the coding workspace still needs a laptop, though lessons and the tutor work on a phone. You'd be an early user, with everything that means.

Early access

What do you want to learn?

Say it, and you get a syllabus to read before anything is written. Or open a course that already exists and start from that plan.