© 2017 Shimon Schocken and Noam Nisan

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 hardware projects can be built on any personal computer using a simple Hardware Description Language (HDL), described in the book, 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 mini-OS is also built, using the high-level language designed in the course.

Why Bother? Because many CS students don't understand how computers work; because fewer CS programs requires a compilation course; 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".

Academic framework / pre-requisites Nand to Tetris courses are typically offered as a 1-semester course, consisting of ~13 weekly 3-hour meetings. The course and the book are completely self-contained, requiring only programming (in any language) as a pre-requisite. 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 the course suitable for non-CS majors? Yes, as long as the students can program in some modern programming language. In fact, if you wish to learn or teach a mini CS program, we propose the following three-course sequence: Intro to CS (in either Java or Python), Algorithms, and Nand to Tetris. This sequence gives a hands-on overview of most of the important ideas and techniques in applied computer science.

Does Nand to Tetris interface with Adruino or Raspberry Pie? (this question sometimes comes up) It's important to understand that computer science deals with abstractions, not with specific hardware platforms. Building things with maker boards is a fantastic educational experience, but it does not teach the fundamentals of hardware and software design. If you want to learn these first principles, you must step away from the atoms and delve into the bits. That is, rather than building a hardware platform using physical parts, you have to build it using abstractions and software-based hardware simulators. That's what we do in Nand to Tetris, and that's how real computers are actually built by real hardware and software engineers.

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.