Nand2Tetris

A scrappy project-based course in computer systems in which students build their own computer from raw gates all the way to the point of playing tetris. By Noam Nisan and Shimon Schocken, MIT profs. Home | nand2tetris

Some relationship to Executable books: a significant part of the course resides in the circuits, operating system, and other software primitives built up by the student. There’s also a simulation/execution environment supplied by the instructors. One important element is that test input and outputs are supplied for each project, so the student can get automatic feedback on their work.

Unlike most executable books, the point of this book isn’t for you to read and understand an expert’s code: it’s for you to write it yourself. (Executable books emphasize understanding pre-existing code, not writing new code)

Unfortunately, the instructional materials are strongly divorced from the executable components; the former are delivered as PDFs, the latter as zipped files.


Flipping through this book on 2023-07-18 in the context of thinking about Reading comprehension questions are unpleasant. Do Nand2Tetris’s point to a better way?

I notice that the first chapter, which is about 20 pages, feels quite long without any kind of comprehension or memory reinforcement. There’s a lot of material! Notation is introduced; concepts like “canonical representation” are introduced; a brief proof is sketched for the universality of Nand; etc etc.

The project is to implement the logic gates presented in the chapter from Nand. That would definitely reinforce the notion of the universality of Nand, but it wouldn’t be enough to ensure that I could sketch a proof of why. The implementation is done in HDL, so the task would reinforce all the syntax introduced there. But I think a lot of the conceptual material would slip away from me. I think I want finer-grained support than this offers.

The second chapter seems more amenable to the format. It’s on boolean arithmetic; the project is to build an ALU. There’s less conceptual material which wouldn’t be subsumed in that project.


Q. In HDL, if you have a bit string x[8] = 01010101, how would you refer to the first bit? The last?
A. x[7], x[0]

Reflections

Having completed the first ~half of the book in late 2023, some reflections:

  • I would have forgotten all the details immediately if not for SRS (~150 prompts), as evidenced by the lapse count on these prompts
  • It’s very gratifying to build the gates, memory chips, the ALU, the computer… but it’s easy to do so without really understanding or interrogating what’s going on—particularly for the ALU and computer.
  • This project-based learning is certainly a lot more engaging and anchored in my authentic interest than traditional problem sets. And what knowledge I did acquire this way is probably a little more likely to transfer to contexts of use.
  • I had no legitimate context for learning this stuff. Doing it socially with Laura Deming, Elliott Jin, etc helped… but not enough. It would need to be much more actively social to feel authentically anchored.
Last updated 2024-04-15.