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 Memory Required Background Knowledge Basic programming knowledge (variables, expressions, loops, arrays, functions) 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 Learning Resources Piazza, Gradescope, Autolab, online lecture notes (no textbook), C0 programming language and documentation, C programming language Assessment Structure 24 HW assignments (45%), Labs and Quizzes (5%), 2 Midterms (25%), Final (25%) Course Link http://www.cs.cmu.edu/~15122/home.shtml