A vintage personal computer with a beige case and CRT monitor. Photo · Vertex Designs / Unsplash
Welcome to Phase 2. We stop describing the kitchen and start writing for the chef.

You could start a programming course in any of forty languages. Python is gentler. JavaScript runs in a browser tab. Swift makes pretty things. Rust makes safe things. Go is hip. C is over fifty years old, has fewer than 40 keywords, no garbage collector, and will happily let you crash your machine in three lines.

And yet, every modern operating system is mostly written in C. Every database. Every interpreter for those gentler languages — yes, including Python — is itself a C program. Linux is C. The kernels of macOS, iOS, Windows, Android — C, with sprinkles of C++ and Swift on top. The numerical libraries inside PyTorch and TensorFlow that make AI feasible? C, mostly, with some C++ and CUDA. The bottom of the stack is C all the way down.

So we start there. Not because C is comfortable — it is famously uncomfortable — but because, for one phase, it is genuinely useful to feel exactly how the chef from Phase 1 wants to be talked to. Every other language you'll meet is, in some way, an apology for the way C asks you to think.

The story

It begins in Murray Hill, New Jersey, in the late 1960s. Bell Labs — the research arm of AT&T, a phone company that had so much money from its government-blessed monopoly that it could afford to fund some of the best basic research on Earth. Out of that culture came the transistor (Week 2), information theory, the laser, the CCD, UNIX, and — for our story — a programming language.

In 1969, Ken Thompson, Dennis Ritchie, and a small team began writing an operating system for a discarded computer that nobody else wanted, the PDP-7. The OS was eventually called UNIX. They wrote it, painfully, in assembly. By 1971 they wanted to move it to a slightly less bad computer, the PDP-11. Rewriting the entire OS in PDP-11 assembly seemed unbearable. They needed a higher-level language — but every existing one was either too slow, too tied to its hardware, or designed by a committee with strong opinions about ALGOL.

So Dennis Ritchie wrote a new one. He started from a language called BCPL via a stripped-down dialect called B. He added types, structures, the things he and Thompson actually needed. He called it C. By 1973 the entire UNIX kernel had been rewritten in C — itself a radical move, since "writing an operating system in a high-level language" was widely considered a fool's errand. UNIX-in-C compiled, ran, and was easy enough to port that it spread, like a beneficial virus, through every university computer science department in the world.

An old telephone switchboard with rows of brass jacks and tangled wiring. Photo · Dave Meckler / Unsplash

Bell Labs paid the bills with telephone exchanges like this one. They paid for the research that, inadvertently, paid for everything since.

A short timeline

1969
Thompson and Ritchie begin work on UNIX, on a discarded PDP-7.
1971
"B" — Thompson's stripped-down BCPL — is in use. UNIX is partly in B.
1972
Ritchie writes C, adding types and structures.
1973
UNIX is rewritten in C. The first major OS in a high-level language.
1978
Kernighan & Ritchie publish The C Programming Language. Possibly the most influential programming book ever written. 268 pages.
1979
Bjarne Stroustrup, also at Bell Labs, starts adding classes to C — "C with Classes" — which will become C++. (Phase 3.)
1989
ANSI C standardised. The language is officially nailed down.
1991
Linus Torvalds writes Linux — in C. Today Linux runs ~70% of all internet servers and 100% of all Android phones.
2007
NVIDIA releases CUDA — a C-like language for programming GPUs. The compute foundation of modern AI.
2026
You're reading this on a stack that is, end-to-end, mostly C and its descendants. PyTorch, NumPy, the OS kernel, the network stack, the renderer, the SQLite cache.

Why C didn't die

Every five years since 1980, somebody has predicted C will be replaced. It hasn't been. The reasons are surprisingly simple:

  1. It maps directly onto the chef. A C function call becomes a couple of assembly instructions. A for loop becomes a tiny set of jumps and adds. There is almost no hidden machinery — what you write is pretty much what runs. This is what people mean when they call C a "thin layer over assembly".
  2. It compiles to fast code. Because the language doesn't pretend the computer is something it isn't, optimising compilers have decades of practice generating excellent assembly from C source. There is essentially no faster general-purpose language. (Rust is in the same league. Almost nothing else is.)
  3. It is the lingua franca. Want to talk to the OS? You go through the C ABI. Want to call a Python library written in Fortran? You go through the C ABI. Want a Swift app to use a database? C ABI. Every language has a "foreign function interface", and every FFI eventually becomes "be compatible with C". It's the Latin of programming.
  4. It teaches the truth. Higher-level languages spare you from understanding pointers, memory layout, allocation, stack frames, byte sizes. C insists on those things. After C, every other language feels like a vacation.

It is also, famously, a language with which you can shoot yourself in the foot in fluent and inventive ways. We will be careful. The point of this phase is not to ship production C. The point is to feel the chef.

Lines of code displayed on a dark-themed computer screen. Photo · Bernd Dittrich / Unsplash

Modern code, modern editor. The text might look familiar — but if it's a curly-brace language, its great-grandparent is C.

The family C built

Look at the languages people actually use today. Almost all of them are syntactically and conceptually descended from C. The shape of a function declaration. Curly braces. for, while, if, else. Semicolons. = for assignment, == for comparison. None of those were inevitable — most of them came from C, and survived because everyone who learned C in the '80s carried them into whatever they wrote next.

C++

1979
Bell Labs · Stroustrup

Objective-C

1984
Apple/NeXT

Java

1995
Sun · Gosling

JavaScript

1995
Netscape · Eich

PHP

1995
Lerdorf

C#

2000
Microsoft

Go

2009
Google · Pike, Thompson

Rust

2010
Mozilla · Hoare

Swift

2014
Apple · Lattner

Zig

2016
Kelley

Pick any of these and read its "hello world". You will be reading a slightly different dialect of the same family. The family is sixty years old now. It hasn't lost relevance. If anything, the C-with-better-safety branch (Rust, Zig) is having a renaissance precisely because, sixty years on, the chef still wants to be talked to in the same dialect.

Why this matters for AI

Pull back the JSON-and-Python wrapping on any AI model and you'll find C/C++ with high confidence. PyTorch's tensor engine: C++. NumPy: C. CUDA kernels: a C-shaped language. Llama.cpp — the project that put a 7-billion-parameter language model on a laptop CPU? It's right there in the name.

The reason isn't ideology. It's that AI workloads are ferociously sensitive to the exact arithmetic the chef does. A 5% slowdown in the inner loop of a matrix multiplication is, at scale, a 5% slowdown of the entire model. Nobody has time for a vacation language to handle the inner loop. The inner loop must be C, or something equivalently bare-metal.

By the end of Phase 2 you will, in a small but real way, be able to look at one of those inner loops and understand what the chef is doing. That is the foundation everything else in the course builds on.

Higher-level languages let you forget the chef. C insists you remember.

Try it yourself

Get a working C compiler in your hands today. You'll need it for the rest of Phase 2.

What's next

Before we write a single line, we need to understand what happens to it. C is a compiled language, which is one of the reasons it's fast — and it's the dividing line between C and most of the languages people learn first.

Week 10 is The Translator — compilers vs. interpreters, and why a C program is, by the time the chef sees it, no longer C at all.

Photo credits

All photos are free under the Unsplash license. Vintage computer · Vertex Designs · Switchboard · Dave Meckler · Code · Bernd Dittrich.