Announcements
- Lab 9 is posted. Due Friday 12/9 by 11:59pm.
Course Information
Class: Tu/Th 1:15pm – 2:30pm SCI 199
Lab A: W 10:30am – 12:00pm Clothier 016
Lab B: W 1:15pm – 2:45pm SCI 240
Lab C: W 3:00pm – 4:30pm SCI 240
Professor: Bryce Wiedenbeck
Office: SCI 262
Office Hours: Mon 11:30-1:00, Tue 2:30-4:30, Thu 2:30-4:00
Ninjas: Douglass, Emily, Jeff, Lu Min, and Rachel
Ninja Session: Sun 7:00-11:00pm, SCI 256
Course Overview
This course is a broad introduction to computer systems 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, beginning with elementary gates and proceeding all the way up to parallel and distributed computing.
Topics include data representation, logic circuits, machine organization, assembly and machine code, memory, I/O, the stack, the operating system, compilers, processes and threads, and synchronization.
Prerequisite: Completion of CS21 or its equivalent.
Piazza
Outside of office hours and ninja sessions, the best way to ask questions is to post on the
piazza forum.
The ninjas and I will check piazza regularly, and will do our best to answer your questions promptly.
When possible, you should post your questions publicly on piazza (as opposed to private posts or emails) so that all students can benefit from the answer.
Textbook
There is no required textbook for this course.
Instead, we will 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.
Because it's a great reference, two copies are on reserve in Cornell.
I will list corresponding sections for this book, when applicable.
Goals for the course
By the end of the course, you should have developed the skills to:
- 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.
Schedule
This is a tentative schedule; it will be updated as we go.
You should read the assigned sections
before class to prepare for the reading quiz.
B&O refers to the Bryant and O'Hallaron textbook.
include("calendar/auto.php"); ?>
35% | Lab assignments |
25% | Midterm exam |
25% | Final exam |
5% | Written homework |
5% | Reading quizzes (lowest three dropped) |
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 available.
Also, reading quizzes comprise 5% of your grade.
-
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 Bryce me during 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 and written homework.
Finish all of the assigned programs and problems (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.
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 office hours.
-
Attend CS31 Labs.
Lab attendance is required, and the labs constitute the largest portion of your grade.
You should be there!
Lab Policy
Labs will typically be assigned in class on Wednesday and will be due before midnight the following Tuesday.
You are strongly encouraged to start early and to attend the ninja sessions for extra practice.
You must submit your assignments electronically by pushing to your assigned git repository.
You may push your assignment multiple times, and a history of previous submissions will be saved.
You are encouraged to push your work regularly.
To help with cases of minor illnesses, athletic conflicts, or other short-term time limitations, all students start the course with two "late assignment days" to be used at your discretion, with no questions asked.
To use your extra time, you must email Bryce after you have completed the lab and pushed to your repository.
You do not need to inform anyone ahead of time.
When you use late time, you should still expect to work on the newly-released lab during the following lab section meeting.
The professor and ninjas will always prioritize answering questions related to the current lab assignment.
Your late days will be counted at the granularity of full days and will be tracked on a per-student (NOT per-partnership) basis.
That is, if you turn in an assignment five minutes after the deadline, it counts as using one day.
For partnered labs, using a late day counts towards the late days for each partner.
In the rare cases in which only one partner has unused late days, that partner's late days may be used, barring a consistent pattern of abuse.
You may use late days for written homeworks, however I strongly recommend against it.
Late labs (without late days) will receive zero credit, while late written homework will receive half credit.
Further, each written assignment is worth less than one percent of the course grade, while each lab is worth over three percent.
If you feel that you need an extension on an assignment or that you are unable to attend class for two or more meetings due to a medical condition (e.g., extended illness, concussion, hospitalization) or other emergency, you must contact the dean's office and your instructors.
Faculty will coordinate with the deans to determine and provide the appropriate accommodations.
Note that for illnesses, the College's medical excuse policy, states that you must be seen and diagnosed by the Worth Health Center if you would like them to contact your class dean with corroborating medical information.
Even if you do not fully complete an assignment, you should submit what you have done to receive partial credit.
The CS labs are open 24 hours a day, 7 days a week for you to use for CS lab assignments.
Academic Integrity
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."
The spirit of this policy applies to all course work, including code, homework solutions (e.g., proofs, analysis, written reports), and exams.
Please contact Bryce if you have any questions about what is permissible in this course.
Academic Accommodations
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@swarthmore.edu 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
Student Disability Service Website.
You are also welcome to contact me privately to discuss your academic needs.
However, all disability-related accommodations must be arranged through the Office of Student Disability Services.