Live data from Hacker News

From Nand to Tetris: Building a Modern Computer from First Principles

nand2tetris.org

11–20 of 49 posts

Re: From Nand to Tetris: Building a Modern Computer from First Principles

#11
post #9
post #8

The title of the course is misleading, as it suggests that NAND gates are the only required primitive, whereas the course later introduces DFF gates, without which you cannot escape the parallelism of chips.

It's an optimization. You really could build the whole thing from NAND gates if you really wanted to. http://www.learningaboutelectronics.com/Articles/D-flip-flop...

Thanks, that page is nice, but it too emphasizes that you also need a clock. That's essential and it was the point I was trying to make. For example, a thing that is usually glossed over in OS courses (in favor of, let's say, scheduling algorithms and such) is that you simply can't make preemptive multitasking out of pure code - and later when you ask yourself how is it that such a phenomenon is possible in the first place you learn that chips are inherently parallel, that sequential code is an abstraction over that so that one can have some sort of law and order, and only then interrupts enter the scene so that one may break that order when needed, e.g. for preemption.

Re: From Nand to Tetris: Building a Modern Computer from First Principles

#12
post #11
post #9

Earlier quoted context omitted.

It's an optimization. You really could build the whole thing from NAND gates if you really wanted to. http://www.learningaboutelectronics.com/Articles/D-flip-flop...

Thanks, that page is nice, but it too emphasizes that you also need a clock. That's essential and it was the point I was trying to make. For example, a thing that is usually glossed over in OS courses (in favor of, let's say, scheduling algorithms and such) is that you simply can't make preemptive multitasking out of pure code - and later when you ask yourself how is it that such a phenomenon is possible in the first…

You can make a clock easily enough: two NAND gates, two resistors, two capacitors. If you use parasitic components you will get a pretty wild resonance so better to nail it down by using something a bit more stable. But in principle it will work just fine.

Agreed on the 'preemtive multitasking' bit, but that has little to do with this subject. And it is kind of embedded in the name, you need something to do the pre-empting which by definition has to come from outside.

But building a functional computer with just NAND gates is absolutely possible, even if there are better ways, just like you could use Brainfuck or combinators to do meaningful computation. The whole idea of the course is not to give some kind of purist model for computation but to show that the essence of a computer can be boiled down to some very simple building blocks. So the title of the course is misleading only if you want to pick nits. Course titles are made to attract students and to give broad cover to what the course is all about, not to satisfy language purists.

Re: From Nand to Tetris: Building a Modern Computer from First Principles

#13

I really cannot recommend this course enough, I find myself referring back to it in so many different fields (security, debugging, programming language design) When I finished school, I was fairly knowledgeable about physics, including logic gates and electronics, and I was a fairly good programmer, but I had no idea how that virtual world arose from the physical. When I type on a keyboard, what is physically happeni…

Well said, this pilgramage is definitely a worthwhile one.

Re: From Nand to Tetris: Building a Modern Computer from First Principles

#16
post #4

I just completed part 1 building a computer from gates and writing an assembler and am in the middle of part 2 where you develop compilers and a stack based virtual machine. For someone like me who did not study computer science but has been a self taught programmer in the Analytics spacefor over a decade, this has been a tremendously useful and accessible introduction to basic CS concepts and very eye opening in ter…

https://www.edx.org/micromasters/ucsandiegox-algorithms-and-... Comprises the following courses Algorithmic Design and Techniques Data Structures Fundamentals Graph Algorithms NP-Complete Problems String Processing and Pattern Matching Algorithms Dynamic Programming: Applications In Machine Learning and Genomics Graph Algorithms in Genome Sequencing Algorithms and Data Structures Capstone

Very little of which is communicated in any way to help someone learn how compilers work.

In the actual history of computing very few good compilers were ever written by algorithm and data structures professors; most were written by people who had a pragmatic drive to get something done. Theory is good but without practice it is little more than navel gazing. Theory and practice need each other.

The reason that nand2tetris works so well as a course is that it gives you a concrete example of how all these algorithms and data structures are combined in order to turn an abstract description (the source code) into a running program that also includes how that computing is achieved through compiler, assembler, linker, run time, operating system, isa, and finally in transistors.

The true issue it gets to is that most programmers have very little understanding of how computers actually work, and when things break they just do high order guessing to get things working again rather than truly understanding what went wrong.

Re: From Nand to Tetris: Building a Modern Computer from First Principles

#17

Earlier quoted context omitted.

https://www.edx.org/micromasters/ucsandiegox-algorithms-and-... Comprises the following courses Algorithmic Design and Techniques Data Structures Fundamentals Graph Algorithms NP-Complete Problems String Processing and Pattern Matching Algorithms Dynamic Programming: Applications In Machine Learning and Genomics Graph Algorithms in Genome Sequencing Algorithms and Data Structures Capstone

Very little of which is communicated in any way to help someone learn how compilers work. In the actual history of computing very few good compilers were ever written by algorithm and data structures professors; most were written by people who had a pragmatic drive to get something done. Theory is good but without practice it is little more than navel gazing. Theory and practice need each other. The reason that nand2…

As an EE undergrad, I had to design a TTL based processor, program the microcode, etc. I have no idea how a compiler works, or anything above assembly.

Re: From Nand to Tetris: Building a Modern Computer from First Principles

#18
post #8

The title of the course is misleading, as it suggests that NAND gates are the only required primitive, whereas the course later introduces DFF gates, without which you cannot escape the parallelism of chips.

And one thing that is said even less is why NAND? You can do it all with NOR gates as well if you want. The reason for NAND has to do with the switching speed, pMOS switches quicker in parallel (either transistor can get the current flowing) and nMOS switches quicker in series (either transistor can stop the current flowing); this is how a NAND gate is wired. NOR gates on the other hand have the worst of both.

The fact that nMOS switches off quicker is why the most common form of dynamic logic (as opposed to static logic) implements, in effect, the bottom half of the CMOS in nMOS and the upper half using a capacitor; which holds the charge and hence pull up for the length of the clock cycle (which is why dynamic logic CPUs can't be single stepped in hardware, the clock speed is too low to hold a charge).

Re: From Nand to Tetris: Building a Modern Computer from First Principles

#19
post #8

The title of the course is misleading, as it suggests that NAND gates are the only required primitive, whereas the course later introduces DFF gates, without which you cannot escape the parallelism of chips.

You can make a DFF from NAND gates, though it's pretty obvious the simulator they wrote for the class can't perform that emulation. I was a little put off from the class when they tried to explain why they didn't want to cover them "because they were too complicated". It's pretty obvious to anyone who understands them that they're not significantly more complicated than the rest of the material. I gave up on the class right there, thinking the instructors and the rest of the class would be a lot of the same BS. I'm glad I got over it and completed the rest of the class as it was pretty fun.
Post reply on HN