Announcements
Class Info
-
Professor: Vasanta Chaganti
-
Labs Instructor: Jocelyn Corey
-
Class: Tuesday / Thursday, 11:20 AM - 12:35 PM, Singer 33
-
Labs:
Section A
Friday 8:50 AM - 10:20 AM (Vasanta Chaganti)
SCI 240
Section B
Friday 2:00 PM - 3:30 PM (Jocelyn Corey)
SCI 240
Section C
Friday 3:45 PM - 5:15 PM (Jocelyn Corey)
SCI 240
-
Ninjas: Ben, Erin, Jenna, Kristen, Morgan and Lona — see CS31 Ninja Sessions.
-
Office Hours:
Tuesday 2.00 - 3.30PM
SCI 253
Wedneday 2:00 - 3:30PM
SCI 252-B
Thursday 1:00 - 2:00PM
SCI 253-B
Thursday 2:00 - 3:00PM
SCI 253
You may attend any, and all, instructor’s office hours.
-
Textbook: Dive into Systems
-
EdSTEM: Q&A Forum
-
GitHub: Swarthmore GitHub Enterprise
Required Materials
-
iClicker: This course uses iClicker devices to facilitate feedback and discussion during class. For many intermediate and upper level CS courses including CS 31, we require that students purchase their own clicker for personal use. Clickers may be purchased at the college bookstore or online. If you purchase your clicker at the bookstore, it is eligible for the TAP program. Please register your clicker online as soon as possible! Even if you have used clickers in other CS courses, you still need to register your clicker for use in this course.
-
Textbook: all readings will come from a free, online textbook: Dive into Systems by Matthews, Newhall, and Webb. (Two of the co-authors are Swarthmore CS faculty!) If you would like a print version of the textbook, it is available for purchase at the college bookstore. You are not required to purchace the print version of the textbook, as the on-line version is available for you to use for free.
Course Overview, Goals, and Structure
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 equivalent.
Goals for the Course:
Class Structure
-
📚 Readings: Shorter readings serve as a first exposure to new topics. These should be read prior to the assigned class meeting. The reading quizzes are primarly based on these readings. See tips for reading textooks for how to read a textbook.
-
✏️ Class meetings: The classroom material will cover the course concepts in depth, and include activites to practice applying concepts learned, and to facilitate student discussion. Class Attendance is mandatory!
-
📱 Reading Quizzes: Most class meetings there will be a short quiz primarily based on the shorter assigned readings.
-
✍🏽 Exams: There are two midterms and a final exam (both closed-book) covering concepts in class, homeworks and labs. Concepts covered in each midterm will be posted in advance on Edstem.
-
🧮 Labs: There are several lab programming assignments (in C, assembly, and one in logism) that will explore various aspects of computer systems.
-
🔖 Written Homeworks: Written homeworks are on based on class material and provide good practice for exams. The written homeworks are low stakes, and are geared towards peer learning. There will be one written homework per week with your assigned homework group.
Inclusion Statement
Diversity, inclusion, and a mutual sense of belonging are all core values of this course. All participants in this course must be treated with respect by other members of the Swarthmore CS community. We must all strive, students and faculty both, to never make anyone feel unwelcome or unsafe in any way. Violations of these principles are viewed as unacceptable, and we take them very seriously. If you ever feel discriminated against or otherwise excluded, no matter how minor the offense, we encourage you to reach out to any course professor or lab instructor (their contact info is available here: Class Info) or campus non-discrimination contacts.
Schedule
This is a tentative schedule; it may change as we go. All section numbers refer to the Dive Into Systems textbook unless otherwise indicated. You should read the assigned sections before class to prepare for reading quizzes. Read tips for reading CS textbooks to help you determine what to focus on and how to get the most out of required readings.
Week | Date | ANNC | Topic | Readings | Recordings | Lab & HW Assignments |
---|---|---|---|---|---|---|
0 |
Jan 14: Tue |
Welcome to CS31! |
||||
1 |
Jan 21: Tue |
Classes Begin |
Introduction, Binary Representation |
1. Introduction to Computer Systems, 3. Number Bases |
||
Jan 23: Thu |
Lab 0 [Soft Deadline] |
Binary Addition and Introduction to C |
2. Intro to C Optional Readings: |
|||
Jan 24: Fri |
||||||
2 |
Jan 28: Tue |
Binary Arithmetic and C Conditionals |
1. Binary Overflow, |
|||
Jan 30: Thu |
Lab 1 Due |
Bitwise Operations & C Functions and Strings |
2. C Functions, Optional Readings: |
|||
Jan 31: Fri |
In-Lab WarmUp Lab 2: C Arrays and Sorting Homework: C Programming |
|||||
3 |
Feb 04: Tue |
Computer Architecture and Logic Gates |
TBA |
|||
Feb 06: Thu |
Lab 2 Due |
Digital Circuits: [Arithmetic, Control and Storage] |
TBA |
|||
Feb 07: Fri |
Drop/Add Ends |
TBA |
In-Lab WarmUp Lab 3: Building an ALU - Part 1 Homework: Circuits |
|||
4 |
Feb 11: Tue |
Computer Architecture: CPU Execution and Pipelining |
TBA |
|||
Feb 13: Thu |
Lab 3: Part 1 Due |
Computer Architecture: Multi-Core Processors and Introduction to Assembly |
TBA |
|||
Feb 14: Fri |
TBA |
In-Lab WarmUp Lab 3: Building an ALU - Part 2 Homework: C Pointers |
||||
5 |
Feb 18: Tue |
Assembly: Arithmetic Operations and Conditionals |
TBA |
|||
Feb 20: Thu |
Lab 3: Part 2 Due |
Assembly: Loops and Introduction to Functions |
TBA |
|||
Feb 21: Fri |
TBA |
In-Lab WarmUp Lab 4: Data Analysis using C Pointers Homework: Assembly |
||||
6 |
Feb 25: Tue |
Midterm Exam-1 In-Class |
||||
Feb 27: Thu |
Lab 4 Due |
Assembly: Functions |
TBA |
|||
Feb 28: Fri |
TBA |
In-Lab WarmUp Lab 5: Writing x86_64 Assembly |
||||
7 |
Mar 04: Tue |
Assembly: Functions and Recursion |
TBA |
|||
Mar 06: Thu |
Lab 5 Due |
Assembly, C Structs and 2D arrays |
TBA |
|||
Mar 07: Fri |
TBA |
In-Lab WarmUp Lab 6: Binary Maze |
||||
Spring Break |
||||||
8 |
Mar 18: Tue |
Assembly Recap |
TBA |
|||
Mar 19: Thu |
Lab 6 Due |
Memory Hierarchy |
TBA |
|||
Mar 20: Fri |
TBA |
In-Lab WarmUp Lab 7: Strings Lab |
||||
9 |
Mar 25: Tue |
Direct-Mapped Caching |
TBA |
|||
Mar 27: Thu |
Lab 7 Due |
Set-Associative Caching |
TBA |
|||
Mar 28: Fri |
TBA |
In-Lab WarmUp Lab 8: Parse Command Line Lab |
||||
10 |
Apr 01: Tue |
The Operating System |
TBA |
|||
Apr 03: Thu |
Lab 8 Due |
Processes: Forking and Exec |
TBA |
|||
Apr 04: Fri |
TBA |
In-Lab WarmUp Lab 9: Shell Lab |
||||
11 |
Apr 08: Tue |
Midterm Exam-2 In-Class |
||||
Apr 10: Thu |
Lab 9 Due |
Processes: Signal Handlers |
TBA |
|||
Apr 11: Fri |
TBA |
In-Lab WarmUp Lab 10: Sequential Game Of Life |
||||
12 |
Apr 15: Tue |
Virtual Memory |
TBA |
|||
Apr 17: Thu |
Lab 10 Part 1 Due |
Virtual Memory and Paging |
TBA |
|||
Apr 18: Fri |
TBA |
In-Lab WarmUp Lab 10 Cntd: Sequential Game of Life |
||||
13 |
Apr 22: Tue |
Parallel Programming: Threads |
TBA |
|||
Apr 24: Thu |
Lab 10 Due |
Parallel Programming: Synchronization |
TBA |
|||
Apr 25: Fri |
TBA |
In-Lab WarmUp Lab 11: Parallel Game Of Life |
||||
14 |
Apr 29: Tue |
Parallel Programming: Synchronization |
TBA |
|||
May 01: Thu |
Lab 11 Part 1 Due |
Parallel Programming: Performance |
TBA |
|||
May 02: Fri |
Classes End |
TBA |
In-Lab WarmUp Lab 11: Parallel Game of Life |
|||
Grading
Grades will be weighted as follows:
Percentage | Course Activity |
---|---|
30% |
Labs |
20% |
Final Exam |
15% |
Midterm Exam 1 |
15% |
Midterm Exam 2 |
5% |
Written Homework |
5% |
Class Attendance and Participation |
5% |
Reading Quizzes |
5% |
Lab Participation |
CS31 Labs
Lab Sessions on Friday
The weekly lab meetings, on Friday, are structured with 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. Weekly lab meeting attendance is mandatory and it is expected that you attend the entire lab and that you work on CS31 content during lab.
All lab assignments, with the exception of Lab 1, will be done with a partner. You will be assigned a partner for the first few lab assignments. In later labs, we will let you choose your own partner.
About the CS Labs
We 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, 238 and the Clothier basement) are available for you to use for CS course work. With the exception of times when a class, or lab, or ninja session is scheduled in one of these rooms, you may work anytime in a CS lab on CS course work. The overflow lab (238) is always available.
CS lab machines are for CS course work only. There are other computer lab/locations on campus that are for general-purpose computer use. Please review the CS Lab Rules about appropriate use of CS labs.
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 onecard 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 you have issues with the door locks, send an email to local-staff@cs.swarthmore.edu. 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 SCI 238, 240, 256, and the Clothier basement from 7:00 AM to midnight.
CS31 Lab assignments
Lab assignments will typically be posted on Thursday and will be due the following Thursday evening. You are strongly encouraged to start early, attend the ninja session, and ask questions early if you get stuck (EdSTEM, office hours, ninja sessions). For some assignments you will work individually. For others you must work with a partner.
We will use Swarthmore’s GitHub Enterprise for managing each lab assignment. You will submit your lab solutions electronically using git. You must do a git add, commit, and push before the due date to submit your solution on time. You may push your assignment multiple times, and a history of previous submissions will be saved. You are encouraged to push your work regularly. You do not need to already know how to use git. We provide instruction on {labsetupurl}[using git for CS31] with the first lab assignment.
Working with Partners
For partnered lab assignments, you should follow these guidelines:
-
The expectation is that you and your partner are working together side by side in the lab for most, if not all, of the time you work on partnered lab assignments.
-
You and your partner should work on all aspects of the project together: initial top-down design, incremental testing and debugging, and final testing and code review.
-
If you are pair programming, where one of you types and one of you watches and assists, then you should swap roles periodically, taking turns doing each part.
-
There may be short periods of time where you each go off and implement some small part independently. However, you should frequently come back together, talk through your changes, push and pull each other’s code from the git repository, and test your merged code together.
-
You should not delete or significantly alter code written by your partner when he or she is not present. If there is a problem in the code, then meet together to resolve it.
-
If there is any issue with the partnership, contact the professor.
Taking time to design a plan for your solution together and to doing incremental implementation and testing together may seem like it is a waste of time, but in the long run it will save you a lot of time by making it less likely that you have design or logic errors in your solution, and by having a partner to help track down bugs and to help come up with solutions to problems.
Partnerships where partners work mostly independently rarely work out well and rarely result in complete, correct and robust solutions. Partnerships where partners work side-by-side for all or most of the time tend to work out very well.
You and your partner are both equally responsible for initiating scheduling times when you can meet to work together, and for making time available in your schedule for working together.
CS31 Ninja Sessions
The CS31 Ninjas are student mentors who will assist students in class and lab, and who run evening study sessions each week. 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: Mondays 8-10pm Sci Cntr 240, and Wednesdays 7-9pm Sci. Cntr. 256
-
The CS31 Ninjas: Ben, Erin, Jenna, Kristen, Morgan and Lona
-
Ninja Coordinator: Lauri Courtenay
Absence / Assignment Extension Policy
To help with cases of minor illnesses, athletic conflicts, or other short-term time limitations, we will drop your 3 lowest reading quizzes and participation grades. You are still responsible for the material, and you should review any missed materials via the class recordings as soon as you can.
All students start the course with 2 "late assignment" days to be used on lab assignments at your discretion, with no questions asked. No more than 2 late days can be used on a single lab assignment.
To use your extra time, you must email Jocelyn Corey (jcorey1@swarthmore.edu) 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 day, you should still expect to work on the newly-released lab during the following lab section meeting. The professor 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.
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. For illnesses, students should consult the College’s medical excuse policy for the latest guidance on how you can coordinate with the student health and wellness center and your dean in order to provide us with the necessary information.
Late days cannot be used for any written or in-class homework assignments that are not associated with a lab assignment.
Academic Accommodations
If you believe you need accommodations for a disability or a chronic medical condition, please visit the Student Disability Services website for details about the accommodations process. Since accommodations require early planning and are not retroactive, contact Student Disability Services as soon as possible.
You are also welcome to contact me the course staff privately to discuss your academic needs. However, all disability-related accommodations must be arranged, in advance, through Student Disability Services.
To receive an accommodation for a course activity you must have an official Accommodations Letter and you need to meet with the course professor to work out the details of your accommodation at least two weeks prior to any activity requiring accommodations.
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. Discussing ideas and approaches to problems with others on a general level is encouraged, but you should never share your solutions with anyone else nor allow others to share solutions with you. You may not examine solutions belonging to someone else, nor may you let anyone else look at or make a copy of your solutions. This includes, but is not limited to, obtaining solutions from students who previously took the course or solutions that can be found online. You may not share information about your solution in such a manner that a student could reconstruct your solution in a meaningful way (such as by dictation, providing a detailed outline, or discussing specific aspects of the solution). You may not share your solutions even after the due date of the assignment.
In your solutions, you are permitted to include material which was distributed in class, material which is found in the course textbook, and material developed by or with an assigned partner. In these cases, you should always include detailed comments indicating on which parts of the assignment you received help and what your sources were.
Use of or consultation with generative AI (e.g., chatGPT or GitHub CoPilot) is considered to be unauthorized collaboration with another source and is a violation of our academic integrity policy.
When working on tests, exams, or similar assessments, you are not permitted to communicate with anyone about the exam during the entire examination period (even if you have already submitted your work). You are not permitted to use any resources to complete the exam other than those explicitly permitted by course policy. (For instance, you may not look at the course website during the exam unless explicitly permitted by the instructor when the exam is distributed.)
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."
This policy applies to all course work, including but not limited to code, written solutions (e.g. proofs, analyses, reports, etc.), exams, and so on. This is not meant to be an enumeration of all possible violations; students are responsible for seeking clarification if there is any doubt about the level of permissible communication.
The general ethos of this policy is that actions which shortcut the learning process are forbidden while actions which promote learning are encouraged. Studying lecture materials together, for example, provides an additional avenue for learning and is encouraged. Using a classmate’s solution, however, is prohibited because it avoids the learning process entirely. If you have any questions about what is or is not permissible, please contact your instructor.
Exam Integrity
Students must strictly adhere to the following policy, which applies to all exams taken in a Computer Science course at Swarthmore:
Exam takers must place all non-essential items at the front of the room (or other designated area). Unless otherwise permitted, students may not have any electronic devices or course materials in their possession during the entirety of the exam. This includes cell phones, tablets, laptops, smart watches, course notes, articles and books, among others. These items should be placed at the front of the room near the proctor. If you need to leave the room during the exam, you must obtain permission from an instructor first. Any non-permitted discussion or aide in regards to exam material will result in immediate forfeiture of the exam and a report to the College Judiciary Committee. Please discuss any concerns or accommodations with your instructor prior to starting the exam.
How to Succeed in CS31
-
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 the 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 written assignments, 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; use the class EdSTEM page for lab Q&A, and attend ninja study sessions.
-
Attend Study Sessions. The student Ninjas hold evening 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.
Handy Resources
Below are some resources and links that may be helpful to you.
-
Textbook Page, and some Tips for Reading CS Textbooks
-
{labsetupurl}[Using Git for CS31 labs] and git help for lab assignments
-
{prof2url}/cs31/resources/x86_64_Stack_Frame.pdf[x86_64 Stack Frame [PDF]]
-
C Programing (C style guide, compiling, linking and debugging help, etc.)
-
Professor Newhall’s Help Pages and Links (Unix help, gdb, C, pthreads, …)
-
Phases of Compilation and Tools for examining .o and a.out files