The course treats programming languages as the subject of study. It introduces basic principles and concepts of paradigms including structured, object-oriented and functional programming. The concepts are illustrated through examples in concrete programming and students will gain hands-on experience implementing some of the concepts in practice.
This is a new course, jointly taught by Tomas Petricek and Vít Šefl that started in 2025/26. We cover principles behind the key programming paradigms. A follow-up course Theory of programming languages provides a more in-depth look at the theory behind programming languages.
Course format
The course consists of a weekly lecture and a bi-weekly hands-on session where you implement some of the concepts covered in the lectures on your own. You can see what the lab materials looked like in 2025/26.
Credit and an exam are required to complete the course. Credit will be awarded for successful completion of assignments given during the semester or for completing a credit program within the scope agreed upon with the instructor.
Course sylabus
Origins of programming languages
- Early history of programming languages
- Unstructured programming
- Scientific, business and symbolic programming
Models of programming languages
- Specifying the syntax of a language
- Abstract machines and semantic models
- Lambda calculus as a programming language
The Algol programming paradigm
- Structured programming and block structures
- Parameter passing, variable scoping, exceptions
- Language safety, data types and static typing
Functional programming paradigm
- Programming with expressions and functions
- Algebraic data types and function types
- Type checking and type inference
Object-orientation and data abstraction
- Modules and abstract data types
- Encapsulation, inheritance and subtyping
- Prototype-based and class-based OO
Further programming paradigms
- Logic programming, unification and resolution
- Asynchronous, reactive and concurrent programming
- Metaprogramming, event-driven programming