Professors: Andrew Danner Lecture | Adam Lammert Lab
Office: Sci 247 (Danner) | Sci 270 (Lammert)
Phone: (610) 328-8665 (Danner) | (610) 957-6070 (Lammert)
Time: TR 2:40pm — 3:55pm - Sci Cntr 199
Lab A Time: F 1:15pm — 2:45pm - Sci Cntr 240
Lab B Time: F 3:00pm — 4:30pm - Sci Cntr 240
Text: Computer Systems: A Programmer's Perspective,
Bryant and O'Hallaron, Prentice Hall, 2011, ISBN: 0-13-610804-0
(a copy is on reserve at Cornell Library)
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
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 equivalent.
Goals for the Course:
- To understand how a sequential or parallel program goes
from being expressed in a high-level programming language
to being run on the underlying system.
- To understand and analyze the systems costs associated with
- To understand the role of the operating system and
some of the abstractions it implements to support efficiently
- To understand shared memory parallel computing and to be able
to "think in parallel" algorithmically.
- To become proficient in using gdb and valgrind
to debug and examine program execution state.
- To design and implement solutions to large problems using the
C programming language.
- To design and implement parallel solutions
to programming problems that require synchronization using
(This is tentative. It will be
updated as we go.)
The course textbook has a very complete and in-depth coverage of topics.
Some we will cover in the same amount of detail as the textbook while
others we will not cover or will not cover with the same amount of depth.
Take a look at Prof. Newhall's tips for reading CS textbooks
to help you determine
what to focus on and how to get the most out of the assigned readings.
I also recommend that you keep your textbook after taking this course. It
will be a useful reference for many upper-level CS courses.
Your overall grade in the course will be determined as follows:
|30%||Labs and Written Assignments|
|35%||Final exam |
|30%||Midterm exam (TBA)|
|5%||Class Participation and Attendance|
CS 31 Ninjas
are student mentors who will assist me in class and lab,
and who 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: Tuesdays 7-11pm, 240 Sci Center
The CS31 Ninjas: Greg, Zoe, Brooke, and Ryerson
Weekly Lab Sessions
Weekly lab sessions will be about 1/3 presentation
(typically an introduction to the weekly lab assignment and
practice learning programming tools for carry out the lab),
and about 2/3 for working on the lab assignment. Lab
attendence is mandatory and it is expected that you attend the
entire lab and that you work on CS31 content during lab.
Most or all labs will be done with a partner. For the first part
of the semester you will be assigned a different partner for each
lab assignment. Later, I will let you choose your own
partner with whom you will work for all remaining assignments.
I strongly suggest choosing a partner in your same lab session.
Policy on Lab and Written Assignments
Lab assignments will typically be posted on Thursdays
and will be due the following Wednesday evening. You are
strongly encouraged to start early and ask questions early
if you get stuck. For some assignments you must work
individually. For others you must work with a partner.
You may use a maximum of 48 hours over the course of the semester to submit lab assignments after the deadline. If you plan on using this extended time, please let me know via email, but submit your code normally via git (the commit time stamp will be used to determine late hours used).
Otherwise, late lab and written assignments will not normally be accepted;
however, special exceptions can be made if you contact me
well in advance of the deadline (having a lot of work in other
classes does not qualify for a special exception).
Even if you do not fully
complete an assignment, you should submit what you have done to
receive partial credit.
Some labs may take a considerable amount of time, so
you are strongly encouraged to begin working on assignments
well before the due date.
You will submit you assignments electronically using the
git version control tools.
You may submit your assignment
multiple times, and previous versions will be logged, but only the final submission will be graded.
About the CS Labs
I encourage you to work in one of the CS labs when possible (vs.
remotely logging in), particularly when working with a partner.
The CS labs (rooms 240, 256 and 238) are open 24 hours a day, 7 days a
week for you to use for CS course work. With the exception of
during times when a class, or a class lab or ninja session is
scheduled in 240 or 256, you work in one of the CS labs
on your CS course work anytime. The overflow lab (238) is always
available. The CS lab resources are for CS course work.
Please review the CS Lab Rules
and CS User Rules
about appropriate use of CS labs.
Accessing the CS labs after hours:
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. It should display a green light and beep when unlocked,
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
id number into the system. email firstname.lastname@example.org if
you have problems with this. If the building is locked, you can
use your ID to enter the door between Martin and Cornell library.
Tips for Success
Attend class and actively participate in class.
The primary introduction to course material is through class lecture.
Additionally, we often do exercises during class. Showing up is
necessary, but not sufficient to success in the course: ask questions,
participate in class discussions and in class activities, and take notes.
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 follow
the lecture and to ask questions during class.
See Prof. Tia Newhall's tips for reading CS textbooks for guidelines on getting the
most out of assigned readings.
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.
As the labs get longer and more difficult, starting early will give
you plenty of time to mull over the lab problems even when you
aren't actively writing your solution.
Practice, practice, practice.
The only effective way to
learn the material and pass the exams is to consistently
do the labs, and to practice example problems presented in class and
in the book. Forming study groups to go over practice problems and
to review lecture and reading notes is a great way to prepare for exams.
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. There are a lot of sources
of help: ask questions during lecture; ask your classmates (make sure
you have read the "Academic Integrity" section below first); get help
during lab sessions; come to office hours; and attend ninja study sessions.
Attend Study Sessions.
The student Ninjas
hold evening study sessions each week.
You are encouraged to participate in these sessions. The Ninjas
will provide friendly assistance on your lab assignments and can
also help answer questions about in-class exercises.
Take hand written lecture notes.
In lecture the professor
often draws diagrams on the board, some of which you will need to reproduce.
Taking notes with paper and pen (vs. on the computer) will allow you to
copy these diagrams.
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 130) or (e-mail email@example.com) to set up an
appointment to discuss your needs. Leslie Hempling is responsible for
reviewing and approving disability-related accommodation requests. As
appropriate, she will issue students with documented disabilities an
Accommodation Authorization Letter. Since accommodations require early
planning and are not retroactive, please contact her as soon as possible.
For details about the Student Disabilities Service and the accommodations
process, visit the
Disability Services website
. 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.
Below are some resources and links that may be helpful to you.