Abstractions are not generated in an abstract way
[or: Abstractions are not born abstractly]
Being in the software research and business for about ten years now, and while trying to invent and build flexible software architectures, one (meta-) idea is always recurring in my mind: That you need to have enough concrete input in order to produce an abstract output.I am, of course, referring to the development of software engineering abstractions.
While looking at the history of maven earlier this morning, I was delighted to come across to this saying, attributed to Ralph Johnson and Don Roberts:
People develop abstractions by generalizing from concrete examples. Every attempt to determine the correct abstraction on paper without actually developing a running system is doomed to failure. No one is that smart. A framework is a reusable design, so you develop it by looking at the things it is supposed to be a design of. The more examples you look at, the more general your framework will be.
How well put, really! You cannot just develop abstractions directly, unless you talk directly to God, if you allow me to exaggerate a little.
It is generally accepted that abstractions are used to reduce software complexity. In my opinion that is only one part of the truth or, to be more precise, it does not reveal the essence. I believe that the real essence of abstractions is that they allow you to view the structure (or “meaning”, if you prefer a rather philosophical tone) of things in a clearer and deeper way. And this is what leads us to first understand and then deal with complexity.
And since I am in the consulting business, I cannot but comment on the fact that some people find it very hard to grasp the whole process of constructing abstractions and/or the domain a particular set of abstractions can be applied in. I wouldnot want to elaborate on this, at least not for now, but I have the feeling that they just do not get it. In my opinion, they are either under-experienced or under-educated. I would definitely recommend a little science history reading