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]
Having completed the first ~half of the book in late 2023, some reflections: