CS 61: Systems Programming and Machine Organization (2020)
Harvard School of Engineering and Applied Sciences
Eddie Kohler and Minlan Yu
Lectures: Flexible times, 3–4 times per week
Location: The Interwebs
| Course staff, lecture viewing, and office hours
| Coding style
| C and C++ patterns
Piazza | Grading server
Lecture notes: Data representation, Assembly, Kernel, Storage, Process control, Networking, Synchronization
EthiCS: Unicode, EthiCS: Equality
Lecture activities: Datarep1, Datarep3, Datarep4, Datarep5, Datarep6, Datarep7, Datarep9, Datarep10, Asm2, Asm3, Asm5, Asm7, Kernel1, Kernel4, Storage2, Storage3, Storage5, Storage7, Process7, Process8, Net2, Net4, Net5, Net7, Net8
Exercises: Data representation, Assembly, Kernel, Storage, Process control, Networking, Synchronization
Problem sets: Dmalloc, Binary bomb, WeensyOS, Stdio, Shell, Network Pong
Minlan Yu and Eddie Kohler are co-teaching 61 in fall 2020. Most assignments will be similar to prior years, but the teaching methodology will change a lot.
Rather than conventional scheduled lectures, we’ve selected a Flex course model:
Live lectures. Lecture segments will be recorded at varying times of day with rotating groups of “active listener” students whose attendance is required (~12-16 per lecture). Over the course of the semester, each student will be required to attend about 10 lectures as an active listener (exact number to be determined). (Other students may attend to the live lectures, but we’ll ask them to turn off their videos.) We will organize each lecture around a concept or demonstration program. There will often be some prep work, to get people ready for the lecture. Active listeners will be expected to ask live questions. Each lecture will also contain a breakout period, where students discuss and answer a decision question (like a multiple choice or a simple analysis). After the breakout lecture will conclude.
(Extension students are encouraged to serve as active listeners, but not required; see Extension policies.)
Lecture replay. Students who aren’t part of a live-lecture recording are expected to watch that lecture asynchronously. Lecture viewing can happen either at scheduled times, with TF participation to manage breakout rooms and answer questions in the chat, or completely asynchronously. We hope to assign students to “lecture teams” of ~4 students apiece, based on a number of factors including time zone. These teams will watch lectures together and interact.
Lecture length. Lecture length will be more driven by content than time block. We hope to record 3-4 lectures a week, each 35-45 minutes or so, rather than two strictly 1.25-hour lectures. Maybe one of these weekly lectures will have a topic driven by students.
Lecture/section. Normally section is kept very distinct from lecture. We will start the semester with one kind of class meeting, though some lecture topics will be more “section-like” and may be led by a TF.
In shopping week, we will offer two sample lectures and visit times, on Wednesday 8/19 at 9:30am and Friday 8/21 at 4pm Eastern time. These will be recorded.
CS 61 is an introduction to the fundamentals of computer systems programming. Topics include C, C++, and assembly language programming, performance analysis and improvement strategies, memory management, caching, concurrency, threads, and synchronization.
CS 61 will help you develop the skills to write programs for the real world, where performance and robustness really matter. It will also prepare you for more advanced CS courses, including operating systems, compilers and programming languages, architecture, and graphics. We want it to be fun and challenging.
Full course description with policies
CS 50, CS 51, or the instructor’s permission.
Note: This course requires programming in C++. Ideally you should already have experience programming in C or C++. If you have not previously programmed in C or C++ but know another procedural language, such as Java, you will likely be able to quickly learn what you need. Talk to one of the instructors if you are unsure whether you are sufficiently prepared for CS 61, or do the ungraded warmup assignment to check your preparation.
Computer Systems: A Programmer’s Perspective, Third Edition by Randal E. Bryant and David R. O’Hallaron. More information
College concentration requirements
CS concentrators must take two of CS 50, CS 51, and CS 61. CS 61 may be used as one of the four half-courses in CS to satisfy the requirements for the secondary concentration in computer science. CS 61 may also be used as a technical elective for the primary concentration (if you don't use it to fulfill other requirements).
CS 61 is offered through the Extension School as CSCI E-61. See information for Extension students.