- We'll hold final exam review sessions in 256 on Tuesday, 5/5, from 2:00 -
3:00 and Wednesday, 5/6, from 1:00 - 2:30.
- Our final
exam is scheduled for Thursday, May 14 at 2:00 PM in Science Center
TuTh 2:40–3:50, Science Center 199
Professor: Kevin Webb
Piazza: Q&A Forum
GitHub: Swarthmore GitHub Enterprise
Gradesource: Grade listing
Tu 12:30–2:00, F 2:30–3:30, or by appointment
This course is a broad introduction to computer science that focuses
on how a computer works and how programs run on computers. We examine the
hardware and software components required to go from a program expressed
in a high-level programming language like C or Python to the computer
actually running the program. This course takes a bottom-up approach to
discovering how a computer works, and introduces parallel and distributed
computing with a specific focus on parallelism for multicore and other
shared memory systems. Topics include theoretical models of computation,
data representation, machine organization, assembly and machine code,
memory, I/O, the stack, the operating system, compilers and interpreters,
processes and threads, and synchronization. In addition to parallel
programming, we will discuss parallel computers and system-level support
for parallel computing. Prerequisite: Completion of CS21 or its
The course is composed of the following:
Readings: The readings serve as a first exposure to new topics, where
students learn the basics of the material.
Class meetings: The classroom material will cover the difficult concepts
and facilitate student discussions.
Labs: There are several lab programming assignments (in C) that will
explore various aspects of network programming.
Exams: There is a midterm exam and a final exam (both closed-book)
covering the material in the class meetings and the labs.
Rather than requiring a textbook, we're going to try something a little
different this semester and use readings from the web as our introduction to
new material. The textbook we've used in the past for this course is: Computer
Systems: A Programmer's Perspective by Bryant and O'Hallaron (Second
edition: 2/E CS:APP2e). It's a great reference, and I recommend it as a
supplemental source of information, if you're interested. I will list
corresponding sections for this book, when applicable.
Goals for the course:
By the end of the course, we hope that you will have developed the
- Implement programs in the C programming language.
- Organize and express data in a variety of formats (integers, strings, etc.).
- Characterize the execution of a program on the OS and underlying hardware.
- Translate between high-level language constructs and low-level assembly instructions.
- Analyze the systems-related costs associated with application performance.
- Evaluate OS abstractions and apply them in programs.
- Classify storage devices and their performance according their role in the memory hierarchy.
- Debug and examine applications using gdb and valgrind.
- Design and implement parallel solutions to programming problems that require synchronization.
This is a tentative schedule; it may change as we go. You should read the
assigned sections before class to prepare for the reading quiz. All
section numbers refer to the Bryant and O'Hallaron textbook unless otherwise
This course features regular lab assignments that account for the largest
component of your course grade. Lab attendance is required by all
students, unless you have already completed and submitted the lab
assignment for the week. Additionally, the cs labs are open 24 hours a day,
7 days a week for you to use for CS31 lab assignments. While you must attend
the lab session for which you are registered, you may optionally attend
additional lab sessions, provided space is available. In case of space
constraints, students registered for the lab will have seating priority.
Lab assignments will typically be assigned during the lab sections on
Wednesday will generally be due by midnight on Tuesday, one week later. You
are strongly encouraged to start early!
Even if you do not fully complete an assignment, you should submit what
you have done to receive partial credit.
Weekly Lab Sessions
|| Wednesdays 1:15—2:45
|| Science Center 256
|| Wednesdays 3:00—4:30
|| Science Center 256
Accessing the CS labs after hours
You can use your ID to gain access to the computer labs at nights and on the
weekends. Just wave your ID over the microprox reader
next to the lab doors. When the green light goes on, just push on the door
handle to get in (the door knob will not turn). If the green light doesn't go
on, then we need to enter your microprox number into the system. If you have
issues with the door locks, send an email to email@example.com.
If the building is locked, you can use your ID to enter the door between
Martin and Cornell library. For this class, your ID will give you access to
the labs in rooms 238, 240, and 256.
The CS 31 Ninjas
are student mentors who will assist in class/labs and run evening study
sessions. You are encouraged to participate in Ninja evening study sessions to
get friendly assistance on lab assignments and help with preparing for exams.
Weekly Evening Ninja Session: Sundays 7-11pm, 256 Sci Center
The CS 31 Ninjas: Brooke, Ryerson, Shawn, and Zoe
Ninja Coordinator: Lauri Courtenay (SCI 257)
Grades will be weighted as follows:
| 5%||Reading Quizzes (I will drop your three lowest quizzes.)|
| 5%||Class Participation|
How to Succeed in CS 31
Read the material before you come to class.
Don't worry about total comprehension, but at least get a feel for
what we will be covering that week. If you have some understanding of
the material coming into class, it will be easier for you to ask
questions during class, rather than later when help may not be
- Attend class and participate in discussions.
In class, we'll
cover new topics and dig into the more challenging details of the material.
Class discussions are a critical part of the learning process, as these
exercises give you immediate experience with the material we are covering.
Also, we'll have frequent reading quizzes, so you need to be present!
Ask questions if you don't understand.
This means both during class
and while doing lab assignments. This class continually builds on previous
material, so if you don't understand something one week, it will continue to be
a problem the next week, and the week after that, and so on. If you need help,
ask your classmates (make sure you have read the "Academic Integrity" section
below first), post on Piazza, attend a
ninja session, or come talk with me during my office hours.
Start the lab assignments early.
I realize this one is not always easy to do, but if you can get in the
habit of doing this, you will be much better off. If you get
stuck early (i.e., not two hours before it is due), there will be time
to look for help. In addition, if you start early enough, you can
take a break, go do something else, and come back later. I find I
always have at least a few new ideas when I come back to a problem
after a break. If you wait until the last minute, you can't do this.
Practice, practice, practice.
The only effective way to
learn the material and pass the quizzes and exams is to consistently
do the labs. Finish all of the assigned programs (and do some extras,
for fun!). Even if you don't get them done on time, they will still
help you learn the material.
Seek help early and often.
Because course material builds
on previous material, it is essential to your success in this class
that you keep up with the course material. If you are having difficulty
with a programming assignment, if you didn't follow something covered
in class, if you feel you need some extra help understanding or
practicing some of the course material, or if you just want to discuss
something from a class, an assignment, or the text, please come to
my office hours.
Attend CS31 Labs.
Lab attendance is required,
and the labs constitute the largest portion of your grade. You should be
Academic honesty is required in all your work.
Under no circumstances may you hand in work done with (or by) someone
else under your own name. Your code should never be shared with anyone;
you may not examine or use code belonging to someone else, nor may you
let anyone else look at or make a copy of your code. This includes, but
is not limited to, obtaining solutions from students who previously took
the course or code that can be found online. You may not share
solutions after the due date of the assignment.
Discussing ideas and approaches to problems with others on a general
level is fine (in fact, we encourage you to discuss general strategies
with each other), but you should never read anyone else's code or
let anyone else read your code. All code you submit must be your own
with the following permissible exceptions: code distributed in class,
code found in the course text book, and code worked on with an assigned
partner. In these cases, you should always include detailed comments
that indicates on which parts of the assignment you received help, and
what your sources were.
Failure to abide by these
rules constitutes academic dishonesty and will lead to a hearing of the
College Judiciary Committee. According to the Faculty Handbook:
"Because plagiarism is considered to be so serious a transgression, it is
the opinion of the faculty that for the first offense, failure in the
course and, as appropriate, suspension for a semester or deprivation of
the degree in that year is suitable; for a second offense, the penalty
should normally be expulsion."
Please contact me if you have any questions about what is
permissible in this course.
If you believe that you need accommodations for a disability, please contact Leslie Hempling in the Office of Student Disability Services (Parrish 113) or email lhempli1 to arrange an appointment to discuss your needs. As appropriate, she will issue students with documented disabilities a formal Accommodations Letter. Since accommodations require early planning and are not retroactive, please contact her as soon as possible. For details about the accommodations process, visit the Student Disability Service website
To receive an accommodation for a course activity, you must have an Accomodation
Authorization letter from Leslie Hempling and you need to meet with me to work
out the details of your accommodation at least one week prior to the activity.
You are also welcome to contact me privately to discuss your academic needs. However,
all disability-related accommodations must be arranged through Leslie Hempling in
the Office Of Student Disability Services.
Links that are related to the course may be posted here. If you have suggestions for links, let me know.