The purpose of this course is to familiarize you with the the environment that modern computer programs exist in. Through a large and varied set of practical assignments, you will gain experience with the many steps along the path from source code to running program, memory management and virtual memory, process creation, communication and control, and a healthy dose of concurrent programming. While the class combines theory and practice, there will be a focus on practical demonstrations in lecture and extensive hands-on programming experience. Plan to spend 10 +/- 5 hours per week on homework programming, depending on your current proficiency.

By the end of this course, you will have a good understanding of the main elements that work together to form the Internet. You will have acquired some familiarity with standard diagnostic tools, network application development, and typical network designs and configurations. In addition, you will have caught a glimpse of more advanced networking concepts and research directions.


The main conceptual prerequisites for this class are CS 211 (the C part), CS 261 (machine organization), and CS 251 (data structures). A solid understanding of the theory of how things are stored in the computer, as well as the theory of how a processor executes instructions, as well as a basic understanding of programming (and specifically programming in C) are the tools you’ll need to succeed in this class.

Peer Instruction

This course will be taught using Peer Instruction, a teaching model which places stronger emphasis on classroom discussion and student interaction.


Grades are curved based on an aggregate course score. There are separate curves for graduate and undergraduate students. This means that the course score cut-offs for an A, B, C etc. are not defined ahead of time: these will be set after the end of the course.

The course grade weighting is:

Task % of total grade
Reading Quizzes 10
Class Participation 5*
Homeworks 35
Midterms 25
Final 25


Reading quizzes will be given at the beginning of each class period using iClickers. Everyone will have their lowest three quiz scores dropped.


Participation is an incredibly important facet of this course. The baseline Class Participation grade will be based off of participating in classroom discussion questions. Your class participation grade can grow to a maximum of 10 through exceptional participation. The expected score in this category is 5: additional points are a bonus reserved for substantial contributions, entirely at the instructor’s discretion. Exceptional participation includes early reports of errors in assignments, helpful discussion on Piazza, contribution of helpful code to the common good of the class (e.g. test cases and/or testing scripts) and thoughtful discussions during lecture.


Homeworks will consist of approximately six programming projects with duration between one and two weeks. Homeworks will center around investigating or creating C programs. Be sure to consult the online handout, the TAs, or the professor if you have any questions.


Late assignments will be penalized by decreasing your achieved score by the factor listed below. Extra credit will not be awarded for early turnins. While 10%, or even 25%, might not seem like a lot (even on each assignment), starting the assignments on time leads to completing the assignments on time and will lead to the grade you want. Ruining your weekend by taking late hours should only be done when you started on time, but other things came up and you know you can successfully complete the assignment even though you didn’t have it done on time.

x hours late Penalty
x < 12 10%
12 <= x < 24 25%
24 <= x < 48 50%
x >= 48 100%


We will be using the book below as our main textbook. This is the same textbook as used in CS261, and it covers the majority of the topics discussed in this class.

Computer Systems, a programmer’s perspective

Randal E. Bryant and David R. O’Hallaron

The C Programming Language by Kernigan and Ritchie

(colloquially referred to as K&R)

This is a suggested reference to help you with your C.


Consulting with your classmates on assignments is encouraged, except where noted. However, turn-ins are individual, and copying code from your classmates is considered plagiarism. For example, give the question “how did you do X?”, a great response would be “I used function Y, with W as the second argument. I tried Z first, but it doesn’t work”. An inappropriate response would be “here is my code, look for yourself”.

To avoid suspicion of plagiarism, you must specify your sources together with all turned-in materials. List classmates you discussed your homework with and webpages from which you got inspiration or copied (short) code snippets. All students are expected to understand and be able to explain their turned-in materials. Plagiarism and cheating, as in copying the work of others, paying others to do your work, etc, is obviously prohibited, is grounds for failing the course, and will be reported.