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.

For more information, please see the course syllabus.

Course Information

Instructors: Xiaowei Yang, Violette Walker
Location: Gross Hall 107
Time: Wed/Fri 10:05am - 11:20am
Graduate TAs: Albert Yuan, Mark Chen
Undergraduate TAs: Alyssa Zhao (Lead), Khushmeet Chandi (Lead), Ajay Krishnamurthy, Anna Zhang, Kevin Alvarenga, Marcus Yearwood, Marisol Mata Nevarez, Nadeska Montalvan, Owen Jennings, Piper Epstein, Prajwal Jagadish, Zaid Muqsit
Office Hours:
Xiaowei Yang - Wed at 3:30-4:30pm (LSRC D336) + After Lecture
Albert Yuan - TBD (Zoom; See Ed)
Mark Chen - TBD (Zoom; See Ed)
(See Ed for other office hours)
Resources: Syllabus, Sakai, Gradescope, Ed, GitLab, Panopto


35% Exams
First midterm (5%), Second (10%), Final (20%)
30% Projects (4, each worth 7.5%)
Larger programming assignments that build on labs and lectures
30% Labs (16, each worth 2%)
Small programming assignments associated with each lecture. Includes prelab questions. Lowest lab will be dropped
5% Discussion
Participation in weekly discussion sections for labs