Course Description

This is an introductory graduate course. Its intent is to provide all students that are interested in software systems with a basic background that will help them succeed in subsequent endeavours (courses, research, and work in industry) related to software. The course is intended to be “hands-on” – there is a large project component that involves building a software system.

Additional information about the course is available in the course syllabus.

Details Instructor Teaching Assistant  
Name Prof. Arie Gurfinkel See lecture notes  
Office EIT 4021    
email first . last AT first . last AT  
Week Lecture Reading
1 Admin
Git and Unix
A Math Primer by Andrzej Wasowski
2 Python  
3 C++
C++ Tutorial
Introduction to Modern CMake
4 Forks and Pipes  
5 Systems Programming and Concurrency (Part 1) OSTEP: Processes, API
6 Systems Programming and Concurrency (Part 2) OSTEP: Concurrency, Threads, Locks, Semaphores, Bugs
7 Propositional Logic (Part 1) Ch. Prop Logic in Logic for Computer Scientists
8 Propositional Logic (Part 2) Ch. Prop Logic in Logic for Computer Scientists
9 Propositional Satisfiability Decision Procedures for Propositional Logic in Decision Procedures
10 Operating Systems OSTEP
11 Abstract Data Types and Containers
12 Hashtables
Asymptotic Analysis

Important Dates (likely to change, check frequently)

Date Event
Jan 08 Classes begin
Jan 09 First lecture
Jan 09 A0 out
Jan 15 A0 due
Jan 16 A1 out
Jan 30 A2 out
Feb 02 A1 due
Feb 13 A3 out
Feb 16 A2 due
Feb 19 – 23 Reading Week. No lecture.
Mar 05 A4 out
Mar 05 Project out
Mar 15 A3 due
Apr 05 A4 due
Apr 12 Project due
Final Exam


Previous Course Websites

2020 2022