Systems Programming
- Level
- Undergraduate
- Status
- Under development
Note: this course is still being designed and calibrated; the page content is for reference and does not represent the final teaching version.
Syllabus
Course Overview
Systems Programming trains students to build reliable programs on top of operating-system interfaces: processes, threads, files, networks, memory, synchronization, build systems, and debugging tools are taught through practice. The course emphasizes resource lifetimes, error handling, and observability.
This is the practical bridge to operating systems, networking, software security, embedded systems, and system security.
Prerequisites
- Computer organization and assembly language.
- Familiarity with at least one of C, C++, or Rust.
- Ability to use the Linux command line and Git.
Learning Outcomes
- Use processes, files, pipes, sockets, and threads correctly.
- Manage memory, handles, and resource lifetimes.
- Write robust error handling, logging, and tests.
- Use debuggers, tracers, and performance tools to locate problems.
- Build a small systems tool or service.
Course Format
- Two meetings per week: one for core concepts and one for labs, paper discussion, or project review.
- The course proceeds over 16 weeks, each with a checkable assignment, lab, or project milestone.
- Reproducibility is required: code, configuration, data, lab logs, and reports must be reviewable by staff or peers.
Weekly Plan
Unix programming model and toolchain
Implement a command-line tool and add tests.
Unix programming model and toolchain: lab and review
Implement a command-line tool and add tests. Complete the paired lab, record issues, and explain design tradeoffs in class review.
Files, directories, and error handling
Write a reliable file-processing program.
Files, directories, and error handling: lab and review
Write a reliable file-processing program. Complete the paired lab, record issues, and explain design tradeoffs in class review.
Processes, pipes, and signals
Implement a small shell or task runner.
Processes, pipes, and signals: lab and review
Implement a small shell or task runner. Complete the paired lab, record issues, and explain design tradeoffs in class review.
Memory, ownership, and debugging
Fix memory issues with sanitizers or valgrind.
Memory, ownership, and debugging: lab and review
Fix memory issues with sanitizers or valgrind. Complete the paired lab, record issues, and explain design tradeoffs in class review.
Threads, synchronization, and concurrency bugs
Implement and debug a concurrent queue or server.
Threads, synchronization, and concurrency bugs: lab and review
Implement and debug a concurrent queue or server. Complete the paired lab, record issues, and explain design tradeoffs in class review.
Sockets, protocols, and network services
Implement a simple network service and client.
Sockets, protocols, and network services: lab and review
Implement a simple network service and client. Complete the paired lab, record issues, and explain design tradeoffs in class review.
Build, deployment, and observability
Add logs, metrics, and CI checks.
Build, deployment, and observability: lab and review
Add logs, metrics, and CI checks. Complete the paired lab, record issues, and explain design tradeoffs in class review.
Systems tool project
Submit the tool, tests, performance notes, and failure analysis.
Systems tool project: lab and review
Submit the tool, tests, performance notes, and failure analysis. Complete the paired lab, record issues, and explain design tradeoffs in class review.
Assessment
Concept questions, reading responses, design tasks, and small programming or lab exercises.
Systems programs, tests, debugging records, and runbooks.
Participation in discussions, demos, code or paper reviews, and peer feedback.
Submit reproducible artifacts, a technical report, and a demo explaining methods, results, limitations, and future work.
Course Project
Students implement a small systems tool or service, such as a concurrent downloader, log collector, proxy, file synchronizer, or lab-platform component.
Policies
- AI tools are allowed, but generated code, lab notes, and design suggestions must be reviewed by the student and disclosed in the report.
- Students may not submit code, proofs, configuration, or experimental results they cannot explain; each member must defend their own design, tests, and tradeoffs.
- Late work affects iteration grades, but the course values reproducible, auditable, and maintainable results over last-minute accumulation.
Reference Courses
International
- CMU15-213 Introduction to Computer Systems
- CornellCS 3410: Computer Organization and Systems Programming
- Georgia TechCS 2200: Introduction to Systems and Networking
- MIT6.033 Computer System Engineering
- PrincetonCOS 217: Introduction to Programming Systems
- StanfordCS110: Principles of Computer Systems
- University of WashingtonCSE 351: The Hardware/Software Interface
China 985 Universities
- 上海交通大学计算机系统基础(ICS)
- 中国科学技术大学操作系统
- 南京大学操作系统:设计与实现
- 清华大学程序设计训练(Rust)
- 西安交通大学操作系统原理