computer science / systems
Learn Computer Systems for Free
How computers really work, from transistors to distributed clusters. The free courses below take you down the whole stack — build a computer from scratch, understand operating systems, and learn how networks tie it all together.
"Systems" is where the abstractions leak: where you learn what's actually happening beneath your code. It's the knowledge that separates engineers who can debug anything from those who can only hope, and it's what makes you fast, efficient, and calm when something breaks in production. This is deeper, more demanding material than an intro course, so it rewards a clear path: work bottom-up, from how a computer is built, to how the operating system manages it, to how machines talk to each other across a network. Each layer explains the one above it. The free courses below are the best in the world for each layer, and this guide lays out the order to take them and how to get the most from them.
01 · HOW COMPUTERS WORK
Architecture — build a computer from scratch
Start at the bottom: logic gates, machine code, and how hardware runs your programs.
- Nand2Tetris ↗Build a working computer from first principles — from logic gates up to an OS and a game. The most satisfying free course in CS.nand2tetris.org
- CMU 15-213 — Intro to Computer Systems (CS:APP) ↗The legendary CMU course behind the "CS:APP" book — memory, assembly, and performance, with free materials and labs.cs.cmu.edu
02 · OPERATING SYSTEMS
Operating systems
How the OS juggles processes, memory, and files so your programs don't have to.
- Operating Systems: Three Easy Pieces (free book) ↗The best free OS textbook, chapter by chapter — clear, funny, and complete. The standard starting point.pages.cs.wisc.edu
- MIT 6.1810 / 6.828 — Operating System Engineering ↗MIT's hands-on OS course where you build a real Unix-like kernel (xv6). Labs and materials are free online.pdos.csail.mit.edu
03 · NETWORKS & DISTRIBUTED
Networking & distributed systems
How machines talk, and how to build systems that span thousands of them.
- Stanford CS144 — Computer Networking ↗Stanford's networking course where you build your own TCP implementation. Free lectures and labs.cs144.github.io
- MIT 6.824 — Distributed Systems ↗The famous MIT course on how large-scale systems work (Raft, MapReduce, sharding), with free lecture videos and labs.pdos.csail.mit.edu
04 · HOW TO LEARN IT
How to study systems (and why it's worth it)
Systems courses are hands-on and demanding — you'll write assembly, build a kernel, or implement TCP. That's the point: the discomfort is where deep understanding forms. Work bottom-up (architecture, then OS, then networking) so each layer rests on the one below, and prioritize the labs over the lectures. A useful prerequisite is comfort with C and the command line, since most systems work happens there.
05 · FAQ
Frequently asked questions
What are computer systems in CS?
Computer systems is the area of computer science covering how computers actually work beneath your code, including computer architecture, operating systems, networking, and distributed systems. It explains what happens from transistors and memory up to clusters of machines.
What should I learn first in computer systems?
Start with computer architecture, such as Nand2Tetris or CMU's CS:APP course, to understand how hardware runs programs. Then move to operating systems, and finally to networking and distributed systems, building each layer on the one below.
Is Nand2Tetris a good place to start?
Yes. Nand2Tetris is a beloved free course where you build a complete computer from logic gates up to an operating system and a game. It gives you a deep, satisfying understanding of how computers work from first principles.
Do I need to know C for systems programming?
Comfort with C is very helpful, since most systems courses and real systems work happen in C and involve memory management. You do not need to be an expert to start, but learning C basics alongside a systems course makes it much smoother.
Why is learning computer systems important?
Understanding systems makes you a far more capable engineer: you can debug hard problems, write efficient code, and reason about performance and reliability. It is the knowledge that separates people who can fix anything from those who can only guess.