Introducing Computer Systems From a Programmer's Perspective Randal E. Bryant and David R. O'Hallaron Carnegie Mellon University Abstract: In the Fall of 1998, we introduced a new undergraduate course at CMU titled "Introduction to Computer Systems" (ICS). Since then, ICS has been offered every semester to as many as 400 students, mostly sophomores in computer science and computer engineering. ICS is the highest rated sophomore-level CS course ever offered at CMU, with a mean student evaluation last term of 4.77/5.0 and a median of 5.0/5.0. It has also become a prerequisite for most upper-level systems course in CS and ECE. The idea with ICS is to introduce students to computer systems in a different way from the "builder-centric" perspective of a traditional computer organization course. Few of our students will have the opportunity to design computer hardware, but nearly all of them will use and program computers on a daily basis. So we teach them about systems from the perspective of a programmer, using the following filter: We cover a topic only if it affects the performance, correctness, or utility of user-level C programs. This approach allows us to teach ICS in a way that is practical, hands-on, and exciting for the students. The main teaching idea is to develop a set of laboratory assignments that reinforce the concepts and that the students find exciting and relevant. In this talk we will describe some of our lab ideas, including the "binary bomb lab" that turns learning assembly language into a fun game and that has achieved legendary status amongst the CMU undergrads. We've also gained some insights into how to challenge the best students, while still keeping the rest of the class engaged in the material, by setting up web-based competitions that don't directly influence student grades. The success of ICS prompted us to write a textbook, "Computer Systems: A Programmer's Perspective," now in its second edition from Prentice-Hall. More information is available at http://csapp.cs.cmu.edu.