Course Overview

Title: Principles of Imperative Computation


This course teaches imperative programming and methods for ensuring the correctness of programs. It is intended for students with a basic understanding of programming (variables, expressions, loops, arrays, functions). Students will learn the process and concepts needed to go from high-level descriptions of algorithms to correct imperative implementations, with specific applications to basic data structures and algorithms. Much of the course will be conducted in a subset of C amenable to verification, with a transition to full C near the end.

Units: 12

Co-requisites: Either 21-127 or 15-151 is a co-requisite (must be taken before or in the same semester). This course prepares students for 15-213 and 15-210.

More information about the course objectives can be found in the syllabus.



Prof. Saquib Razak,, CMUQ 1018, 4454-8553,
Office hours: Sunday, 10:00AM - 12:00PM

Prof. Mohammad Hammoud,, CMUQ 1006, 4454-8506,
Office hours: Monday & Wednesday, 3:30PM - 5:00PM.

Teaching Assistant

Tamim Jabban,, CMUQ 1004, 4454-8407,
Office hours: Sunday: 2:30 to 4:30 PM, and Wednesday: 4:00 to 5:30 PM.

Class hours

Lectures: Monday & Wednesday, 01:30 - 02:50 PM, Room 1199

Labs: Tuesday, Time: 1:30 - 2:20 PM, Room 2035

Recitations: Thursday, Time: 1:30 - 2:20 PM


The course is graded on a 1000-point scale. Absent exceptional circumstances, scores of 900 and above will be given an A, scores of 800 and above will be given a B, etc. Scores below these thresholds may receive the higher grade based on participation and/or exam performance on the sole discretion of the instructor.

Exams 50%

Homework 45%

Labs and Quizzes 5%