Fundamentals

What does this language do?
Understand the pieces.

Learn the rules behind values, calls, types, and errors. Follow the shared questions through each language’s own behavior.

Work in progress. 111 of 111 lessons are drafted and open to read; they're still being reviewed.

Start here. No earlier module is required; choose a language and follow the suggested order.

111 topics

Still being written 111 of 111 lessons are drafted and open to read while they're reviewed. Planned topics show where the catalog is going.

Reading a program

Start here

Start with the vocabulary: what code says, what it does, and how to follow a small example.

Values, names, and variables

Start here

Follow declarations and assignments closely before treating a variable as a box in memory.

Bits, numbers, and text

Start here

Look beneath familiar values without assuming every language stores them in the same way.

Decisions and repetition

Build understanding

Use the values you understand to choose a path, repeat work, and reason about termination.

Functions, calls, and closures

Build understanding

Follow a call from argument evaluation to return, then explore the state a function can carry.

Collections and structured values

Build understanding

Build larger values and learn what indexing, resizing, copying, and iteration really involve.

References and pointers

Build understanding

Name the thing a value refers to, then follow how each language lets you reach and change it.

Types and abstraction

Build understanding

Describe the values an operation accepts and see how each language expresses a reusable contract.

Functional evaluation and effects

Build understanding

Use Haskell to question familiar assumptions about mutation, function arguments, and the timing of work.

Modules, names, and visibility

Build understanding

Organize definitions and make the boundary between public and private names explicit.

Errors and failure

Build understanding

Follow what happens when a normal result is unavailable, and keep failure behavior explicit.

Lifetimes, ownership, and cleanup

Go underneath

Now ask who can use a value, how long it remains valid, and who is responsible for releasing resources.