Building a Computer From First Principles
We present a constructive approach to teaching the `computer' part of computer science (CS), and new course and a book based on the approach. For CS majors, the course serves to integrate most of the core topics covered in architecture, operating systems, compilers, and software engineering courses. For non-CS majors who have some programming experience, the course provides a comprehensive yet rigorous view of the field.
In most CS programs, students learn about different hardware and software concepts in different courses, taken at different stages in the program. As a result, they don’t gain a gestalt understanding of how computer systems work as integrated enterprises. We address this challenge by engaging the students in the construction of a complete computer system, from the ground up. The students are given one constant and one logical operator. As the course progresses, they gradually build a simple hardware platform and a modern software hierarchy, consisting of an assembler, a virtual machine, a basic operating system, and a compiler for a simple Java-like, object-based language. The hardware projects are done in a simple version of HDL and a supplied hardware simulator. The software projects can be done in any language. The result is a GameBoy-like computer that can be simulated on the student's PC. We start the course (and this talk) by demonstrating some video games running on this computer.
Our objective in this course is to present key hardware and software abstractions and make them concrete through guided implementations. We are able to squeeze all this into one semester since we deal with neither efficiency nor advanced features, leaving these subjects to other courses in the program. The resulting approach is completely self-contained, requiring only programming as a pre-requisite. Hence, courses that use it can be given at almost any stage in undergraduate and graduate programs. For more details see www.idc.ac.il/csd. Joint work with Noam Nisan.