What C actually is, and why learn it first
The design idea behind C, what it gives up, and why that trade still shapes modern software.
C in one paragraph
C is a small, deliberately low-level language. It gives you almost nothing for free: no garbage collector, no bounds checking on arrays, no exception mechanism, no built-in string type, no ownership rules. What it gives you instead is complete control over memory and over every operation the machine performs, with a vocabulary small enough to hold in your head.
That is the whole design idea, and it is worth understanding because almost every other language you will ever learn is a reaction to it.
What C looks like
#include <stdio.h>
int main(void)
{
int total = 0;
for (int i = 1; i <= 100; i++) {
total += i;
}
printf("1 to 100 sums to %d\n", total);
return 0;
}
Fifteen lines. Every one of those lines exists because the language requires it. In a language with a container type, total would be a range object. In a language with operator overloading, += would be a method. Here, total += i means exactly: read the int at total, read the int at i, add them, store the result back into the int at total, and throw away anything that would not fit. Nothing is hidden.
The three promises C makes
1. It will tell you what you did not say. An undeclared variable is an error, not a guess. A function you called but never defined is a link error, not a silent no-op. C has a small number of rules, and it enforces them strictly. This is why a C compiler error message is usually enough to find the bug, once you can read it.
2. It will not stop you from being wrong. C does not check whether your array index is inside your array. It does not check whether you have freed something. It does not check whether you divide by zero. These are not oversights; they are the price of the design. The language hands you a very sharp tool and trusts you completely.
3. Your program will run everywhere. C is the lingua franca of systems programming. Any operating system kernel, any device driver, any embedded microcontroller, and most of the world's foundational software is C or something close to it.
Why learn it before anything else
- It is small. The whole language is about 30 keywords. You can hold all of it. Python, JavaScript, Java and C++ each hide more than C has in total.
- It teaches the machine. After C, Java's "managed heap" and Python's "memory manager" stop being magic and become engineering decisions made for you.
- It is the ancestor. C++ started as "C with classes." C# was designed to compete with Java. Go, Rust, Zig and Swift were all, in part, answers to C's trade-offs. You cannot evaluate those answers without knowing what was traded.
- It is everywhere. Linux, Windows' kernel-adjacent code, macOS, the Linux kernel, SQLite, Redis, Nginx, PostgreSQL, Git, Python's own interpreter, the firmware in your microwave. C is the floor that much of the software world stands on.
What C will cost you
Be honest about this before you start. You will write more code than you need to. You will find bugs that other languages make impossible, and that you must learn to prevent yourself. You will spend a real amount of time on memory. And you will need to understand the machine more than most programmers ever do.
In exchange you get a language that stays out of your way completely, and a mental model of computation that makes every other language easier to reason about. That is a good trade, and it is the trade every systems programmer has made for forty years.
What this course covers
Everything. From #include to errno, from "what is a byte" to building a hash map. It is a deep dive with no gaps: if a topic is needed to write real C safely, it is here, and if it is needed to read C that other people wrote, it is here too.
The course is written assuming you have never written a line of C, but it does not assume you have never programmed at all. If you have written JavaScript or Python, you will find that most concepts transfer and that the syntax is not the hard part — the memory model is.
The one-line version
| Question | Answer |
|---|---|
| Who uses it | Operating system kernels, embedded firmware, databases, browsers, game engines, compilers |
| Why they use it | Portability, control over memory and layout, zero runtime overhead, decades of proof |
| What it costs | No bounds checking, no GC, manual memory, undefined behaviour, sharp edges |
| Standardised as | ISO/IEC 9899 — C17 (2018) and C23 (2024) are current; C99 is the practical floor |
| Compiled or interpreted | Compiled, to native machine code |
| Typing | Static and weak: types are checked at compile time, but convert implicitly |
Write the "sum 1 to 100" program above, then write the same thing in Python in three lines. Look at both. Everything in this course is an explanation of what Python is hiding from you.
The toolchain lesson in this module is not optional background. Half the C questions on any interview and on any debugging session are really questions about which stage of the build something went wrong at.