Principles of Imperative Computation

Course ID 15122

Description For students with a basic understanding of programming (variables, expressions, loops, arrays, functions). Teaches imperative programming and methods for ensuring the correctness of programs. Students will learn the process and concepts needed to go from high-level descriptions of algorithms to correct imperative implementations, with specific application 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 course prepares students for 15-213 and 15-210. NOTE: students must achieve a C or better in order to use this course to satisfy the pre-requisite for any subsequent Computer Science course. (GHC Clusters are the 3 labs on on Gates floor 5, 5207, 5208, and 5210)

Key Topics
Reasoning about code: contracts, invariants, interfaces
Basic Data Structures and Algorithms: Hash Tables, BST, Linked Lists, Graphs
Learn C programming language
Bit Manipulation
Complexity Analysis

Learning Resources
Piazza, Gradescope, Autolab, online lecture notes (no textbook), C0 programming language and documentation, C programming language

Course Relevance
For students with a basic understanding of programming and a desire to learn more advanced CS topics.

Course Goals
Write imperative that is correct by design
Learn about some fundamental concepts in Computer Science (abstraction, correctness, complexity, modularity)
Learn about a few basic data structures. Develop experience writing code in C

Pre-required Knowledge
Basic programming knowledge (variables, expressions, loops, arrays, functions)

Assessment Structure
24 HW assignments (45%), Labs and Quizzes (5%), 2 Midterms (25%), Final (25%)

Course Link