Announcements
Class Info
-
Professor: Sukrit Venkatagiri
-
Labs: Jocelyn Corey
-
Class: Tuesday / Thursday, 11:20AM - 12:35PM, Singer 033
-
Labs:
Section A
Friday 8:50AM - 10:20AM (S. Venkatagiri)
SCI 240
Section B
Friday 2:00PM - 3:30PM (J. Corey)
SCI 240
Section C
Friday 3:45PM - 5:15PM (J. Corey)
SCI 240
-
Ninjas: Marlea, Ben, Arden, and Lisa — see CS31 Ninja Sessions.
-
Office Hours:
-
Tuesday 2:30PM - 4:00PM (S. Venkatagiri — SCI 258)
-
Wednesday 1:00 PM - 3:00 PM (J. Corey — SCI 252B)
-
Thursday 2:00PM - 3:30PM (S. Venkatagiri — SCI 258)
-
-
Textbook: Dive into Systems
-
EdSTEM: Q&A Forum
-
GitHub: Swarthmore GitHub Enterprise
-
Daily Exit Ticket: Google Form
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 Rich, Kevin, Charlie, one of the college deans, or campus non-discrimination contacts.
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!)
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, where students learn the basics of the material. These should be read prior to the class meeting for which they are assigned. The reading quizzes are primarly based on these readings. Full required weekly readings complement lecture content. See tips for reading textooks for how to read these.
-
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.
-
Exams: There is a midterm exam and a final exam (both closed-book) covering the material in the class meetings (and to a lesser extent on some labs). Some reference materials will be provided with the exams.
-
Labs: There are several lab programming assignments (mostly in C) that will explore various aspects of computer systems.
-
Reading Quizzes: Most class meetings there will be a short quiz primarily based on the shorter assigned readings.
-
Written Homeworks: There are several written homework assignments. Written homeworks are on based on class material and provide good practice for exams.
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.
WEEK | DAY | ANNOUNCEMENTS | TOPIC & READING | ASSIGNMENTS |
---|---|---|---|---|
1 | Jan 23 | — | Welcome! (slides) | Lab 0: Let's Git It Started 💃 |
Jan 25 | — | Introduction to C Programming (slides) | HW 1: Warming Up with C 🥵 | |
Jan 26 | — | Lab 1: C Arrays and Sorting | ||
2 | Jan 30 | — | Binary and Data Representation (slides, video lecture - Prof. Kevin Webb - switch YouTube account to @swarthmore.edu) |
|
Feb 01 | — | HW 2: Computer for a Day 🧑💻 | ||
Feb 02 | HW1 due Feb 2nd Drop/Add Ends | Lab 2: Data Representation and Conversion in C | ||
3 | Feb 06 | — | Digital Circuits (slides) |
|
Feb 08 | Lab 2 due Feb 8th | Digital Circuits (continued) (slides) | HW 3: Short Circuit ⚡️ | |
Feb 09 | HW2 due Feb 9th | Lab 3, Part 1: Building Circuits and ALU | ||
4 | Feb 13 | — | ISAs and Assembly (slides - Tue and Thur) |
|
Feb 15 | — | ISAs and Assembly (continued) | HW 4: Herding Bytes in Assembly 🐈 | |
Feb 16 | HW3 due Feb 18th (Feb 18) | Lab 3, Part 2: Building Circuits and ALU | ||
5 | Feb 20 | — | Pointers and Memory (slides) |
|
Feb 22 | Lab 3 due Feb 22nd | Pointers and Memory (continued) | ||
Feb 23 | — | In-Lab Exercise 5, Video Walkthrough (Watch before lab! Switch YouTube account to @swarthmore.edu) | Lab 4: C Pointers and Assembly | |
6 | Feb 27 | — |
| |
Feb 29 | Lab 4 due Feb 29th | Functions and the Stack (continued) | ||
Mar 01 | HW4 due March 2nd (Mar 02) | Lab 5: Maze | ||
7 | Mar 05 | — | Arrays, Structs, and Pointers (slides) |
|
Mar 07 | — | Mid-Term Exam | ||
Mar 08 | Lab 5 checkpoint due March 9th (Mar 09) | Lab 5: Maze (continued) | ||
— | Mar 12 | Spring Break | ||
Mar 14 | ||||
Mar 15 | ||||
8 | Mar 19 | — | Arrays, Structs, and Pointers (continued) |
|
Mar 21 | Lab 5 due March 21st | Storage and the Memory Hierarchy (slides) | ||
Mar 22 | — | In-Lab Exercise 8, Video Walkthrough (Watch before lab! Switch YouTube account to @swarthmore.edu) | Lab 6: Game of Life! | |
9 | Mar 26 | — | Storage and the Memory Hierarchy + Caching (slides) |
|
Mar 28 | — | Storage and the Memory Hierarchy + Caching (continued) | ||
Mar 29 | Last Day to Declare CR/NC | Lab 6: Game of Life! (continued) | ||
10 | Apr 02 | — |
| |
Apr 04 | Lab 6 due Apr 4th | Operating Systems (slides) | HW 6: Short On Cache 💰 | |
Apr 05 | — | Lab 7: String Lab | ||
11 | Apr 09 | — | Operating Systems (continued), Processes (slides) |
|
Apr 11 | Lab 7 due Apr 11th | |||
Apr 12 | — | Lab 8, Part 1: Implementing a Unix Shell | ||
12 | Apr 16 | — | Virtual Memory (slides) |
|
Apr 18 | — | Virtual Memory (continued) | ||
Apr 19 | HW6 due Apr 19th | Lab 8, Part 2: Implementing a Unix Shell | ||
13 | Apr 23 | — | Parallel Applications and Threading (slides) | HW 7: Zombies 🧟♀️ and Virtual Memory 💾 |
Apr 25 | Lab 8 due Apr 25th | Race Conditions and Synchronization (slides) | ||
Apr 26 | — | Lab 9, Part 1: pthreads Game of Life | ||
14 | Apr 30 | — | (EXTRA) |
|
May 02 | — | (EXTRA) | ||
May 03 | HW7 due May 3rd | Lab 9, Part 2: pthreads Game of Life | ||
— | May 09 | Final (7:00-10:00pm, Singer 033) Lab 9 due May 10th (May 10) |