Course goals and approach

TIES542 Principles of Programming Languages, Spring 2017

In your studies, and perhaps in your hobbies or at work, you have learned several programming languages and gained experience in programming. You probably have witnessed and possibly have taken part in discussions such as which language is better than the other. If you have enough experience of such debates, you know that they usually lead to no consensus about the issue at hand and in fact usually do not progress at all.

Our goal in this course is to go meta: we will examine what a programming language is, what makes a good programming language, and the various ways programming languages can be constructed. To help us in this quest, we will turn to the published research literature and see how others have thought about these issues; we will have to learn how to read such literature, particularly how to read the various mathematical formalisms commonly used in this literature. We will also use the well known technique of definitional interpreters: building simple but inefficient implementations of various language ideas to see how they work in practice. We will further develop our ability to assess languages and language ideas and practice the art of evaluating and making effective arguments regarding the worth of ideas.

Accordinly, there will be only two learning outcomes set for this course: After this course, you the student will be able (1) to argue intelligently for or against propositions regarding programming languages, taking into account the state of the art and of the science, and (2) to evaluate such arguments critically. I do not promise that you will be able to convince others, since in this field there are no winning arguments (and since this is not a course on rhetoric), but you will be more effective in moving the discussion forward, for example if at your workplace there is a discussion of what language to use next. The skills and knowledge you gain on this course will help you also in your master's thesis, regardless of whether you write it on a programming language topic or some other topic.

Technical topics that this course typically covers include

  • survey of language constructs for control flow, data structures, control abstraction, data abstraction, object abstraction, and concurrency control
  • introduction to the idea of logic programming
  • formalisms for language semantics, particularly denotational semantics and small-step operational semantics
  • a tutorial on the theory of type systems

Whether we actually will cover all of that this time depends on a variety of factors.

I have taught this course previously using a lectures and exercises model, but it fits badly this sort of a course. Therefore, we will be doing something completely different this year.

I ask all students on this course to think about your own goals in general and particularly regarding the subject matter of this course. This results in a personal study plan for this subject area (see the task on the bottom of this page). I will be reviewing those plans and planning the course content based on them, so that the content as closely as possible matches the goals of the students taking this course, within the broad paramaters I set above.

Instead of lectures and exercises, there will be course meetings and tasks. The meetings will be held at the times and in the rooms reserved for lectures in Korppi; the demonstrations rooms will not be used. In the meetings, the Finnish language will be used. The meetings are not lectures but places for structured discussion among all participants. (There will be an alternate take-home task that you can do if you do not attend a meeting.) The tasks are mostly homework, if you will, but they are also what determines your grade from this course. Some of the tasks will be assigned reading, through which most of the technical content will be given to you.

This is an experimental approach to this course. I hope you all will join me in making it a success!

TASK: Personal Study Plan

Mandatory, deadline: January 16, 2017; submit to Koppa in PDF format.

Write (in Finnish or English) a personal study plan for the principles of programming languages. It must be at least one page long. Discuss in this plan the following questions:

  • What is my background? In particular, what in my background led me to study the principles of programming languages?
  • What are my larger goals at this time, particularly in relation to my studies and career?
  • How can studying the principles of programming languages advance my larger goals?
  • What learning goals do I set for myself regarding the principles of programming languages that I hope to achieve during this course?

Approach this task as a thinking, not writing, task please. The teacher will not share your plan with anyone else. The pass criterion for this task is that the document is at least one page long and addressess all of these questions in some manner; it will not be assessed in any other way. Note that whether you achieve your personal learning goals or not will not affect your grade from this course.

Added in response to question in the margin: A page is not a precise concept and I will not be counting words or lines or measuring line spacing with a ruler. However, if you make your font or line spacing way too large, I will notice and I might consider your page not to actually be a page. My advice: if you want to write as little as possible while being safe, stick to the standard manuscript page (liuska in Finnish): A4 or US letter page size, 12 point font with 1.5 or 2 line spacing and one inch (2.5 cm) margins. The font needs to be easily legible; a Times Roman variant is a good choice if you have no special reason to vary.

Are there any restrictions pertaining to the font, font size and line spacing?

05 Jan 17

These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.