Winter Session 2008-2009 Term 1
Instructor: Gregor Kiczales
Meeting time: MW 9:30-11:00 ICCS 238
FIRST CLASS MEETING: Monday, September 8th, 9:30, ICCS 238.
It is hard to overstate the success of the software revolution. Software systems are everywhere: cars, phones, banks, taxis, hospitals, courier services, copiers, radios and so on... and on and on... and on.
And yet users as well as producers (managers, strategists, designers, programmers etc.) of software systems all complain about inflexibility, brittleness and other difficulties in getting the systems to do what people want. Years of research on techniques for improving software tailorability and flexibility has produced only modest results.
Why are software systems so inflexible? Why is it so hard to change them to work in different ways or to integrate into different contexts? Why is it so hard to understand what they do, why and how that might change in a different context? Why is it so hard to even get a handle on the problem?
In this course we will explore whether the problem might be more fundamental than has previously been acknowledged. We will do so by trying to go to the root of one of the most basic questions in the field: what do programs mean?
The traditional answer is that programs are crisp and well-defined instructions for a computer to follow to produce a desired process and result. Most work in programming language foundations is directed at this mechanistic sense of program meaning.
A different kind of answer is that programs embody an understanding of some part of the world (real and/or imagined); and are intended to express that understanding in different ways to their authors, readers and users.
This expressive sense of program meaning is at least partly odds with the mechanistic sense, because people do not see the world in crisp and well-defined ways. Instead our understanding of the world seems to be imprecise, transient, negotiated and many things other than crisp. The underlying world itself may not even be crisp and well-defined in the first place.
The course explores two broad questions.
The first is to ask what kind of theoretical underpinnings could help us understand and better work with the expressive sense of program meaning. What do we mean when we say people see the world differently? Or that the world is not crisp and well-defined? What form(s) might a foundational theory of program expressiveness take? What other disciplines could we appeal to for inspiration? What existing questions might such a theory help us answer?
The second question seeks to resolve existing mechanistic foundations with possible new expressiveness foundations. In particular, we will ask whether an improved understanding of the ways in which programs are (and need to be) expressive also suggests new mechanisms.
The course will include readings excerpted from several books and technical papers, class lecture and discussion, and work with a simple tool for prototyping alternative programming language mechanisms. Each student will complete a project due at the end of the semester.
The course is not intended to be overly difficult. There will not be huge amounts of reading nor will there be a massive implementation project. But please bring an open mind to (re)consider questions of what programs are and mean.
The course will be of particular interest to students in software engineering and programming languages who wish to get exposure to alternative perspectives on basic questions in the field. It may also be of interest to HCI students who want to explore the relation between what a software system means to its users vs. its programmers. Students in Cognitive Science may find interesting parallels between this material and the evolution of theories in AI.
We will read small parts of four books. The first book is available electronically from the publisher for $4.50 US. You can get it there using the link below. The other three books are available in two forms: a course reader from the UBC bookstore includes just the selections we will read, and copies of the book are on reserve in the CS Reading Room.
In addition, a modest number of technical papers will be made available on-line as the course progresses.
For a course project students will choose from one of two options: an essay addressing one or both of the main questions described above, or development of a prototype language mechanism that better supports the kinds of expressiveness discussed in class.