When I first got my 'The Elements Of Computing Systems' book, I remember thinking "Wow, it's so thin! Surely I am missing the second half!". But throughout these past 10 months, it became apparent as to just how well-crafted, distilled, and organized all the information within was: a minimalistic journey from point A to point B, only giving the necessary machinery to see why a thing is the way it is. And I say that as a good thing, because to me, having such an elegantly organized set of ideas to guide someone to the truth or function of something is an ideal I always try to strive for (and it's a tough ideal for sure!). It is an ideal that satisfies my ocd... the need for simplicity, clarity, structure, organization, and elegance.
My nandd2tetris journey started not with this, but with two other books (what I tend to call as "armchair" books) a few years before: 'Code: The Hidden Language Of Computer Hardware And Software' and 'But How Do It Know?'. I kept wanting more books with a similar feel and a similar quest as these two, and that's how I was led to 'TECS'.
It's hard to sum up everything that I have felt and experienced while going through nand2tetris. There was always that internal question as to when and where I'll hit that inevitable conceptual wall. And I did hit that wall many times, actually. Each time it felt like this was it, this was the end of the path. But, to my surprise, I always managed to break through that wall.
Once all the friction in trying to conceptually understand a new idea settled, that is, once I've gotten used to the novelty, there were many fun times where I was just thinking for days on how to solve a particular task. That, I think, was my favorite part: when you finally see that "ahh-ha!" moment after days of pondering is such a joy! (I think I spent 11 days figuring out how to only translate active function calls in the VM code haha. And I'm pretty sure I spent a whole week just staring at Jack grammar seeing how to start the Parser.)
And let's not forget to mention the beauty in some of these concepts, too. I thought it was pretty cool seeing an example of stack arithmetic for the first time. Seeing how something like (x + y) - (z + x), an expression in which a person has complete control over in what to evaluate first, can be turn into a linear sequence of mechanical instructions (push push add push push add sub) was awesome. And then there is the magic of the recursive descent parser... just knock over that top domino (the class statement) and poof! Complete compilation! And while I was thinking over the Tokenizer, I had the hilarious epiphany that I should be able to write a workable Jack 'Hello World' code, but this time only writing a *single token* per line. Because whitespace doesnt matter, right? So get rid of ALL the whitespace! And it worked, as it should! There is much beauty.
I want to thank everyone who has helped me through this journey. The Q/A forums were an indispensable tool, where I often found myself browsing for hours trying to tackle many, many subtleties. No single person could've done all this. All the Q/A forum members, admins/moderators, and the authors themselves, thank you.