Up: CS 213: Introduction to
Our aim in CS 213 is to help you become a better programmer by
teaching you the basic concepts underlying all computer systems. We
want you to learn what really happens when your programs run, so that
when things go wrong (as they always do) you will have the
intellectual tools to solve the problem.
Why do you need to understand computer systems if you do all of your
programming in high level languages? In most of computer science,
we're pushed to make abstractions and stay within their frameworks.
But, any abstraction ignores effects that can become critical. As an
analogy, Newtonian mechanics ignores relativistic effects. The
Newtonian abstraction is completely appropriate for bodies moving at
less than 0.1c, but higher speeds require working at a greater level
Our 21X sequence works as follows: 211 is based on a simplified model of
program execution. 212 builds further layers of abstraction. 213
introduces greater detail about system behavior and operation. This
greater detail is needed for optimizing program performance, for working
within the finite memory and word size constraints of computers, and for
The following "realities" are some of the major areas where the
abstractions we teach in 211/212 break down:
By the end of the course you will understand these ``realities'' in
some detail. As a result, you will be prepared to take any of the
upper level systems classes at Carnegie Mellon. Even more important,
you will have learned skills and knowledge that will help you
throughout your career.
- Int's are not integers, Float's are not reals.
Our finite representations of numbers have significant limitations,
and because of these limitations we sometimes have to think in terms of bit-level
- You've got to know assembly language. Even if you never
write programs in assembly, The behavior of a program cannot be
understood sometimes purely based on the abstraction of a high-level
language. Further, understanding the effects of bugs requires
familiarity with the machine-level model.
- Memory matters. Computer memory is not unbounded. It
must be allocated and managed. Memory referencing errors are
especially pernicious. An erroneous updating of one object can cause
a change in some logically unrelated object. Also, the combination of
caching and virtual memory provides the functionality of a uniform
unbounded address space, but not the performance.
- There is more to performance than asymptotic complexity.
Constant factors also matter. There are systematic ways to evaluate
and improve program performance
- Computers do more than execute instructions.
They also need to get data in and out and they
interact with other systems over networks.
Up: CS 213: Introduction to
Guy Blelloch, firstname.lastname@example.org