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 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 and fewer students take compilation courses; because many computer architecture courses are too detailed and too dry; because nothing beats the thrill of creating something from almost nothing; because Nand2Tetris engages students in implementing some of the coolest algorithms, data structures and techniques in applied computer science, and because the typical student feedback in Nand2Tetris courses is "the best course I ever took".
Academic framework / pre-requisites Nand2Tetris is 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 you can program in some modern programming language. In fact, if you are interested in a limited but rigorous mini CS program, we propose the following three-course sequence: Intro to CS (in either Java or Python), Algorithms, and Nand2Tetris. You will get a solid and hands-on overview of most of the important ideas and techniques in computer science.
Does Nand2Tetris interface with Adruino or Raspberry Pie? It's important to understand that computer science deals with abstractions, not with nuts and bolts. 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 paper-based abstractions and software-based hardware simulators. That's what we do in Nand2Tetris, and that's how real computers are actually built by real hardware and software engineers.
If you wish to teach or organize a Nand2Tetris course: Email us at firstname.lastname@example.org, and we will send you the Nand2Tetris Instructor Resources Pack. In your email, please include the URL of your home page at your teaching institution / organization.