Professional Documents
Culture Documents
The snag is that such skills are useful both in research and industrial contexts, but not all
that easy to learn. There is little suitable reading material and program design involves
many tradeoffs that are not well documented (e.g. simplicity of language use vs. use of
advanced features, performance vs. regular structure, modularity vs. simple access). This
is not a new problem. Famous books have been written as attempts to address aspects of
this, such as:
Aims
To improve the students ability of produce quality software, particularly as that relates to
the design, implementation, and use of libraries. Develop the students ability to
articulate ideals and design rationales together with the ability to articulate those verbally
and in writing.
Prerequisites
I will assume a basic knowledge of C++, including class design, use of class hierarchies,
and the use of templates for generic programming. We will discuss many such issues in
class, but I dont plan to explain the basic language features. Read the TC++PL language
sections (Part I-II) or equivalent in advance.
Overview
The course will consist of three parts
Lectures and discussions: twice a week; opening presentation (about 40 minutes)
followed by discussion; about half of the introductions by B. Stroustrup half by
students.
Experiments: each student will conduct one relatively small experiment relating to
library design, flexibility of programming styles, or performance of programming
styles every two weeks
A project: much of the last month will be devoted to group projects (ideally 3person projects) on projects aimed at a thorough analysis (complete with
experimental data) of a library or a programming style, or a comparative study. It
is expected that project ideas will emerge from the work on the experiments. The
results will be presented both in writing and as a half-hour presentation.
Ambitious students will aim for projects with a hope of later publication.
Reading
Youll read about two papers or chapters a week. I will make some suggestions and give
about half of the presentations. Students will be expected to suggest more papers and
present papers (after agreement with B. Stroustrup).
Here is a list of papers that we might discuss:
o Kevlin
Henney:
Excecute
around
patterns.
http://hillside.net/europlop/HillsideEurope/Papers/EuroPLoP2000/2000_H
enney_ExecutingAroundSequences.pdf
o Kevlin
Henney:
Reference
accounting.
http://hillside.net/europlop/HillsideEurope/Papers/EuroPLoP2001/2001_H
enney_ReferenceAccounting.pdf
o A. Stepanov and D. Musser: Algorithm-oriented Generic Libraries.
http://www.stepanovpapers.com/musser94algorithmoriented.pdf The first
paper on what became the STL.
o E. Gamma et al: The visitor pattern. Design Patterns. Addison-Wesley.
1994 To get an idea of what design patterns can be good for.
o Todd Veldhuizen: Template Metaprograms. The C++ Report. May 1995.
http://osl.iu.edu/~tveldhui/papers/Template-Metaprograms/meta-art.html
o "C++ Templates as Partial Evaluation". Todd Veldhuizen. ACM
SIGPLAN, 1999 http://ubiety.uwaterloo.ca/~tveldhui/papers/pepm99/
o "STL and OO Don't Easily Mix". Dietmar Khl Workshop on C++
Template Programming. http://www.oonumerics.org/tmpw00/kuehl.html
o "Valued Conversions" Kevlin Henney. C++ Report, July 2000
http://www.twosdg.demon.co.uk/curbralan/papers/ValuedConversions.pdf
o "Promoting Polymorphism" Kevlin Henney Application Development
http://www.twoAdvisor,
October
2001
sdg.demon.co.uk/curbralan/papers/PromotingPolymorphism.pdf
o Todd L. Veldhuizen: Parsimony Principles for Software Components and
Metalanguages:
http://arxiv.org/PS_cache/arxiv/pdf/0707/0707.4166v1.pdf
o Richard A. De Millo, Richard J. Lipton and Alan J. Perlis: Social
Processes and Proofs of Theorems and Programs. CACM:
http://www1.cs.columbia.edu/~angelos/Misc/p271-de_millo.pdf
o D. J. Wheeler. The use of sub-routines in programmes. In ACM 52:
Proceedings of the 1952 ACM national meeting (Pittsburgh), pages. 235
236. ACM Press, 1952.
Examples of libraries and systems:
o STL
o Matt Austern, Bjarne Stroustrup, Mikkel Thorup, and John Wilkinson:
Untangling the Balancing and Searching of Balanced Binary Search
Trees. Software - Practice & Experience. Vol 33, Issue 13. November
2003. pp 1273-1298. A case study in (small) library design.
o Todd Veldhuizen: Expression templates. C++ Report, June 1995,
http://osl.iu.edu/~tveldhui/papers/Expression-Templates/exprtmpl.html
o A GUI library
o Plan 9
o Unix
Please note that this is a list of plausible examples. but most definitely not the final list.
The final selection will be guided by our interests and what the experiments turn up.
Experiments
Discussions about programming style often get religious because it is just about
impossible to get relevant hard data. Here we will try to conduct a series of small (twoweek) experiments with anything we can find that is measurable: Performance and ease
of change are the obvious candidates. These experiments will be small and focused the
aim is not to scale to real-world applications or to reach general conclusions. Here is a list
of ideas:
Students are encouraged to find their own areas for experimentation. Since time and
space are the easiest to quantify, I expect most experiments will involve measurements of
size or run time.
Projects
It will be the students job to organize themselves into groups and to suggest a topic.
Both groups and topics are subject to approval. It is expected that most projects will be
much larger and systematic examination of topics examined in articles and through
experiments.