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 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 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.
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
Please fill in a copy of the student information form and bring a hardcopy to class.
|Sept. 28||G. Kiczales et.
European Conference on Object-Oriented Programming, 1997
[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.
Gregor Kiczales and Mira Mezini
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.
H. Masuhara and G.
Curtis Clifton and Gary T. Leavens
Chapters 1 through 4 of Design Rules, Vol. 1: The Power of
Chapters 5 through 6 of Design Rules, Vol. 1: The Power of
Cristina Videria Lopes and Sushil Krishna Bajracharya
You should also attend her Distinguished Lecture at 4pm that day.
“Lisp: a Language for Stratified Design,” Hal Abelson and Gerald Jay Sussman,
Byte Magazine, February 1988, pp. 207--218.
Domain-Specific Languages: An Annotated Bibliography, Arie van Deursen, Paul Klint, Joost Visser
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.
Chapters 1 through 4 of Generative Programming
Chapters 5, 6 and 9 of Generative Programming.
Generation in Action
codegeneration.net web site. Spend enough time looking at this to be able to discuss what appears to be happening in industry now.
FEAT (Feature Analysis and Extraction Tool)
Nathanael Scharlia, Andrew P.
|Nov. 4||No class.|
J. Rumbaugh et al., Object-oriented Modeling and Design, Prentice Hall, 1991. (Chapters 2-3, 7-8.4)
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.
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.
|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!)
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]
5:30 to 6:45
Jan Hannemann and Gregor Kiczales.
|Nov. 25||No class.|
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.
The Timeless Way of Building
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
|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.
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?
 A marked transformation: “The script suffered considerable sea changes, particularly in structure” (Harold Pinter).