Our speaker for the May meeting is William Bahn, presently a Visiting Professor in the Electrical Engineering and Computer Science Department at the Colorado School of Mines. He is teaching the Elements of Computing Systems, a course centered around the Nand2Tetris project fashioned by Noam Nisan and Shimon Schocken.
Nand2Tetris is an educational project that has been adapted and taught at levels ranging from high school to graduate school. Over the course of twelve projects, students implement all aspects of a modern computer starting starting from first principles. The presentation and discussion will be a tour of the twelve projects that make up the Nand2Tetris world.
Students taking the Elements course begin with 2-input NAND gates and end by writing an operating system. Along the way, students implement the Hack computing hardware platform (in emulation) including the ALU, the program counter, the control logic, and the memory. They then progress to the software side of things by writing an assembler for the Hack's instruction set, a virtual machine to translate a stack-oriented intermediate language to assembly language, a compiler for Jack, a simple object-oriented programming language, and finally a collection of useful operating system library routines.
To be sure, such a far-ranging journey taken over the span of a single course limits the depth to which any of these topics can be explored. Nonetheless, at journey's end, students have received a surprisingly rich introductory exposure to digital logic, computer architecture, assembly language, finite automata, formal languages, the internal workings of high level languages including dynamic memory management, and operating system services. More to the point, these are not experienced as abstract and disjoint topics, but rather as parts of an integrated whole in which students are completely aware of how each topic interacts with the others.