Home Syllabus Schedule Resources
Recitations Homework WPE
Note that the information below applies to the CIS500 course. The syllabus for the Software Foundations area of the WPE-I can be found here.
This course introduces basic concepts and techniques in the foundational study of programming languages. The central theme is the view of individual programs and whole languages as mathematical objects about which precise claims may be made and proved. Particular topics include operational techniques for formal definition of language features, type systems and type safety properties, polymorphism and subtyping, foundations of object-oriented programming, and mechanisms supporting information hiding and programming in the large.


Breakdown for the course grade is as follows:

  • Homework:  20%
  • Midterm 1:    20%
  • Midterm 2:    20%
  • Final Exam:  40%


An undergraduate-level course in programming languages or compilers; significant programming experience.


Part O Background
  A taste of OCaml
  Functional programming style

Part I Basics
  Operational semantics
  Inductive proof techniques
  The lambda-calculus
  Evaluator implementation
  Syntactic sugar; fully abstract translations

Part II Type systems
  Simple types
  Type safety

Part III Object-oriented features
  A simple imperative object model
  An analysis of core Java

Part IV Modularity [time permitting]
  Abstraction and representation independence
  Existential types
  Objects vs. ADTs
  Advanced module systems


  Types and Programming Languages  Benjamin C. Pierce
  MIT Press, 2002