CPSC 539B - Topics in Programming Languages

Fall 2004 - Trends in Software Development

Instructor: Gregor Kiczales

Class time: T R 2:00 - 3:30, Meeting room: CISR 304, First class: September 21

A significant change in software development is at hand.

Code will be "higher-level". It will be based on models that capture the designer's knowledge about the domain and the specific system more explicitly. Working with the code will involve transformations, analyses and modeling more like that of mechanical and electrical engineers. The line between language and tool will become blurred. The relation between design and code will become more clear. Engineering processes in many software intensive domains will be more integrated. Corporate management will perceive greater competitive value in high-quality software, developed using advanced techniques.

It couldn't be a more exciting time to do research in software development technology and work practices.

The goals above are not new. Developers have always wanted notations and tools that allow them to express their design intent clearly, concisely, at the right level, and in a modular way. And the history of programming language and software engineering research is one of constantly improving on these goals. Machine code to assembly, to procedural programming, to object-oriented programming are progress along this line. Console switches to punch cards, to teletypes, to VT100s, to browsers to modern IDEs are progress along this line.

But a sea change[1] is at hand. Several developments are coming together to enable a significant advance on these goals.

This course will consist of an in-depth study of these recent trends, and other leading work from research and practice that is bringing them together to create an exciting new generation of tools.

By the end of this course you will have thought deeply about questions like:

Your Work in this Course

Your participation in this course has five main components:

Lectures - A small portion of the course will involve lecture by the instructor. This will be concentrated towards
the beginning of the semester, as we establish background needed for more in depth discussion.

Reading - You will be asked to read a collection of material from books, papers, talks and web sites.

Paper presentation - You will be asked to prepare a presentation to the class on 2 or 3 related readings.

Classroom discussion - The class will be highly interactive. You will be expected to ask/answer questions both from/to the instructor and other students.

Reports  - You will prepare a report due at the end of the semester, as well as two short previews of that report. (See Report Section below for more about the report.)


The course is open to students who have taken the equivalent of the UBC 310 and 311 courses. If you have not take two such courses you need the instructor's permission to register for this course.

Reading and Class Schedule

The following is the schedule of readings, lectures, presentations and class discussion. You should complete the required reading before each class, and arrive prepared to ask and answer questions about the material.

If you are the presenter, you need to do the required and the optional reading, and be prepared to present a summary to start discussion. I will discuss guidelines for that summary presentation in class at the beginning of the semester.

The first meeting of the course is September 21st, a week later than most graduate courses this fall. In addition, we will be missing two other classes during the semester.

Use this extra time for the reading the course requires. In particular, we are reading a significant fraction of The Power of Modularity, and Generative Programming, as well as a long report on meta-programming.

The reading list below is subject to change as we go through the semester. Readings may be added or moved, based on our discussion in class.

Date: Reading / Topic Presenter
Sept. 21 Introduction, overview, basic concepts and themes.

Please fill in a copy of the student information form and bring a hardcopy to class.

Sept. 23

D. Parnas, On the Criteria To Be Used in Decomposing Systems into Modules, Communications of the ACM, 15 (12), 1972.
[ACM Portal]  [Citeseer]  [PDF]

A. Kay, The Early History of Smalltalk (pages 1-37 only)
The second ACM SIGPLAN conference on History of programming languages.
[ACM Portal]  [Citeseer]  [PDF]

Sept. 28 G. Kiczales et. al.
Aspect-Oriented Programming,
European Conference on Object-Oriented Programming, 1997
[ACM Portal]  [Citeseer]  [PDF]

G. Kiczales et. al.
An Overview of AspectJ,
European Conference on Object-Oriented Programming, 2001
[ACM Portal]  [Citeseer]  [PDF]

P. Tarr, H. Ossher, W. Harrison and S.M. Sutton, Jr. "N Degrees of Separation: Multi-Dimensional Separation of Concerns." Proceedings of the International Conference on Software Engineering (ICSE'99), May, 1999.
[ACM Portal]  [Citeseer]  [PDF]

Extra reading:

Look at these web sites to get a better sense of what is happening in industry with AOP: AspectJ, AspectWerkz, The Server Side (search for AOP).

These books can also help you understand what's going on in industry:
AspectJ in Action, Ramnivas Laddad
Mastering AspectJ, Joseph D. Gradecki and Nicholas Lesiecki.


Sept. 30

Gregor Kiczales and Mira Mezini
Modular Reasoning in Aspect-Oriented Programming (Submitted for Review)
[ACM Portal]   [Citeseer]  [PDF]

Note: This paper has not yet been published. Do not circulate it outside of our
class, and bear in mind that it has not yet received the level of outside critique
that published papers receive.

Jonathan Aldrich
Open Modules: Modular Reasoning in Aspect-Oriented Programming
[ACM Portal]  [Citeseer]  [PDF]


Write a approximately one-page email message to me, defining the following terms: concern, implementation, representation, procedure, module, class, aspect, separation of concerns, interface. You can use any reference material you want. The goal is to write your definition of these terms, as best as you understand them today. We will re-visit what you write later in the course to see if your thinking has changed. Send this to me in email, due by October 5th.

Extra reading:

H. Masuhara and G. Kiczales
Modeling Crosscutting in Aspect-Oriented Mechanisms,
European Conference on Object-Oriented Programming, 1997
[ACM Portal]  [Citeseer]  [PDF]

Curtis Clifton and Gary T. Leavens
Obliviousness, Modular Reasoning, and the Behavioral Subtyping Analogy
[ACM Portal]   [Citeseer]  [PDF]

Oct. 5

No class.

Use this time to start on the reading for October 12 and 14!

Oct. 7

No class.

Use this time to start on the reading for October 12 and 14!

Oct. 12

Chapters 1 through 4 of Design Rules, Vol. 1: The Power of Modularity
by Carliss Y. Baldwin, Kim B. Clark.

The reading room has a copy of this book. The bookstore has copies for sale. You can also order from Amazon or Chapters.

Oct. 14

Chapters 5 through 6 of Design Rules, Vol. 1: The Power of Modularity

Cristina Videria Lopes and Sushil Krishna Bajracharya
An Analysis of Modularity in Aspect-Oriented Design (Submitted for Review)
[ACM Portal]   [Citeseer]  [PDF]

Note: This paper has not yet been published. Do not circulate it outside of our
class, and bear in mind that it has not yet received the level of outside critique
that published papers receive.

Professor Baldwin will join us for this class.
You should also attend her Distinguished Lecture at 4pm that day.
Oct. 19


“Lisp: a Language for Stratified Design,” Hal Abelson and Gerald Jay Sussman, Byte Magazine, February 1988, pp. 207--218.
[ACM Portal] [Citeseer] [PDF] [PS]

Sections 1.3 and 2.2.4 from Structure and Interpretation of Computer Programs by Harold Abelson and Gerald Jay Sussman with Julie Sussman.

Domain-Specific Languages: An Annotated Bibliography, Arie van Deursen, Paul Klint, Joost Visser

Extra reading:

People who find the Lisp vision of metalinguistic abstraction particularly compelling may want to have a look at:

Structure and Interpretation of Classical Mechanics, Gerald Jay Sussman and Jack Wisdom with Meinhard E. Mayer, MIT Press, 2001.


Oct. 21


Chapters 1 through 4 of Generative Programming
by Krzysztof Czarnecki and Ulrich E. Eisenecker,
Addison-Wesley, 2000.

The reading room has a copy of this book. The bookstore has copies for sale. You can also order from Amazon or Chapters.

Oct. 26


Chapters 5, 6 and 9  of Generative Programming.

Extra reading:

Sam Kamin
Routine run-time code generation,
OOPSLA’03 : Onward papers table of contents Pages: 208 – 220

Oct. 28


Code Generation in Action
by Jack Herrington.
Manning Press

The reading room has a copy of this book. You don't need to read it in detail, just give it a 2 hour skim.

codegeneration.net web site. Spend enough time looking at this to be able to discuss what appears to be happening in industry now.

Nov. 2


Eclipse (eclipse.org)
If you aren't already an experienced Eclipse user, spend a couple of hours playing with it. At a minimum, load up a decent sized Java program, look at the package explorer, do one or two refactorings.

FEAT (Feature Analysis and Extraction Tool)
Martin Robillard
Read the initial FEAT paper (ICSE 2002) and browse the online documentation.
[ACM Portal]   [Citeseer]  [PDF]

Nathanael Scharlia, Andrew P. Black
A Browser for Incremental Programming
Computer Languages, Systems & Structures, April–July 2004, vol 30 Nr 1–2, pp 79–95 Elsevier
[ACM Portal]   [Citeseer]  [PDF]

Nov. 4 No class.  
Nov. 9




J. Rumbaugh et al., Object-oriented Modeling and Design, Prentice Hall, 1991. (Chapters 2-3, 7-8.4)

Extra reading:

3rd workshop on Domain-Specific Modeling. The workshop website has slides of the presentations, photos and results of the group discussions on various metamodeling related topics, like model management, tranformations, MDA etc.

Nov. 11 Holiday, no class.  
Nov. 16 Charles Simonyi
Intentional Programming Innovation in the Legacy Age
Presented at IFIP Working group 2.1.

Lutz Roeder
Transformation and Visualization of Abstractions using the IP System (Talk slides)
Invited Talk given at the GCSE'99 Young Researchers Workshop at the 1st International Symposium on Generative and Component-based Software Engineering, 1999.

Lutz Roeder
Interactive Source Code (Talk Slides)
March 2001, updated November 2001.

Lutz Roeder
Extensibility and Visualiztion of Source Code Documents (Talk Slides)
Talk given at Bauhaus-Universitaet Weimar, Germany, January 2001.


Extra reading:

Eric Van Wyk et. al.
Intentional Programming: a Host of Language Features
Technical Report PRG-RR-01-15, Computing Laboratory, University of Oxford, 2001.

B. A. Sufrin and O. de Moor.
Modeless structure editing.
In: J. Davies, A. W. Roscoe and J.C.P. Woodcock (editors), Proceedings of the Oxford Microsoft symposium in Celebration of the work of Tony Hoare, September 13-15, 1999.

Starting at this point, we will go back over ground we have already covered, looking at underlying issues and going into more depth.
Nov. 18 ArchJava  (NEW!)

Jonathan Aldrich.
Using Types to Enforce Architectural Structure.
Submitted for publication.
[ACM Portal]   [Citeseer]  [PDF]

Also have a look at the website, archjava.fluid.cs.cmu.edu,especially the Documentation and Dowloads.

Nov. 23 Philippe Kruchten
Architectural Blueprints—The “4+1” View Model of Software Architecture
IEEE Software 12 (6), November 1995, pp. 42-50
[ACM Portal]   [Citeseer]  [PDF]


Nov 24

5:30 to 6:45


Jan Hannemann and Gregor Kiczales.
Design Pattern Implementation in Java and AspectJ

Nov. 25 No class.  
Nov. 30

Karsai G., Sztipanovits J., Ledeczi A., Bapty T.: Model-Integrated Development of Embedded Software, Proceedings of the IEEE, Vol. 91, Number 1, pp. 145-164, January, 2003.
[ACM Portal]   [Citeseer]  [PDF]

Dec. 2

The Timeless Way of Building
by Christopher Alexander

This book can be read in two "modes". A deep read, or a skim read. The preface explicitly talks about these two modes, and how to do it. We are doing the skim mode, which should only take a couple of hours.




You will be required to prepare a report in which you argue for a specific vision of what software development will be like in the future. You have to formulate a vision of software development in 10 to 15 years, and explain why you believe things are going that way. Your report should:


NEW: The report must be submitted in the standard ACM conference format, and must be 6 pages or less in that format. Style files and templates for that format are available at


Date What to hand in
Nov 16 One page summary.

This is a one-page description of the particular vision you are planning for your report. What are you interested in saying? Where do you see things going? What work will you bring together to make your case.
I will comment on this and return it to you.

Nov. 30 Two page outline.

This should be a bulleted outline of the argument structure of your report. It should show me what are the key points you will make. In what order. And how they build up to support your main claims.

Dec. 13 Final report.

The final report is due in my inbox, in hardcopy, printed single-sided.


How to Read Papers and Prepare for Classroom Discussion

When you read a paper, ask yourself following questions. When you prepare to present papers, pay specific attention to these questions.

What is the problem being addressed? What is the key idea of the solution?

What matters to the authors? What are their assumptions and priorities? What is their view of the field?

Why is it important? (practical, intellectual, groundbreaking, ontological…)

Is the idea validated? How? What are the threats to validity?

What is the novel contribution of this paper? This may be the same as the key idea, but often it isn't. For example, the contribution of a paper may be to add some details to our understanding of the key idea.

How does this paper connect to other work in the area? Other work not in the area?

Would you like to have written this paper? Why or why not?


References and Notes

[1] A marked transformation: “The script suffered considerable sea changes, particularly in structure” (Harold Pinter).