
Ralph E. Johnson
Research Associate professor, University of Illinois
http://st-www.cs.uiuc.edu/users/johnson/
Keynote: The Closing of the Frontier
Software design is usually discussed as if the system is being created “de novo”, but most programmers are working on systems that have already been released. This is a sign of success, since software is now good enough to keep and is worth improving. But the way we talk about design and the way we teach it is stuck in the twentieth century. The software frontier is closing.
Although there are still new projects, it is more accurate to say “there are no new software projects” than it is to say “all software projects are new”. What would the world be like if there were no new software projects?
- If a software project has been going for fifty years then a programmer who has been on the project for twenty years will be more valuable than someone who is new to the project. Old programmers will be more valuable than young programmers.
- If a software project is going to last another fifty years and will be actively developed during that time then it is worthwhile to keep it in good shape. It is worth fixing pesky bugs that only appear once every year. It is worth spending some time improving the documentation. It is worth rewriting parts of the system that are complex and buggy.
- If a software project is on version 129 then it is clear that software development is program transformation. Each iteration transforms version N into version N+1.
Although user requirements are important, version N+1 depends more on version N than it does on the latest requests from the users. Fortunes can be made both on the frontier and in cities. The frontier and cities are different, however, and some of the rules of success of the frontier must change for the cities.
Biography
For the past 10 years I have been studying
object-oriented technology and how it changes the way software is developed. In particular, I have been interested in how to use and develop
frameworks, which I have come to believe is a key way of reusing designs and code using objects. I have been involved in the development of an object-oriented operating system (
Choices), compiler (Typed Smalltalk), structured drawing framework (
HotDraw), music synthesis system (
Kyma), and am currently working on frameworks for
business transaction process (i.e. accounting, payroll, inventory) and other business computing.
Not surprisingly, this caused me to develop some opinions about how to develop reusable software, which in turn motivated me to write some papers.
Designing Reusable Classes (with Brian Foote) has a set of design heuristics and was the first paper in which I talked about frameworks. Frameworks are a way of reusing the design or
architecture of a system using object-oriented technology.
Reusing Object-Oriented Design (with Vince Russo) describes frameworks in more detail. Recently, Don Roberts and I have been trying to document the
process by which people create frameworks.
Frameworks led me to work on
patterns, which are a way of documenting design expertise. You can use them to document how to use a framework, how a framework is designed, and how to extend it. This led to the
Design Patterns book. For examples of how to document frameworks with patterns, see
Documenting Frameworks with Patterns,
Patterns Generate Architectures, and
A Framework for Network Protocol Software. Last year I organized a
seminar on patterns and frameworks at UIUC, and the students wrote some papers as part of it. I also teach a
course on patterns for various companies.
Working on frameworks made me appreciate the need for better support for refactoring. Bill Opdyke wrote a
PhD thesis on refactoring, and then we wrote a couple of papers on refactoring, one on
refactoring inheritance hierarchies and one on
refactoring component hierarchies. We are currently working to build a
Smalltalk refactory, and have an early version you can use.
Recently my interests have shifted to patterns of business software. As a result, I helped organize a workshop on
business transaction processing as part of the
OOPSLA midsummer workshops.
I have a
course on frameworks and how to write reusable OO software that I often give to companies.