Dr. Carlo Pescio|
Interview with Grady Booch
This is the original text of an interview with Grady
Booch, later translated in Italian and published in Computer Programming.
In the following text, CP stands for Carlo Pescio and GB for Grady
This is probably the Most Frequently Asked Question, but would you mind telling something about the UML. For instance, why did you decide to move the emphasis from a notation + methodology to a true modeling language?
Actually, this is a FAQ; i've written up a series of such FAQs, which appear on http://www.rational.com in the oo technology pages. Briefly, there are a two reasons for this change. First, it was clear that a number of users wanted the ability to adapt their own process to the UML; indeed, different domains demand different approaches. Second, the focus of the OMG RFP for OOAD is focused on modeling languages, not processes.
I've heard more than a few peoples saying that "UML is too hard/comprehensive". I guess this is because your preliminary documentation is quite different from the OOA/D books peoples are used to. But as you move from a methodology to a language, an higher degree of formalism is unavoidable. Don't you think that having to learn a more formal semantics will scare some of the analysts? I'm thinking e.g. to business experts who used to do the analysis, but had little computer science knowledge.
It is true that the UML is comprehensive; we have tried to address the traditional and contemporary modeling problems (class models, state machine models, etc). We have also tried to cover issues of business modeling (since they often flow into an oo system) as well as executable semantics. Further, we've tried to be forward looking, meaning that we are focused on software development trends, most notably issues of componentware, distributed computing, and net based applications. These elements are all covered by the UML. It is also true that the current UML documents are not highly approachable to the novice. Indeed, the introduction of these documents explicitly states so. However, these documents are meant to specify the language, not to explain it. This is not unlike, for example, the C++ ARM. This is not how a beginner would learn to programm in C++.
The amigos are writing three books to mitigate this
problem: a user guide, a reference manual, and a book on process.
In addition, we know of several other books in the works that
will be using the UML. In fact, "Core Java" already
contains some UML diagrams (based on the .8 work)
Do you consider existing CASE tools really appropriate for everyday work? I know many companies where CASE tools are mostly used as drawing pads, because nobody trust them enough in the reverse engineering step. So they have the ubiquitous problem of maintaining design diagrams as the code evolve. In some cases they just stop use the CASE tool after a while. Do you think your existing round-trip technology is good enough to be used in real-world projects, based on class libraries like MFC (with the macro syndrome) or STL (templates everywhere)?
This is more of a tool issue than a UML issue, so I'll be happy to talk with you more about this privately. The short answer is, yes, Rational Rose is appropriate for every day work and yes, people are using it for a variety of real world projects, a number of which they are betting their business on. This is not to say that any CASE vendor is happy with their current tool set: we are always improving the usability and functionality of our tools.
So lets talk a bit more about that. Isn't the jump from a programming language like C++ to a language like UML too big to be taken by a tool? For instance, a pointer in C++ may represent many things, among which:
- a USE relationship, with any cardinality
- an HAS-A relationship, with any cardinality, implemented with a pointer for whatever reason
How can you automatically reconstruct a meaningful diagram in UML which preserves the semantics of the C++ code?
Rose already does this today for C++ and other languages.
I'm not sure my question was precise enough. Naturally rose does a reverse engineering of C++ code, but my question was about the quality of the output model. Using the same example as in my original question (pointers), consider this code:
int x ;
A* a ;
Rose 3.0.2 decides that there is a generic relationship
between B and A (correct, maybe underspecified), that the adornment
is by reference (correct), with a cardinality 1 on the A side
(arbitrary) and a cardinality (0,1) on the B side (arbitrary).
It is not much a matter of quality of the tool (which is quite
good) but a matter of abstraction levels of the languages, and
the impossibility of resolving semantics ambiguities (if not by
arbitrary choices) when moving from one level to another. Naturally
the step from the semantically richer UML to C++ is easier.
We don't do it perfectly. If you have forward generated into C++ and then reverse generate back to UML, we keep comments around that give hints as to what the original model means. If you start with virgin code, then we make a best guess (usually specifying it as an association)
Also, using macro-intensive library like MFC is very similar to programming into another language. To derive a class from one of the MFC base classes as CView you cannot simply derive a C++ class from it, you also have to define your own message map and so on, as the Class Wizard does. But without a knowledge of the MFC unique needs, how can a CASE tool do the same? Naturally, MFC is just an example, perhaps one of the most widely used, macro-intensive libraries.
Now you are talking about moving forward from an existing framework... that's something we've been applying some ideas of wizards to help with.
You are probably familiar with the fact that in Europe, most of the development teams are small (e.g. 3-5 peoples) and have little or no hierarchy. Each of them do some analysis, design, coding, debugging, documentation. Or at least, they should. The pressure to skip everything but coding is great. Even more so if the next door guy is using Visual Basic to put together things at light speed. I've witnessed peoples doing quick and dirty coding and call it "rapid prototyping" or "incremental development" to show a respectable face. It seems mostly a matter of management awareness: in some cases, a quick hack is just "good enough", but not all the times. But is also a slippery path: how do we build awareness in upper management?
This is not a characteristic of just European projects. It is the case that in our work we see projects ranging from small teams to quite large organizations, and everything in between. Moreover; this is a topic for a book (gee, time for a plug: go read "Object Solutions") ;-)
As for things like Visual Basic: there are practical limits to the complexity of systems one can build with such tools. Indeed, this is why we have a Rose/VB connection: to leverage off the rapid development offered by VB yet offer architectural control via Rose.
Actually I did read your book. It is full of good advices for managers committed to using object technology. However, here the issue is a bit different. There is a folklore that VB-like tools have "practical limits" when addressing complex problems, but little hard data to show at the crucial moment. I'm not a VB-fan, but I can see that in many cases VB wins simply because is the best deal-of-the-moment, so if your concern is to have the application ready for yesterday, you may be tempted to discard long-term benefits for a short-term increase in productivity. In some cases, that's just fine because the application does not have to survive, the domain is a moving target, and so on. But how can developers help a manager, who is _not_ already committed to use object technology, to avoid the pitfall of using VB-like tools for larger projects, just because it worked just fine on small ones? And how do you draw the line to say "this is too complex for VB"?
It is even worse... there are limits to things like vb, but you rarely know that you will hit those limits until it is too late. The basic things i tell vbers is to have a clear sepation of concerns from the gui and the data... and to have at least a three tier architecure so that business rules can be isolated.
I'll resist the temptation to ask you something about the translational methods a-la Shlaer-Mellor :-). Instead, I'd like to ask you something about BON, which seems to have taken a very different approach to modeling than UML, mostly in favor of reversibility. For instance, in IEEE Computer 29/9 Kim Walden has been quite critic about elaborational methods were high-level concepts do not exactly mirror low(language)-level ones. What's your position on that?
I debated this position with Stephen at the most recent OOPSLA. I'm not familiar with Kim's work specifically.
Ok, I'll pose you another challenge :-)
Peter Coad, in his book "Object Models",
briefly criticize other notations by saying "Class, state
and function diagrams? Can you say entity-relationship, state-transition,
and data-flow?[...]To suggest such a multimodel triad is to miss
out entirely on paradigm change". Now, I'm sure you have
something to say about that, and I'd be glad to know your opinion.
No answer on that.
What's the secret of your success :-)?
More seriously, only a handful of consultants
have had your impact on the process, practice and language of
software development. Did it happen by chance, serendipity, restless
effort, or what else?
Probably a combination of the above. God has graced me with an ability to synthesize ideas and communicate them, and I take that gift seriously. I've definitely been in the right place at the right time more than once, as well.
Carlo Pescio holds a doctoral degree in Computer Science and is a consultant and mentor for various European companies and corporations, including the Directorate of the European Commission. He specializes in object oriented technologies and is a member of IEEE Computer Society, the ACM, and the New York Academy of Sciences. He lives in Savona, Italy and can be contacted at firstname.lastname@example.org.