Building a Modern Computer in 12 Steps - A Perfect Elective Course for Sem 3 of CSE
Just watched this Google Tech Talk on From Nand to Tetris in 12 steps by Shimon Schocken introducing a course he developed along with Noam Nisan:
A must watch for all CS faculty of hardware, algorithms and systems.
The course covers 12 projects to be done over a single semester covering building everything from basic logic gates to computer architecture, and from machine language to an operating system starting from a False and a NAND using a custom HDL. This led me to think over how wonderful it would have been if we had this course in our curriculum in the last sem. Here are my observations over some of the projects:
Elementary Logic Gates, Combinatorial Chips and Sequential Chips - perfect alternative for our Hardware Lab course, which never led to any real learning (only frustration in trying to get all that mess of little wires and chips on a bread board to work correctly). We even get to built an ALU in the 2nd project and memory in 3rd project.
Machine Language and Computer Architecture - ideal introduction to our Computer Organization course of this semester. Learning to create a simple assembly language (before diving into MIPS assembly) and a simple enough architecture using our own ALU created in 2nd project (before trying to by heart more complex MIPS architecture) would have added motivation for the 4th semester CO course.
Assembler, Virtual Machine, Programming Language, Compiler, Operating System - taught in still higher semesters here (5th and 6th) but it would have been so good to get an initial idea about all these before actually getting into the depth of these core areas of Computer Science making them more interesting to learn in the process.
I always used to wonder how logic gates could be the basic elements of a computer, or how flip flops could form memory, or those 1’s and 0’s connect the hardware and software together. The whole course provides a deep insight on the functioning of a computer, letting one connect all those dots together and learn how they work together to form a wonderful machine. The course emphasizes on how abstraction (which many may call the core idea of engineering especially in circuit branches) can do wonders.
I have already placed an order for my copy of The Elements of Computing book 3-days back, expecting to receive it on this Thursday and have plans to spend some time of the summer vacations doing projects from this course.
Few links:
Blog post by Pramode CE from where I got to know about the course.
EDIT (2011-03-08): Told about this course to Paleri Sir, got another perspective about this: it may lead students to underestimate the complexity of these sophisticated machines called computers. My take is that it will depend on the instructor and how she carries the course to make pupils understand and appreciate the sophistications involved in designing a real system.
EDIT (2013-04-12): Updated link to course website.