CISC 860 Topics in Programming Languages:
The Structure and Design
of Programming Languages

School of Computing

Fall 2014


Instructor

Prof. James R. Cordy, Goodwin Hall 625, cordy at cs dot queensu dot ca

Time and place

Tuesday 1:30-3:30 pm, Goodwin Hall 521

General Description

Course Information Handout                        Course Plan Schedule                       Online references

An advanced course in the design and evaluation of programming languages:

This is not a technical course, rather a seminar, reading and essay course in the history, philosophy and psychology of programming language design.

Prerequisites

This course is open to all School of Computing graduate students. It is recommended that students have at least one previous undergraduate level course in the study of programming languages. Some knowledge of automata theory, mathematical logic and formal semantics (operational, axiomatic or denotational) is highly recommended. Familiarity withat least three distinct and diverse modern programming languages is essential.

Goals

All too often programming languages are considered only from the point of view of vehicles to express alogrithms for execution by a computer. In point of fact, computer programs are read more by people than by machines, and thus their major role is as a notation for communication between programmers. The goal of this course is foster the study of programming languages in this more fundamental role, with an aim to understanding the criteria by which programming languages can be designed and objectively evaluated.

Format

This is an interactive, discussion-oriented course involving independent study and critical interpretation of related literature. In addition to regular scholarly reviews of independently researched papers throughout the course, students will undertake a major independent research project and present results in the form of a formal class seminar.

Outline

1. History of Programming Languages (3 weeks)

A series of lectures and discussions led by the instructor on the early history and comparative study of programming languages, emphasizing the evolution of algorithmic notation and its relation to programming methodologies. This section of the course will be based on material from Horowitz's Programming Languages: A Grand Tour, in particular Wegner's paper Milestones in the (Early) History of Programming Languages. The section will end with proposals from students for new milestones in the spirit of Wegner from more recent history.

Online references                       Andrew Dickinson's 2009 Lecture Notes

2. Design of Programming Languages (3 weeks)

Lectures and discussions led by the instructor on the general principles of programming language design and the criteria by which a programming language can be objectively evaluated. This section will be based on relevant material from other disciplines including linguistics, the psychology of memory and perception, industrial engineering and mathematics as well as the psychology of computer programming. A primary reference for this section of the course will be Weinberg's Psychology of Computer Programming. The section will end with student presentations on specific design issues drawn from the literature.

3. Language Case Studies (3 weeks)

Case studies of specific programming languages and language features with an aim to understanding the goals of the language and how the design attempts to meet those goals. The section will end with student case studies for more recent programming languages and features.

4. Student Project Seminars (3 weeks)

The remainder of the course will consist of seminars led by individual students reporting the results of independent research projects in programming language structure and design. Projects may include new language designs, comparative or evaluative studies of languages for particular paradigms or domains, proposals for new features or paradigms, and so on.

References

There is no appropriate text for this course, and a wide range of published material will be used, most of it available online. In particular, we will be using the following references:

Bibliography on Programming Language Structure and Design

As part of the course, students will be expected to contribute to an ongoing annotated bibliography on programming language structure and design. Each member of the class will research and submit written reports on at least six new articles of significant interest in the area, assigned as two reviews for each part of the course. One of the two submitted in each case will be formally presented to the class for open discussion.

Sources for this research will include relevant scientific journals such as Communications of the ACM, ACM Transactions on Programming Languages and Systems, Proceedings of the SIGPLAN Symposia on Principles of Programming Languages, Proceedings of the IFIP Conference on System Implementation Languages, Proceedings of the ACM Conference on Language Design for Reliable Software, Proceedings of the ACM Conference on Language Issues in Software Environments, IEEE Transactions on Software Engineering, Proceedings of the ACM Conference on Aritficial Intelligence and Programming Languages, Proceedings of the International Conference on Software Language Engineering, and so on.

Bibliography Handout                        Example bibliography entries

Topics and tentative contribution due dates for this year are as follows:

  1. First two contributions (on History of Programming Languages): Tue Oct 7
    (presented one shuld be a proposed new Milestone)
  2. Second two contributions (on Design Issues): Tue Oct 28
  3. Third two contributions (on Specific Language Case Studies): Tue Nov 18

Course Project

Each member of the class will be expected to undertake a formal written independent language design project on some relevant aspect of programming language design and structure, and to make an oral presentation of their findings in the form of a seminar of approximately one hour's length. Projects involving significant original research will be encouraged, as will scholarly projects that consist of researching the literature and intelligently distilling key ideas for presentation.

Course Project Handout                        Example projects from past courses

Written project proposals are tentatively due by Tue Oct 21

Final project presentations will take place on Tue Nov 25
See the final Course Plan Schedule for your time.

Final project reports are due by Tue Dec 2 at latest..

Midterm Test

The midterm examination will be one hour long, covering all of the history and design material covered in class, taken from the Wegner milestones, Weinberg chapter 12 and other material covered in the lectures. The form of the exam is described in the hints below.

Midterm Test Hints    

This year's midterm examination is tentatively scheduled for the beginning of class on Tue Oct 21

Marking

Marks will be assigned on the basis of a short midterm examination on the lecture material, bibliography contributions, oral and written presentation of the course projects and class participation. Students will be expected to participate actively in seminars and class discussions.

Tentatively, marks will be divided in roughly the following proportions :

Midterm Test 20%
Bibliography Contributions 20%
Course Project 50%
Class Participation 10%

Marking of presentations and projects will be a communal activity, with marks assigned on the basis of a combination of the instructor's evaluation and the average of the evaluations by the other students in the class, on a 50 / 50 basis.