Nand2Tetris: The Elements of Computing Systems
Descriptions
- Source: Hebrew University (Noam Nisan, Shimon Schocken)
- Prerequisites: None, beginner-friendly
- Programming Language: HDL, Jack (Java-like), Assembly
- Difficulty: 🌟🌟🌟
- Class Hour: 80+
Nand2Tetris is a legendary course: starting from a NAND gate, build a complete computer system step by step, and ultimately run Tetris on it.
The philosophy: there's no "magic" in computer systems. From the lowest-level logic gates to the highest-level operating system and compiler, each layer can be built from the abstraction of the previous one. When you do this hands-on, you gain an inside-out understanding of computer systems.
Course Resources
- Website: nand2tetris.org
- Lectures: Coursera Part 1 | Coursera Part 2
- Textbook: The Elements of Computing Systems (free PDF available)
- Software: Download page
Course Structure
Part 1: Hardware to Computer (Chapters 1-5)
- Boolean logic: Build basic gates from NAND (AND, OR, NOT, XOR, MUX, DMUX)
- Boolean arithmetic: Build the ALU
- Sequential logic: Build registers and RAM
- Machine language: Design the instruction set
- Computer architecture: Combine all components into a complete Hack computer
Part 2: Assembly to Compiler (Chapters 6-11)
- Assembler: Translate assembly to machine code
- VM I: Stack-based VM implementation
- VM II: Program control flow
- High-level language: Jack language (Java-like)
- Compiler I: Syntax analysis
- Compiler II: Code generation
- Operating system: Standard libraries
Self-Study Tips
Don't skip any chapter. Each builds on the previous. Skip gates and you can't understand the ALU; skip the ALU and you can't understand the CPU.
Do the projects. The course centers on 12 projects — from designing a NAND gate to implementing Tetris. Each requires hand-on work; no shortcuts.
Pair with CS:APP. Nand2Tetris gives a bottom-up perspective; CS:APP gives a top-down perspective. Together, they provide a complete picture.
Notes
Nand2Tetris is the best introductory course for understanding computer systems. It doesn't replace specialized courses (architecture, OS, compilers), but it gives you a full-stack perspective of how every layer is built.
Many consider it the best CS course they've ever taken. After completing it, you'll have a completely new understanding of computers.