This course provides a rigorous, mathematical framework for understanding programming languages. Rather than learning new languages, you learn how to define and reason about any language. Topics include: inductive definitions, abstract syntax, operational semantics, type systems (simple types, polymorphism, type reconstruction), evaluation strategies (call-by-name, call-by-value), and concurrency basics.
The course known as 15312 is officially titled "Foundations of Programming Languages." It is a 12-unit course typically offered in both the Fall and Spring semesters to upper-level undergraduate students. The course number may appear in some older records with a hyphen as 15-312. It's the intellectual sibling of the graduate-level course 15-652 (Advanced Foundations of Programming Languages) and serves as a comprehensive and formal introduction to the principles that underpin all programming languages.
– Describe how a program executes step-by-step on an abstract machine. Example: “To evaluate x + 3 , first find the value of x , then add 3.”
Modern engineering relies on DSLs (SQL, Regex, configuration languages like YAML, even Terraform HCL). 15-312 gives you a blueprint for defining your own language: syntax, semantics, and a type checker. 15312 foundations of programming languages
Complete Guide to 15312: Foundations of Programming Languages
The course bypasses layout debates by instantly translating code into Abstract Syntax Trees (ASTs). 15-312 introduces , which mathematically handle variable names, scopes, and bindings to prevent naming conflicts automatically.
Most introductory courses teach you how to use a language. 15-312 teaches you what a language is . The curriculum relies heavily on the work of Professor Robert Harper and his seminal textbook, Practical Foundations for Programming Languages (PFPL) . This course provides a rigorous, mathematical framework for
Student reviews on Reddit highlight that the heart of the course lies in its homework.
The central thesis of the course is the :
Languages like Java and C++ use subtyping (a Cat is an Animal ). The 15-312 treatment includes: The course known as 15312 is officially titled
Arguments are deferred and only evaluated when their results are explicitly required. 3. Key Topics Covered in the Curriculum
How do loops and recursive data structures (lists, trees) fit into pure functional foundations? You learn:
The "bread and butter" of the course, used to define syntax and prove properties through structural induction.
Computer science relies on programming languages to turn abstract logic into executable reality. At Carnegie Mellon University (CMU), the course serves as a definitive roadmap for understanding how these languages are designed, specified, and implemented. Rather than teaching you how to use a specific language, 15-312 teaches you how to reason about all languages through rigorous mathematical frameworks.