A modern approach to teaching computer organization and assembly language programming

Given technological trends toward high level programming tools, abstract data mechanisms, logical systems organization, knowledge engineering, and human interfaces, greater emphasis must today be placed on understanding how a machine and its architecture support more abstract concepts and models. The historical approach to teaching computer organization and related machine language issues has been to train students to be proficient with some particular hardware. Indeed, many such courses attempt to prepare students for careers involving particular types of computers. Our philosophy is quite different for two basic reasons. First, fewer individuals are required to be proficient machine or assembly language programmers; instead, ability to think abstractly and to employ more powerful (more conceptual) tools is demanded. Second, the rapidity with which new machine types are introduced suggests that learning any specific machine will necessarily miss the mark; instead, students must become familiar with the generic machine, that is, the conceptual machine common to almost all computer hardware designs. (Even the so-called non-Von Neuman machines are usually comprised of systems of sequential machines.) We advocate that these undergraduate courses be oriented to teaching from the framework of abstraction and concept and that the machine vehicle for the course be chosen to support this framework.