Booch on DSLs (Round 3)

Steve Cook responded to Grady Booch’s latest comments on software factories and DSLs, which was in turn a response to an entry by Alan Wills. It’s obvious that Booch is never going to agree with the DSL approach, but there are a couple of fascinating elements of the exchange.

First off is Microsoft’s “rejection” of UML, which is just plain FUD. I’m behind on news reading (as usual) but I was clued into this conversation by a post on that linked to Booch’s blog and read “Grady Booch explains why he disagrees with Microsoft’s rejection of the UML in favor of proprietary domain-specific languages.” Not exactly priming the pump for intelligent discourse on the subject. As Alan and Steve both point out, we’re not rejecting UML. UML is a tool, and like all tools it has things it’s good at and things it’s not good at. We’re talking about using DSLs for things UML is not good at.

The next is Common Semantics. Every time he posts on DSLs, Booch mentions something about “covering the same semantic ground as the UML”. I promised Dan in my comments that I would summarize this argument “in simple English” and I never got around to it. The term semantics simply means “meaning”. For example, in C#, the keyword “class” always means the same thing – it has what Steve pointed out is “objective semantics”. Obviously, the word “class” has widely varying semantics in common use – when a high school senior cuts class he’s not copying an object definition to the clipboard. But within the realm of C#, the word “class” has a well understood and precise meaning – it’s so precise that the C# compiler can tell you if you use it incorrectly.

So when Booch writes about a “common semantic model”, I take that to mean that he thinks there’s a core set of well-defined concepts that all languages build on. And if that’s what he means, I imagine he assumes all the interesting concepts are already defined by UML. I think that’s where the primary disagreement lies – we don’t think any one language can provide all the possible concepts needed for all programming domains. A language for developing a web app page flow will be built on very different semantic concepts that a language for developing telephone billing systems. Trying to build both of them on top of the same set of concepts is like putting a square peg in a round hole.

Furthermore, even if you wanted to build on a common set of concepts, it’s not clear if UML provides a precisely defined set of concepts to build on. Obviously, Booch thinks it does, but there certainly isn’t agreement in the industry. Steve refers to UML as having “cognitive semantics”, which means there is no one objective definition for a specific element of UML. For example, in covering Aggregation and Composition, Fowler refers to UML’s white diamond aggregation as a “modeling placebo” and having “no standard meanings”. When there’s no standard objective meaning, then each person brings their own experience and reason in order to formulate their understanding – hence the term “cognitive”. Of course, the chance that any two people will reach the same understanding via cognitive reasoning is slim to none – there’s just too much room for personal interpretation. Because of this lack of objective precision, Steve describes the resulting discussion of UML and its semantics as “political, rather than objective” which IMO is not a good foundation to build your own language on.

In the end, the proof is in the pudding. Personally, I think Booch looks at UML with rose-colored glasses and that his beliefs don’t mesh with reality. (Of course, our DSL modeling tools and software factories approach isn’t far enough along yet to test against reality.) How about your experience? What success or failure have you had with UML?


One of my concerns with UML is when getting users involved. Their attitude seems to be “here we are again, IT trying to get us users to learn an IT language to describe a business problem. We would rather get IT to learn a business language to describe a business problem”.
So having a bunch of DSL's with no common underlying foundation is a 'good thing'?
JTD, that's not what I'm saying. Many DSL's need to relate to each other. Take Whitehorse for example: You have a app modeller and a data center modeler. These each have some unique semantics and some related semantics. If you go to deploy a web app onto a web server, some type of translation or corolation needs to take place. But within that web app, there are going to be a wide variety of semantics and abstractions - pages, controls, process flows, style sheets, postbacks, etc - that have no corolation in the data center model. Trying to make a single modeling language that supports all these semantics will be overcomplex and unusable.