Systems Programming - Fall 2023

announcements
Sep 18: Programming assignment n. 1: solve the wordcount problem. This is a non-graded assignemnt. The exercise will be discussed in class.
Sep 18: Reading assignment n. 1: read and practice with the notes on Getting Started with C and Systems Programming.
Sep 18: Welcome to Systems Programming!
Instructor: Antonio Carzaniga
Assistants: Shamiek Mangipudi, Pasquale Polverino
Lecture schedule: Monday 11:00–12:30, Wednesday 11:00–12:30. See the course weekly schedule or the third-semester Bachelor schedule for details and updates
Instructors' Office Hours: by appointment
Assistants' Office Hours: by appointment

Objectives

What is systems programming? In a way it is just programming. But it is also more specific: it means developing programs that interact with other programs or "systems", as opposed to human users. Systems require specific interactions, usually with very specific and sometimes rigid formats. Systems also have non-trivial structures and architectures, with specific performance characteristics that might be crucially important for the programmer. Some systems might also have non-traditional execution models that, effectively, change the way we program. Examples of such systems are database systems, networked systems, operating systems, specialized devices, special purpose processors, or even general purpose architectures with non trivial architectures (e.g., any non-trivial memory structure).

The primary language of systems programming is the C programming language. So, the first objective of this course is to learn C, meaning programming as well as reading and understanding relatively large C programs. Rather than studying the design of the language per-se or its linguistic features, this course is intended to provide a practice-oriented introduction to programming in C. This course does not require any previous knowledge of C, although it requires some elementary notions of computer programming.

The second objective of this course is to learn how to write programs that interact with a non-trivial system. Once again, the approach is pragmatic, and the learning path will be based on examples and direct experimentation.

Contents

The course will cover:

Useful Links

Additional information is available through the following links and pages.

Lectures and Material

this page is maintained by Antonio Carzaniga and was updated on September 17, 2023