Thursday, May 7, 2009

Thirty Years of Domain Engineering

“Thirty years?” At least some readers will be asking themselves that question about the title of this post right now. “But domain engineering isn’t more than about ten or fifteen years old! The conferences on product family engineering only started in the mid-nineties!”

In his wonderful book A Short History of Nearly Everything, Bill Bryson cited a quotation that went something like this: The history of a new idea generally passes through three phases. First, the idea is not understood by anybody. Second, it is finally understood and accepted after years and years. Third, it is then attributed to the wrong person.

James Neighbors introduced the concept of domain engineering in his PhD thesis in 1980. (By the way, aside from coining the expression “domain analysis” in his thesis, he also wrote about “domain specific languages”, nearly thirty years before a special issue in IEEE Software on DSLs was enthusiastically received by a large practicing community.) He expanded on that work over the next four years with his Draco system, which essentially introduced the domain engineering process as it is known today in the product line community. Draco was so innovative that colleagues who were reimplementing it in other places were still grappling with its subtleties years later.

But when I have spoken with many in the software product lines community, they admit that they have never even heard of Neighbors and his work (even though it was published in the standard, widely available channels). When they are told about it, they offer an explanation of why the product lines work is somehow different (it usually has something to do with “commercial focus” or the like). But the explanations are generally not very convincing, at least to me.

It is ironic indeed that in the field of software reuse, of all fields, history also is being forgotten. In precisely the field that preaches not reinventing the wheel, too many of us are doing just that, by not knowing what has been done before. And it is too bad not just for reasons of correct attribution, but also because we are depriving ourselves of some great work. Some of the best work ever done in computer science was done early on. Alan Perlis once said that the programming language Algol60 was “a great improvement over most of its successors.” A lot is still with us today – Lisp was invented in the 1950s and is still going strong. Many very deep concepts were invented, although not all panned out – such as “call by name” in Algol60. But even many of those concepts that didn’t pan out were simply ahead of their time, and bound to come back when the world was ready (either through better technology, or mindset, or whatever).

A lot of things that were explored in the early days of reuse are coming back now, such as introducing systematic reuse into organizations. That’s proof of their viability. The mindset is there now, the technology is more powerful than it was twenty years ago when it was first tried. But that doesn’t mean those earlier efforts were without merit. Why give up the chance to benefit from the insights of those who went before? Aside from the issue of giving credit where credit is due, we’re doing a disservice to ourselves by ignoring our past.

1 comment:

  1. Hi John,

    G R E A T post!! Your quote about Bill Bryson was perfect. Two years ago, I met a student working with domain-specific languages and others stuff comming from the new era such as software factories. I asked him about Neighbors'thesis [you can get here - http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.21.4397] and he did not know it. When he read, he was impressed with it.

    In fact, I read Neighbors'thesis during my Ph.D. [you can get here - http://people.engr.ncsu.edu/txie/sefamily.htm] with the material from other guys such as Griss, You, Frakes, Lim, Prieto, etc. and it was very important to understand the field.

    By the way, during my Post-Doc in Falls Church, I had the pleasure to work with Bill Frakes. Bill besides a guru in the area, he has valuable work on the topic dating back 80's and previous workshop such as WISR [http://www.umcs.maine.edu/~ftp/wisr/wisr.html]. Bill told me that he was wondering about publishing that material on the web. I think that it could be amazing for the new generation of researchers working on the topic.

    Regarding Neighbors'work, we can see clearly its ideas in new environments and concepts available in Eclipse and Visual Studio to create DSL. Besides him, the current ideas related to product generators or configurators are strongly related to Ted J. Biggerstaff and Ira D. Baxter.

    At the end, I had the opportunity to work in the Draco project in Brazil and the possibilities and connection with the current reality are huge. We did some insights about in this paper:

    * The Draco Approach Revisited: Model-Driven Software Reuse
    by Daniel Lucredio, Renata Fortes, Eduardo Almeida and Silvio Meira.

    Finally: “Study the past if you would define the future”
    Confucius (551 BC - 479 BC)
    Chinese philosopher and reformer

    ReplyDelete