Programming Paradigms and Languages

"A programming language is like a natural, human language in that it favors certain metaphors, images, and ways of thinking."
- Mindstorms: Children, Computers, and Powerful Ideas, Seymour Papert (1980)

Welcome to Programming Paradigms and Languages. This course follows the philosophy of the classic textbook, "Concepts, Techniques, and Models of Computer Programming" (CTM). Our goal is to teach programming not as a collection of separate languages, but as a unified discipline with a scientific foundation that is useful to programmers in practice.

Instead of treating each paradigm as separate and focusing on specific language syntax, we will learn the underlying programming concepts. These concepts are the "genes" that define different programming paradigms. We will see how complex paradigms like object-oriented, concurrent, and functional programming are built by combining a small set of fundamental ideas.

Our Approach: Python as the Lab, Oz as the Guide

To ground these powerful ideas in a modern, practical context, we will use Python as our primary language for all implementations and assignments. Python's flexibility and rich feature set make it an excellent "laboratory" for building and contrasting different programming models within a single language.

This course is a direct adaptation of the original Oz-based curriculum, which can be found at karlo-babic.github.io/paradigms. To maintain conceptual clarity, we will occasionally use Oz, the language from the CTM book, as a conceptual benchmark. We will look at short Oz snippets to see a paradigm in its purest, most distilled form before exploring how to express that same idea idiomatically in Python. This comparative approach will help us think critically about language design, its trade-offs, and how a language's features can shape our solutions.


To get started, please set up your development environment by following the instructions in Software.

After the software setup, you can begin with 1. Introduction to Programming Concepts.

Literature

The core philosophy of this course is based on the CTM textbook. The other texts are excellent supplementary resources.