You don't take this course just for a grade; you take it to change how you code forever.
It would be disingenuous to discuss 15-312 without mentioning its difficulty. The course has a reputation for being one of the most challenging undergraduate electives at Carnegie Mellon.
Things get tricky. Adding letrec (recursion) breaks termination. Adding ref (mutable state) breaks the simple substitution model of computation. You must re-prove type safety from scratch.
The central goal of 15-312 is to examine the fundamental principles of programming language design, semantics, and implementation through a single mathematical framework. Key learning objectives include: