|
The area of computer systems spans a community of faculty in
both Computer Science (CS) and Electrical and Computer Engineering
(ECE) departments. While most of us in the systems community are
convinced that students need an early introduction to the core ideas
in computer systems, there is still some debate about where this
introductory core systems course should fit in the CS and ECE
curriculums. Here is how we have resolved this issue at Carnegie
Mellon. Perhaps it will be a useful model for other schools.
At Carnegie Mellon, CS and ECE are in separate schools, with CS in the
School of Computer Science and ECE in the Engineering School. The CS
department offers the following core sophomore-level introductory
systems course, based on the CS:APP text, for students in both
departments:
15-213
Introduction to Computer Systems
Fall and Spring: 12 units (similar to 3 credit hours at other schools)
This course provides a programmer's view of how computer systems
execute programs, store information, and communicate. It enables
students to become more effective programmers, especially in dealing
with issues of performance, portability, and robustness. It also
serves as a foundation for courses on compilers, networks, operating
systems, and computer architecture, where a deeper understanding
of systems-level issues is required. Topics covered include
machine-level code and its generation by optimizing compilers,
performance evaluation and optimization, computer arithmetic,
memory organization and management, networking technology and
protocols, and supporting concurrent computation. Prerequisites:
15-113 (Introduction to C mini-course) and 15-211 (Data Structures
and Algorithms in Java).
15-213 is the course we refer to as ICS+ in the CS:APP Preface. About 300
undergraduates (mostly sophomores and juniors) take 15-213 each year:
roughly 140 CS, 100 ECE, and 60 other. The 15-213 course serves
several different purposes in our curriculum:
- For humanities, liberal arts, and non-CE
(Computer Engineering) students in the engineering
school, it is often the terminal course in their systems education.
- For CS and CE students, it serves as the foundational prereq for
upper level systems courses offered in both the CS and ECE
departments, including networks (CS), compilers (CS), databases (CS),
operating systems (CS), embedded systems (ECE), distributed systems
(CS), computer architecture (ECE), and parallel computer architecture
(CS). Establishing 15-213 as a prereq for the upper level systems
courses helps those instructors offer better courses because they can
make assumptions about the general systems maturity of their
students. For example, instructors in the ECE computer architecture
course can now assume that students know how assembly language,
caches, and virtual memory work, and thus they can focus right away on
the more interesting and appropriate design issues such as ISA design,
cache design, and TLB design.
- It provides our students with experience in programming C. This
is important because the upper level CS and CE systems courses require
knowledge of C, but the CS intro courses are all based on Java.
|