The power of simplicity

May 2005


The best defense against falling prey to technology fashion is to be skeptical of complex solutions. Is the complexity warranted? Sometimes it is, but often it's just a smokescreen to hide the existence of simple and effective answers.

Take the basic idea of object technology: to use the power of software modeling techniques -- essentially, abstract data types -- to describe systems of just any kind. The idea was there from the beginning, and Eiffel took it to its full development thanks to Design by Contract (and multiple inheritance, genericity, deferred classes, Uniform Access, Command-Query Separation...etc). This is a threat to an entire industry that thrives on complexity and incompatibility: if you have different formalisms for thinking, communicating and implementing, then you need consultants and tools to translate between the different levels. Quick (the strategy seems to have been), let's preempt the "object oriented" name -- it sounds cute -- and get back to the old order where the coders coded and the analysts analyzed: we'll use C++ and Java for implementation, so that no ordinary human being can understand the code, and UML for description, so that there is no semantics of any kind. This will give us an entire industry. It will also give us PhD thesis topics, such as trying to define what semantics UML might have.

Then (ten years later) we'll pretend to find out that there is a gap to be filled: new opportunities! New acronyms, for example: "Model Driven Architecture", as if Kristen Nygaard hadn't taught us back in 1970 or so that good programming is modeling in the first place. Modeling, of course, is passé. Today we talk about "metamodeling". (It is a pretty good principle of a blissful life to stop listening whenever you hear a word that starts with "meta". There may be a couple of exceptions but you don't risk much by ignoring them.)

Eiffel protects you from all that waste of time. The idea is simple: the schemes of object technology, originally developed for programming, are in fact schemes for thinking -- about systems, about the world. We use them to tackle complexity and devise robust, extendible architectures. (The architecture doesn't have to be "model-driven": it *is* the model!). Then we turn them into software implementations, smoothly and seamlessly. We don't distinguish between the program and the model of the program: the program is just the model refined to full implementability. We work in a single context from beginning to end, using the same concepts (classes, contracts and all the powerful modeling techniques of object technology), the same notation (Eiffel text, or graphical equivalents to it which can constantly and effortlessly be mapped back and forth), the same software support (EiffelStudio). We don't need to invest in a multitude of tools, and translators between these tools. We need fewer people. And if the external conditions change, we have a much easier job adapting the software, since it's really the same product as the model describing these conditions.

There are very few Three-Letter-Acronyms in all this, and very little that would qualify as "meta". But if you are fed up with pretentious and expensive approaches that leave you dizzy with grandiose phrases and short on actual results, you might try simplicity for a change.

-- Bertrand Meyer