C, traced from the metal up
A single booklet that starts where C itself started — a PDP-11 at Bell Labs — and ends at dynamic memory allocation. Every keyword, every loop, every pointer, explained in the order you'd actually need them.
Still the floor everything else stands on
Every language you learn after this one borrows from it — the braces, the semicolons, the idea of a function. C is where those ideas were first cast in a compiler, and understanding it changes how you read every other language.
Pointers give you the memory address itself, not an abstraction over it — the same access an operating system or a device driver needs.
The reason Unix could move off the PDP-11 in 1973 is the same reason a C program compiles on almost any architecture today.
C++, Java, C#, JavaScript, Go, and Rust all inherit its syntax for expressions, loops, and functions — learn it once, recognize it everywhere.
What actually happens when you compile
Before the first chapter on syntax, the booklet walks through the four stages every .c file passes through — so a "linker error" stops being a mystery.
Twenty chapters, four parts
Structured to be read in order — each part builds the vocabulary the next one assumes.
Who this is for
If you're starting from zero
Every chapter assumes only the one before it. History and compilation come first on purpose, so "int main(void)" means something before you're asked to type it.
If you already know another language
Skip ahead to Part III. Pointers, manual memory management, and the absence of a garbage collector are where C diverges hardest from Python, Java, or JavaScript — and where most of the useful mental model lives.
Start at 0x0000
One document, cover to conclusion — history, syntax, memory, and a reading list for where to go next.
Download the Booklet (.pdf)