Lambda Bound University of British Columbia, Department of Computer Science
CPSC 311 Definition of Programming Languages
Winter 2016 Term 1

Course Goals     Syllabus     Notes     Assignments         Piazza    
CPSC 311: Definition of Programming Languages

Ideas can change the world.

Not every idea can do so literally, however.

Programs can.

Programs are living expressions of thought, and programming languages are the medium of those expressions. A good language delivers power into the hands of programmers. It makes it possible for them to write expressive programs—clear, concise, elegant and efficient.

In this course we will study programming languages, and how they enable this kind of expressiveness. We will look at the basic concepts of languages, and how different kinds of language mechanisms can fit together in different ways. The material will be intellectually substantive and challenging. At the same time, it should be practically useful over your career. You will learn to see the similarities and differences among the thousands of languages we use every day. You will learn not to be fazed as new languages come and go. You will also learn how to design and/or choose a new language when that might make a program you want to develop much easier to write.

The course involves programming, thinking, and good fun discovering what languages, programs and computations really are.

Welcome to 311. I hope you find the course rewarding.


High-level course learning goals

In large part, a programming language is defined by a set of individual language design choices. We will explore the space of languages by exploring the axes that define these choices.

What language design choices and features will we study? Likely examples:

All of these are really about semantics: how do we describe what a language feature means?

There are many kinds of meaning. A program can be understood both as a text (source code) and as an actor that does something. The semantics of a language must be grasped from both ends:

Given all that, our parameterizable high-level learning goals are for you to be able to: