CS644, summer 2026
This is the homepage for the summer 2026 edition of CS644: Systems Programming in Python, a community course that I teach in-person in New York City.
Those not enrolled in the course are welcome to browse the lecture notes, slides, and exercises.
What this course is and is not
CS644 is an introduction to systems programming via the Linux system interface. It covers the foundational building blocks of Linux software, including files, processes, inter-process communication, networking, multithreading, and signals.
CS644 is not a course about:
- operating-system internals
- writing high-performance software
CS644 is not affiliated with any accredited educational institution and completion of the course does not confer any transferable credit or professional certification.
Why Python?
The lecture examples and in-class exercises in this course are in Python. This is a change from previous semesters, when I used C. I chose to switch to Python because it has an excellent low-level interface that hews closely to the underlying C APIs, while also having all the conveniences of a high-level, modern programming language.
While Python is often not a suitable choice for real-world systems programming, what you learn in this course will transfer directly to other languages.
Schedule
| Week | Date | Topic |
|---|---|---|
| Week 1 | 7/2 | File I/O pt. 1 |
| Week 2 | 7/9 | File I/O pt. 2 |
| Week 3 | 7/16 | Process control |
| Week 4 | 7/23 | Interprocess communication |
| Week 5 | 7/30 | Mid-course break |
| Week 6 | 8/6 | Networking |
| Week 7 | 8/13 | Multithreading |
| Week 8 | 8/20 | Signals |
| Week 9 | 8/27 | TBD |
| Week 10 | 9/3 | TBD |
Course philosophy
CS644 heavily emphasizes the empirical approach: when we have a question like, "What happens to a process's signal handlers after fork?", we try to answer it experimentally (usually by writing a program).
This is not to downplay the wisdom of reading the docs – Linux's documentation is an invaluable resource for developers. But for the sake of learning, I believe that formulating a hypothesis and devising an experiment to test it gives you a much more durable and nuanced understanding, than just reading the answer.
The shared server
We have a shared Linux cloud server running Ubuntu 24.04 for our coursework. If you are enrolled in the course, I will email you log-in instructions before the first class.
Installed software
- Standard Linux development tools (
gcc,ld, etc.) - Python 3.12
- Rust 1.96
- Neovim
- Miscellaneous utilities (
bat,rg,fd,tldr,fzf)
If there is anything else you would like installed, let me know.
Remote development
Both standard Vim and Neovim are installed on the server, if you'd like to do everything on the command line.
If you want to use VS Code running on your laptop, follow these steps to set up remote development.
Sharing files
Your home directory is private. If you want to share a file with your classmates, you can put it in /home/shared/$USER (note that everyone else has both read and write access).
Course policies
- Collaboration: Collaboration with your classmates is allowed and encouraged.
- LLM use: How you use LLMs for the course is up to you. I only ask that you be mindful of whether LLMs are aiding your learning, or substituting for it.
- Shared server:
- Be fearless, but don't try to deliberately circumvent permissions.
- Don't put anything secret on the server (e.g., passwords, API keys).
- Don't use the server for anything not related to the course.
- The server will be shut down at the end of the semester.
Source code
Source code for the course is available at https://github.com/iafisher/cs644. Lecture notes and slides are posted to this site.
Final project
Throughout the course, you will work on a capstone project, a key-value server – a program that stores and retrieves data organized by key, like an on-disk hash map. By the end of the course, we'll have a multithreaded program with an IPC interface that can set, retrieve, and delete keys concurrently without data races. Each week has a core milestone, but there will also be ample opportunities for you to customize your project.