Part 1 - https://www.coursera.org/learn/build-a-computer (hardware projects/chapters 1-6)
Part 2 - https://www.coursera.org/learn/nand2tetris2 (software projects/chapters 7-12)
41–50 of 101 posts
Part 1 - https://www.coursera.org/learn/build-a-computer (hardware projects/chapters 1-6)
Part 2 - https://www.coursera.org/learn/nand2tetris2 (software projects/chapters 7-12)
Buy this book if you're a programmer who wants to know how computers work. I read the first edition in high school, and if I had to choose either this book or my entire undergrad CS education, I'd pick this book.
[0] or perhaps it would be better to say "has no choice but to omit" or it would be ten times thicker than it is.
How similar is this book to CODE by Charles Petzold? I loved that book because it progressively builds up an imaginary computer using very easy to understand concepts. Even non-technical people can read it to understand how computers work internally.
Personal opinion: I have found "Computer Systems: A Programmer's Perspective" to be a better introduction to the same set of topics.
Earlier quoted context omitted.
I didn't use this one, but my Computer Organization class which did gates -> circuits -> cpu -> microcode -> assembly was the lightbulb that allowed me to attempt to deconstruct everything to at least the gate level if I had to and made me much more comfortable with computer science and software in general. The only thing that rivaled that lightbulb was aspects of Theory of Computation with undecidability, turing mac…
>"The only thing that rivaled that lightbulb was aspects of Theory of Computation with undecidability, turing machine vs stack machine vs state machine powers that theoretically limit Von Neumann architecture." Might you or someone else have a title that you would recommend for this that is the equivalent of a "Elements of Computing Systems" style book?
Its motives is the same as NandToTetris: to make any programming-literate person comfortable with the rough outlines of the theory of computation and its main lore and results. The author uses Ruby as an interactive "Illustration language", a notation to describe concepts that happens to be executable. It's the same way I noticed the authors of "Structure and Ineterpetation of Computer Programs" use scheme or the way Niklaus Wirth sometimes uses Pascal in his educational writings. There is a small tutorial chapter in the beginning that crash-courses you through all what you need to understand in Ruby to read the book.
The structure is a bit different, the book isn't project-based like ECS, and there is no natural hierarchy to the theory of computation (except maybe the famous state_machines ==( push_down_automatons ==( turing_machines, and the book does introduce those topics in the natural order) that would make the book feel more bottom up. There is no exercises or nudges towards exploration and tinkering so you need to come equipped with your own. I stopped trying to digest it in one reading and designated it as one of those books you come back over and over again to fully absorb its nourishment.
But the main motivation of the book is strikingly similar to that of ECS: to take a complex and jargon-heavy several-years study topic and distill the most essential lines and edges so that a minimally-educated person motivated enough to understand could mostly understand. Some parts felt rushed and weren't meant to be digested in full details (when he was e.g. discussing a "zoo" of other computational systems that feels superficially different or less powerful than turing machines but are equivalent nonetheless, he was fairly hand-waivy), but the book is so great you will feel guilt dwelling on its shortcomings.
The first edition is a great book, I completely recommend the first ~4 chapters, after that the ROI is not as good. Personal opinion: I have found "Computer Systems: A Programmer's Perspective" to be a better introduction to the same set of topics.
The neat thing about Elements is that, despite being shallow in parts, it provides the full map of the subject with projects building on each other. Someone who's gone through it can more easily approach deeper treatments to fill in the details as they know where it's going, which also aids in motivation (removes the "what's the point" question when faced with seemingly esoteric topics).
Earlier quoted context omitted.
>"The only thing that rivaled that lightbulb was aspects of Theory of Computation with undecidability, turing machine vs stack machine vs state machine powers that theoretically limit Von Neumann architecture." Might you or someone else have a title that you would recommend for this that is the equivalent of a "Elements of Computing Systems" style book?
The book "Understanding Computation: From Simple Machines to Impossible Programs" by Tom Stuart was/is my Theory Of Computation Nirvana experience. Its motives is the same as NandToTetris: to make any programming-literate person comfortable with the rough outlines of the theory of computation and its main lore and results. The author uses Ruby as an interactive "Illustration language", a notation to describe concepts…
Course is available for free on Coursera: Part 1 - https://www.coursera.org/learn/build-a-computer (hardware projects/chapters 1-6) Part 2 - https://www.coursera.org/learn/nand2tetris2 (software projects/chapters 7-12)
Gah! So mad I just bought the first edition!