It doesn’t teach things such as product of sums and kmaps which allows you to methodically find the Boolean equation for any arbitrary output. I spent most of my time during the architecture implementation finding the correct expressions, while it becomes trivial if you learn how to do it systematically.
It’s lacking in teaching how state works, mostly because it passes over flipflops and their applications. It also doesn’t teach finite state machines (FSM), which was the single most important thing for me in understanding how to actually implement an architecture. This is because the concept of FSMs abstracts most of the logic and focuses on the behavior, and once you design the behavior you can then methodically implement the logic with the previously mentioned techniques.
This is useful beyond low-level work. Every now and then I review code where the author has a complicated boolean condition (often in combination with auth and caching) and there's a much simpler way to write it -- that also has a more intuitive interpretation!
The same thing goes for finite state machines, of course, but the refactorings suggested are often trickier to apply in a late-stage code review.
IT has always been a sector where you can have a degreeless career. Moreover, plenty of IT degrees are not computer science (data science degrees, to take a popular example)
After this you immediately go and learn 8085, and then 8086
And it's not until the end of the last chapter that you build a stack machine in about 40 pages from memory.
It teaches the basics and then how to build a MIPS processor.
I know that's only part of what nand 2 tetris aims for. But still good.
How Transistors Run Code?
A big part of the joy came from making up my own extra credit side quests: implementing a compile-to-WASM emulator for the hack machine, adding optimisations to the compiler to produce smaller and/or faster programs, etc.
It's orders of magnitude faster than my naive hand-written emulator.
I completed it up until the assembler challenges, and I felt the same way as the author. Granted I knew Kmaps, etc. from my uni days, but given the nand2tetris book you might be able to figure it out.
I got all the way to the final missions where you're writing your own assembly (that you created) to solve various programming puzzles. Only stopped because I got busy with something else and break was over. I def recommend it. Reminded me at the time of Code by Charles Petzold but applied.
(Last I checked the Author was rewriting much of it for performance reasons and to fix up a few gotchas that should be possible with circuits but aren't here - no idea if they still are but that was my understanding before)
Development still appears to be ongoing on Discord, which is quite active. I think the dev may have bitten off more than they could chew with their last patch promise: https://www.youtube.com/watch?v=38cKko7sViw
Also have a look at MHRD, which is to my knowledge even more inspired by nand2tetris.
You too can build a(n emulated) computer from scratch, and I can't recommend it highly enough.
Many years ago I built a linux system following the Linux From Scratch (LFS) guide. My experience doing it corresponds with a lot of what the author mentions.
In all this there is a slightly uncomfortable realization, at some point you need to trust the layers below, knowing everything is simply not possible.
I completed part 1 of Nand2Tetris in 2023 and this year I'm working my way through part 2 where you write a compiler and OS for the architecture that you built in part 1. It feels great to finally start understanding concepts like memory management, virtual machines and compilers.
I stumbled upon and Nand2Tetris, and I'll be upfront and say that I found it to be a little dry and I was being honest to myself, it beyond what I was ready for.
However, it was still instrumental to helping me develop my understanding of computers. Instead of following the course normally, I decided to transfer the concepts and lessons learned and created a rudimentary computer in Minecraft. It transferred the project from a n abstract thing I struggled with to a "physical" engineering project that made the CS ideas real and tangible things that could be interacted and experimented with.
I highly recommend it to anyone.
I should like to go back and finish it, both the course and the Minecraft project(I only did part 1).
The compiler exercise is beyond excellent and cracking it feels like a milestone.
The first 6 projects do not require purchasing the textbook as the relevant chapters are provided along with the project material. The next projects do not have the textbook chapters provided, so I bought the textbook.
I'm currently working on Project 8. I've been blogging about my progress here, if you want to take a look: https://gurudas.dev/tag/nand2tetris/