CS 105

Computer Systems
Spring 2013


Geoff Kuenning, HMC Olin 1245, x71610, geoff@cs.hmc.edu
Rett Bull, Pomona Edmunds 225, x18709 Everett.Bull@pomona.edu
Jasper Duan
David Ersek
Gary Lent
John Sarracino
Mary Rachel Stimson
Tim Taylor
Lawrence Thibodeaux
Becca Thomas
Tutoring hours (all HMC tutoring is in Beckman B102; all Pomona tutoring is in Edmunds 227):
Sunday: David @ HMC, 6-8
Monday: David @ HMC, 7-8, Gary @ Pomona 8-10
Tuesday: Tim @ Pomona, 8-10
Wednesday: David @ HMC 7-8, Becca @ HMC 7-9, John @ HMC 9-11
Thursday: Lawrence @ HMC 7-9, Jasper @ HMC 9-11
Friday: N/A
Saturday: N/A
Administrative Aide:
Joyce Greene, HMC Olin 1258, x18225

Getting Help

If you need help with assignments, send mail to cs105help at cs.hmc.edu. This alias is preferable to mailing the professor directly, since it also goes to the TAs (and it causes the mail to be sorted into a higher-priority box).

There is also an AIM alias of the same name, for getting very quick interactive help. Feel free to use it whenever it's live.

Class Meetings

Lecture Times:
Section 1: Monday/Wednesday 11:00-12:15 (HMC Galileo McAlister)
Section 2: Monday/Wednesday 2:45-4:00 (Pomona Edmunds 101)
Lab times:
Section 1: Friday, 12:00-1:00 (Beckman B102/B105)
Section 2: Friday, 1:15-2:20 (Beckman B102/B105)

It is not necessary to have matching lecture and lab section numbers.

Course Description

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, processes and concurrent computation, and networking technology and protocols.


The text for the course is Computer Systems, A Programmer's Perspective, 2nd Edition, by Randal E. Bryant and David O'Hallaron, Prentice Hall, 2011, ISBN 978-0136108047 (paperback) or 978-0133001488 (digital rental).

There are obviously other sources of books, so do what is best for you.

Other Related Texts

The C Programming Language, Second Edition, by Brian W. Kernighan and Dennis M. Ritchie, Prentice Hall, 1988, ISBN 0-13-110370-9. You can buy it from amazon.com.

The Joy of C, 3rd Edition, by Lawrence H. Miller and Alexander E. Quilici, Wiley, 1997, ISBN: 0-471-1233-X. You can buy it from Amazon.com.

What is This Course About?

There are many ways to approach the subject of computer systems. This course will investigate computer systems from the viewpoint of the (application) programmer.

The lectures WILL ASSUME that you have read related material from the text and that you thus come to class with questions and some knowledge. We will end many sections from the book with a quiz. These quizzes are worth points and have no makeup (except for legitimate reasons). Thus, consistently coming to class unprepared will be reflected negatively in your grade no matter how you do on the other coursework.

Requirements and Grades

We have made great efforts to encourage you to submit material on time. Make sure to read the late policy. The relative weighting scheme will be as follows:

Participation: 5%
Quizzes: 5%
Labs: 20%
Tests: 70%

Don't be misled by the fact that labs represent a lower fraction of your grade. The labs are REQUIRED to get a passing grade in the course. If you blow off the labs, you'll shoot yourself in the foot two ways: first because the lab grades do matter, and second because if you don't do the labs, you won't know what you need to know to pass the exams.

Obviously, the exams are the major component of your grade. Normally, most students get a top or near-top grade on the labs, so the exams are what distinguish you. If you do well on the exams, you'll do well in the course—and vice versa.


The laboratory exercises in this course are fun and challenging. Lab time will be used to get you started on the various experiments. We DO NOT intend you to complete the labs during the lab time, but will establish some ground rules on the time you should spend on each lab. The Web pages for the labs will be updated as the semester progresses.

We use pair programming for all the labs. BE AWARE that if you let your lab partner do most of the work, you will score poorly on exams and thus in the class. Be sure to participate fully in the labs, as that is where a lot of the learning takes place.


There will be two exams, a midterm and a final. The tests come from the class lecture material. Historically, the tests have been the major differentiator in assigning grades because the labs are usually finished by all teams. However, the grade is not determined solely by tests, and it's quite common for the quiz and lab grades to have a visible effect on the final result.


Quizzes will be given after class presentation of major subject areas.

Collaboration Policy

Collaboration is encouraged. This means that you may discuss approaches to solving problems with anyone in the class, including the professor and the graders. However, COPYING solutions from any source (person or book) is DISALLOWED. All students are expected to conduct themselves in accordance with the Harvey Mudd Honor Code. If you have any questions about what is appropriate or inappropriate collaboration, please talk to me.

The copying of code applies to everything except for the Labs. In some Labs we tell you to go get a data structure from a particular source. It is really really stupid to ignore this advice....

Web Page

Obviously, you should check the Web page regularly. Your primary source of timely information is the class calendar. Changes to the calendar page will NOT be announced via e-mail; it is your responsibility to keep an eye on it.

Major changes to other Web pages will be announced to the class mailing list.

List of Topics

The following is a rough outline of the topics we will be covering:

© 2013, Geoff Kuenning

This page is maintained by Geoff Kuenning.