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 terms of what's actually happening under the hood. This course is highly recommended if you've not studied CS though be aware the second part of the course where you develop compilers is quite intense though being an online course, you can pick your pace.
I wonder if there are similar courses on CS algorithms for people who didn't study CS in college.
Comprises the following courses
Algorithmic Design and Techniques
Data Structures Fundamentals
String Processing and Pattern Matching Algorithms
Dynamic Programming: Applications In Machine Learning and Genomics
Graph Algorithms in Genome Sequencing
Algorithms and Data Structures Capstone
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.
This might be a bit more challenging and less hand holding than the nand2tetris course but if you are up for it, why not go with the best? Sedgewick Algorithm book has been one of the standard algorithm books in universities for a long time.
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 happening in the universe?
This course helped me understand that question.
... cleverly illustrated and eminently comprehensible story ... No matter what your level of technical savvy, CODE will charm you—and perhaps even awaken the technophile within.
Code doesn’t sound “slightly lower level”.
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.
You can use NAND to make NOT.
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).
The Apollo computer, which used bipolar instead of CMOS, indeed did use all NOR gates:
This doesn't really hold in today's world of silicon prints, but at the start I think it was price that drove the decision.