15-122 Principles of Imperative Computation, Summer II 2018

Course Information, Summer II 2018

Lectures: Monday-Friday, 10:30am-11:50am, GHC 4215
Labs and Recitations: MTWRF (alternating days, see schedule), 3:00pm-4:20pm, GHC 5207/5208/5210
Instructor: Hannah Gommerstadt (Office Hours MTWRF 2-3pm, 5th Floor Commons, these are meant to be conceptual office hours)
TAs: See Staff page (Office Hours Monday-Sunday, GHC 4215)

About this course


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. This will be accomplished along three dimensions:

After completing 15-122, you will be able to take 15-213 (Introduction to Computer Systems), 15-210 (Parallel and Sequential Data Structures and Algorithms) and 15-214 (Principles of Software System Construction). Other prerequisites or restrictions may apply.


You must have gotten a 5 on the AP Computer Science A exam or passed 15-112 (Fundamentals of Programming) or equivalent. You may also get permission from an advisor if you performed very high on the CS Assessment on Blackboard. It is strongly advised that you either have taken or take at the same time either 21-127 (Concepts of Mathematics) or 15-151 (Mathematical Foundations of Computer Science): historically, students who did not ended up with a course grade one letter grade lower than their peers who did, on the average.

Learning Objectives

Computational Thinking

Students should leave this course able to explain abstraction and other key computer science concepts, apply these fundamental concepts as problem-solving tools, and wield contracts as a tool for reasoning about the safety and correctness of programs. In particular, we expect students to be able to:

Programming Skills

Students should leave this course able to read and write code for imperative algorithms and data structures. In particular, we expect students to be able to:

Algorithms and Data Structures

Students should leave this course able to describe the implementation of a number of basic algorithms and data structures, effectively employ those algorithms and data structures, and explain and interpret worst-case asymptotic complexity arguments. In particular, we expect students to be able to: