Course Overview

This course provides a programmer's view of how computer systems execute programs and store information, with exercises using the C programming languge. It examines key computational abstractions behind high-level programming languages: number and data representations, memory/pointers, stack & buffer overflow, processor instructions caching, virtual memory, programs and processes, and basics of concurrency with threads. The Big Ideas in this class are broadly applicable across the many subfields of computer systems and computer science, with specific instances demonstrated through labs and projects.

Course Information

Instructors: Lisa Wu Wills, Danyang Zhuo, Violette Walker
Location: LSRC B101
Time: Tue/Thur 10:05am - 11:20am
Graduate TAs: Chris Kjellqvist, Yechen Xu
Undergraduate TAs: Alyssa Zhao (Lead), Marisol Mata Nevarez (Lead), Ajay Krishnamurthy, Arim Lim, Irene Biju, Kevin Alvarenga, Marcus Yearwood, Minghao (Anna) Zhang, Nadeska Montalvan, Piper Epstein, Raymond Xiong, Zaid Muqsit
Office Hours:
Lisa Wu Wills - 11:30am - 12:30pm Tuesdays. Please book an appointment on Calendly (at the latest 4 hours before start time).
Danyang Zhuo - 1:00pm - 2:00pm Tuesdays. LSRC D313.
Chris Kjellqvist - 11:30am - 12:30pm Thursdays, 12pm - 1pm Fridays. LSRC D309.
Yechen Xu - 3:00 - 4:00pm Mondays, 2:30 - 3:30pm Fridays. LSRC D122.
(See Ed for other office hours)
Resources: Canvas, Gradescope, Ed, GitLab, Panopto


55% Exams
First Midterm (15%), Second Midterm (15%), Final (25%)
20% Projects
Five larger programming assignments that build on labs and lectures.
20% Labs
Small programming assignments (1-2 each week) associated with each lecture. There are 23 labs, and three labs that have the lowest scores will be dropped.
5% Discussion
Participation in weekly discussion sections for assignments.