“Longing on a large scale is what makes history.”

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:

Disclaimer

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

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

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.