About the Course and the Book

This site supports a course and a textbook that guide students and self-learners through the construction of a modern, full-scale computer system - hardware and software - from the ground up. In the process, the students practice many major computer science (CS) abstractions studied in typical CS courses and make them concrete through 12 guided implementation projects. The lectures, book chapters and projects are highly modular and one can pursue subsets of them in any desired order and scope. All the software tools and course materials can be downloaded freely and in open source from this site.

The course prerequisites depend on your objectives. If you wish to build the computer's hardware platform (also known as "Nand to Tetris Part I"), you can do it without any prior knowledge. If you wish to build the computer's software stack (also known as "Nand to Tetris Part II"), you need programming knowledge at the level of a typical Introduction to CS course. 

The hardware projects can be built on any personal computer using a simple Hardware Description Language (HDL), described in the course materials, and a supplied Hardware Simulator.

The software projects (assembler, virtual machine, and compiler for a simple object-based language) can be developed in any programming language, using the project materials available in this site. A basic OS is also built, using the high-level language designed in the course.

Why Bother? Because many students and developers don't understand how computers work; because most CS programs no longer require compilation courses; because many computer architecture courses are too detailed; because nothing beats the thrill of creating something from almost nothing; because Nand to Tetris engages students in implementing some of the coolest algorithms, data structures and techniques in applied computer science, and because the typical student feedback in Nand to Tetris courses is "the best course I ever took".

Nand to Tetris courses are typically offered as 1-semester or two 1-quarter courses, consisting of 6~13 weekly 3-hour meetings. All the knowledge necessary for building the computer is embedded in the supplied lectures, projects, and book chapters. The result is a synthesis course that can be taken at any stage in an undergraduate or graduate CS program following programming. For example, here is a sample Nand2Tetris Course Syllabus.

Is Nand to Tetris suitable for non-CS majors? Many learners and developers who took Introduction to CS or programming courses wish to learn more CS, without committing to a full program. Nand to Tetris gives such learners a hands-on coverage of most of the important ideas and techniques in applied computer science, focusing on computer architecture, compilation, and software engineering, in one course. Nand to Tetris also provides a hands-on overview of key data structures and algorithms, as they unfold in the context of 12 captivating hardware and software development projects.

The computer built in Nand to Tetris is real, and it works. Typically, learners implement their evolving computer on the supplied hardware simulator, which is a software tool running on the learner's PC (that's how hardware engineers actually build computers). Learners who wish to do so can also commit their computer design to silicon, using FPGA technology (this step is optional).

If you wish to teach or organize a Nand to Tetris course: Email us at schocken@gmail.com, and we will send you the Nand to Tetris Instructor Resources Pack. In your email, please include the URL of your home page at your teaching institution / organization.

© 2017 Shimon Schocken and Noam Nisan