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 uwaterloo.ca first . last AT uwaterloo.ca  
Week Lecture Reading
1 Admin
Git and Unix
A Math Primer by Andrzej Wasowski
2 Python  
3 C++
CMake
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
Lists
Stacks
Queues
 
12 Hashtables
Asymptotic Analysis
Statistics
 

Important Dates (likely to change, check frequently)

Date Event
Sep 08 Classes begin
Sep 11 First lecture
Sep 11 A0 out
Sep 15 A0 due
Sep 18 A1 out
Oct 02 A1 due
Oct 05 A2 out
Oct 07 Test 1
Oct 16 Reading Week. No lecture.
Oct 23 A2 due
Oct 26 A3 out
Nov 09 A4 out
Nov 09 Project out
Nov 11 Nov 18 Test 2
Nov 13 A3 due
Nov 27 A4 due
Dec 06 Dec 08 Project due
Dec 09 Final exam period begins
Dec 12 Final Exam

Posts