Thursday, May 1, 2008

Abstraction and “What”

If you look at way our software programming has evolved abstraction would be the word that ties most of it. We started with assembly language with a linear sequence of instructions, abstracted out concepts like blocks of code into functions and created languages like C. We simulated concurrencies with another abstraction threads. Object orientation helped us manage much more complex projects by taking away focus from problem solving to describing a system. It has been a journey of abstracting out concepts and the direction is What. With every abstraction we are coming closer to specifying “what” we want than “how” it will be done. Although both are important, “how” is reusable much more than “what” and we have done a good job of “how”. And it will always awe us the ways in which we use “how” and permute different “hows” to create different “whats”. So, there will always be much more “whats” than “hows”.

Highly specialized DSLs (Domain Specific Languages) are being used nowadays and this brings us closer to describing (“what”) the system with minimum effort. This was the reason that we developed languages like Mathematics. I remember my first job involved creating simulators. Mathematical models of a system element was provided and then any system with any combination of system elements could be modeled and simulated/solved. We are following the same path to handle complexity – the model way.

Highly specialized modeling language should allow domain experts to define the “what”. Software should be then written to interpret or consume in some way that model to realize the “what”. This means software development should start with defining the modeling language and then should branch onto two tasks. One to develop the software for modeling language and other to define the “what” using the modeling language.

The “whats” will always change as change is the only constant atleast in this real world. If we develop software targeting at “what” we will always create software that will age, that may not satisfy the “what” in the first iteration as the “what” got changed by the time product was out. At times “what” is not definable in one shot, it evolves and can’t be verified until the product is made. The modeling language would more or less remain constant, is very well defined and opens options to multitude of possibilities.

Infact the “whats” should be in public domain, it should be shared and jointly owned. The software that would realize the “whats” may be owned by companies so that better realizations are always created.

No comments: