Concepts of Programming Languages

A kaleidoscopic view on the many concepts of programming languages, focusing on object-oriented and functional programming, covering both theory and practice.

Author
Abstract

Computer programming is the activity of specifying what computers do, and programming languages are the main tool to achieve that. This course offers a kaleidoscopic view on the many concepts of programming languages, focusing on object-oriented programming and functional programming. Some concepts will be merely introduced, thereby providing an overview of directions for further study.

Learning outcomes. At the end of the course the student has acquired:

  • basic knowledge of programming language theory
  • practical experience with advanced imperative and object-oriented programming features (such as designing class hierarchies and defining and using abstract data types)
  • practical experience with basic functional programming concepts (such as algebraic data types and recursion)
  • basic knowledge of operational and denotational programming language semantics (needed for an advanced course in program correctness and computational models)
  • hands-on experience with implementing the (simply typed) lambda calculus, type checking and type inference (needed for an advanced course in type theory)
  • basic knowledge of distributed and concurrent programming (needed for an advanced course in concurrency and computer networks)
  • basic knowledge of automated and interactive theorem proving (needed for an advanced course in logical verification)

Topics

This course comprises both theoretical and practical aspects of programming languages:

  • methods to describe language syntax (BNF)
  • semantics of programming languages (denotational and operational semantics)
  • variables and expressions
  • imperative languages
  • parameter passing mechanisms (call-by-value, call-by-name, and others)
  • the lambda calculus
  • types and type systems
  • polymorphism
  • higher-order functions
  • object-orientation and generics
  • concurrency
  • theorem proving
  • language generators and string rewriting
  • advanced imperative and object-oriented programming
  • basic functional programming

Materials

Assessment

History

This course was offered at Leiden University from 2020 to 2024. See the course entry in the Leiden University study guide archive.

Back to top