This book began when I was assigned to help salvage an undergraduate computer
organization course. The course had suffered years of neglect: it had been taught by a
series of professors, mostly visitors, who had little or no interest or background in digital
hardware, and the curriculum had deteriorated to a potpourri of topics that were only
loosely related to hardware architectures. In some semesters, students spent the entire
class studying Boolean Algebra, without even the slightest connection to actual
hardware. In others, students learned the arcane details of one particular assembly
language, without a notion of alternatives.
Is a computer organization course worth saving? Absolutely! In many Computer
Science programs, the computer organization course is the only time students are exposed
to fundamental concepts that explain the structure of the computer they are programming.
Understanding the hardware makes it possible to construct programs that
are more efficient and less prone to errors. In a broad sense, a basic knowledge of architecture
helps programmers improve program efficiency by understanding the consequences
of programming choices. Knowing how the hardware works can also improve
the programming process by allowing programmers to pinpoint the source of bugs
quickly. Finally, graduates need to understand basic architectural concepts to pass job
application tests given by firms like Intel and Microsoft.
One of the steps in salvaging our architecture course consisted in looking at textbooks.
We discovered the texts could be divided into roughly two types: texts aimed at
beginning engineering students who would go on to design hardware, and texts written
for CS students that attempt to include topics from compilers, operating systems, and
(in at least one case) a complete explanation of how Internet protocols operate. Neither
approach seemed appropriate for a single, introductory course on the subject. We wanted
a book that (1) focused on the concepts rather than engineering details (because our
students are not focused on hardware design); (2) explained the subject from a
programmer’s point of view, and emphasized consequences for programmers; and (3)
did not try to cover several courses’ worth of material. When no text was found, it
seemed that the only solution was to create one.