Foundations Of Programming Languages - 15312
Foundations Of Programming Languages - 15312
To the uninitiated, "15312 foundations of programming languages" might look like an arbitrary alphanumeric code. To computer science students, particularly those at Carnegie Mellon University (CMU), it represents a rite of passage. 15-312 (often stylized as 15-312) is the legendary undergraduate/grad course that separates "coders" from "computer scientists."
But what are the foundations of programming languages? At its core, this field asks a deceptively simple question: What is a programming language, mathematically speaking?
While most developers learn languages by memorizing syntax (e.g., for loops in Python vs. map in Haskell), 15-312 teaches you how to design, specify, and reason about any language. This article unpacks the core principles, the type theory, and the operational semantics that make up the skeleton of every language from C to Rust to Coq. 15312 foundations of programming languages
Implement a complete programming language including:
Deliverables: GitHub repository with code (OCaml/Haskell/Rust) + 3-page written proof of progress & preservation for a core subset. Everything begins with the λ-calculus
Everything begins with the λ-calculus. Alonzo Church’s tiny language—with only variables, abstraction, and application—is Turing complete. In 15-312, you learn:
You will extend the basic calculus with powerful features: and application—is Turing complete. In 15-312
The course 15-312: Foundations of Programming Languages at Carnegie Mellon University (CMU) is widely regarded as one of the most intellectually transformative experiences in a computer science education. It does not merely teach students how to code; it teaches them how to define what code is.
To understand the significance of 15-312, one must look beyond the syntax of any single language—be it Python, Java, or Rust—and examine the mathematical bedrock upon which all languages are built. This essay explores the philosophical and technical depths of the course, analyzing how it shifts the paradigm from "programming as engineering" to "programming as logic."














