CS 105

Computer Systems
Spring 2022
Syllabus

People

Professor:
Geoff Kuenning, HMC McGregor 329, 909-607-1610, geoff@cs.hmc.edu; office hours
Grutors:
Maya Abo Dominguez
Andrea Chen
Christopher Couto
Thomas Fleming
Megan Kaye
Keizo Morgan
Noah Nevens
An Nguyen
Olivia Russell
Aoi Yasuda
Tutoring hours
Tutoring hours are given in this Google spreadsheet (please view only; don't edit).
Administrative
Joyce Greene and Kathy Ryan, HMC McGregor 308, 909-621-8225

Getting Help

Technical 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 grutors (and it causes the mail to be sorted into a higher-priority box). Also, please include "CS 105" in your subject line and give as much information as possible about your problem.

ABOUT SCREENSHOTS: Please do not send screenshots of code. Screenshots take unreasonable amounts of disk space, are hard to read, prevent us from trying the code out ourselves, and often include only part of the program (usually the part without the bug). Instead, attach a complete copy of your program to your email.

Other Kinds of Help

I truly want every student in the course to succeed. I care about each and every one of you, and hope that the semester will go smoothly for all of us. To that end, if you feel at any time that things are going poorly, please reach out to me via whatever medium you choose.

In addition, if I or any of the deans contact you about the course, please be responsive. It may feel awkward to know that we are trying to get in touch with you, but remember that we are here to help you.

Accommodations

My goal is to make my course accessible to all of you; full information on accommodations is available on a separate page. Please send me any questions; I'm happy to help!

Class Meetings

Lecture Times:
Section 1: Tuesday/Thursday 1:15-2:30 (Beckman B126)
Section 2: Tuesday/Thursday 2:45-4:00 (Beckman B126)
Lab time:
Friday, 1:15-2:30 (McGregor 203/204)

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.

Text

The text for the course is Computer Systems, A Programmer's Perspective, 3rd Edition, by Randal E. Bryant and David O'Hallaron, Prentice Hall, 2015, ISBN 978-0134092669 (hardcover). Unfortunately, earlier editions of the textbook will not be usable for this course. Also, note that although the "global" edition of the book contains the same text, the practice problems and end-of-chapter problems are different and sometimes have incorrect answers. For that reason, we recommend the U.S. edition even though it is more expensive. If you buy the book from amazon.com via the preceding link, it will generate a commission for the Computer Science Department, which will be placed in the CS student activities fund. The money will directly benefit students, NOT the faculty or the department. Using the link to order any other book will also generate the commission.

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. There will be a quiz every two weeks. 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:

Lab Attendance: 5%
Quizzes: 20%
Labs: 20%
Midterm: 25%
Final: 30%

Note that 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 quizzes and exams are the major component of your grade. Normally, most students get a top or near-top grade on the labs, so the quizzes and exams are what distinguish you. If you do well on the tests, you'll do well in the course—and vice versa.

Attendance is required at all lab sessions until you complete the lab. Attendance taken at the first session of each lab assignment will be the basis of your lab attendance grade.

Laboratory

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.

IMPORTANT NOTE: When choosing a partner, we suggest that you select someone with a compatible schedule and similar ability. We also suggest that if you have NOT had CS 70, you partner with someone who has, especially for the first part of the course. You will find that it is much easier to work in the C language if one of you has previously used C++. Moving to C from Java is much more difficult.

We will reshuffle the pairs after Lab 3. By then, you will probably have a better idea of who in the class is a good match. Changing pairings is required after Lab 3; you are not allowed to work with the same partner for the whole term. Making new friends is a good idea!

Exams

There will be two exams, a midterm and a final. The tests come from the class lecture material. Historically, the tests have been a major factor 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 significant effect on the final result.

Quizzes

Quizzes will be given after we finish each chapter. Quiz dates are listed in the class calendar. The lowest quiz score will be dropped.

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.

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 (not in this order, and not all of every chapter—see the calendar):


© 2022, Geoff Kuenning

This page is maintained by Geoff Kuenning.