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 DC2522    
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 05 Classes begin
Jan 05 First lecture
Jan 05 A0 out
Jan 09 A0 due
Jan 11 A1 out
Jan 28 A1 due
Jan 28 A2 out
Feb 11 A2 due
Feb 11 A3 out
Feb 15 Test 1 out
Feb 21 – 25 Reading Week. No lecture.
Mar 04 A4 out
Mar 04 Project out
Mar 11 A3 due
Mar 15 Test 2 out
Apr 01 A4 due
Apr 08 Project due
Final Exam


Previous Course Websites