Raise your level of abstraction
Based on some recent discussions and thinking* around the concept of abstraction, I had a brief summary, it is including three key points as follows (see the figure):
In addition, the abstractions may be appeared as some models that defined explicitly, or in some other forms.
Do you agree these opinions?
* More explanation see my essay Abstraction (III) Make Long Story Short, and the part I, part II. Some discussion on this site at Is Software Abstraction of Real World? and Note on Languages and Abstraction.
Yes, I agree.
Let me add some thoughts to your observation. I think there's a difference in both abstractions.
The App Domain abstractions are primarily rooted in the runtime of the application: given a common business software, it is linked in various ways to the real world to be useful (it's a different story with e.g. simulation software). These links necessarily result in a "mirror" of the real world in the software. This mirror can be considered as the software's world view. Naturally (since it does not and cannot reflect the complete world) it is an abstraction.
In contrast, the abstractions for IT domain are only used by us programmers to be able to handle the software. At runtime (after all transformers and compilers did their work), only bits & bytes are left, these are not abstract anymore. It's a good question if languages for interpreters are to be considered abstractions - I tend to say "no", since from the persepctive of the interpreter there's not really something abstract, but just precise instructions, and the abstract meaning is still for us humans, but one may disagree here.
Now what about ontological models? Aren't they used with software, too? I think yes, they do, but they play different roles, which have to be carefully distinguished. One role is: they discribe the real world. Another role is, they can be used to describe a software. But this is only because it happens to be economical to have more or less isomorphic relations between ontological model and system model (occam's razor, easiness of adoption), since the system model is (obviously) correlated to that mentioned "runtime mirror world view" which in turn is (obviously) correlated to the real world.
It's a really interesting question whether software uses abstractions, or whether it is us - the programmers - who use the abstractions and build them into our systems and rely on them. Anyway, the difference is possibly a little too philosophic. Let's just define that software uses abstractions for the considerations at hand here. ;-)
...which leads to a scenario where software is made of cooperating agents, which cooperate among themselves as well as with human agents. All agents - human or machine - rely on an (necessarily abstract) world view to interact with their environment. In this scenario there's no difference between app domain, business domain or alike. There are just agents (human/machine) and entities (real world objects/data).
Additionally, there is a planning level (intentionally avoiding the term "model" here) - it contains (well) models of software to build, of people and work to be organised and maybe of real world things to interact with (e.g. construction plans for machines).
Does this make sense?
>It's a really interesting question whether software uses abstractions, or whether it is us …
- In my opinion, the answer is: both. Generally, they could use different abstractions in different ways at different abstract levels, but they could also share the same abstraction.
Perhaps, it's somewhat difficult to recognize an instance of software uses some abstractions, but there are many of the supports to it. In some last discussions, it was, in fact, recognized that an abstraction could be an non-cognitive entity which is had/processed (stored, accessed, ...) in a computer.
It is also consistent with the general usage of certain abstractions in our field, such as for models. (It seems no one denies that a model is an abstraction, is it?) A MDE tools uses a model to generate code; A virtual machine executes/interprets a model to accomplish certain task, which are the case of “using models”. And, I think, an instance of software uses abstractions is a quite ordinary thing, as well as a person uses abstractions to thinking, though they may be at different abstract levels, and in different ways.
>...which leads to a scenario where software is made of cooperating agents, which cooperate among themselves as well as with human agents. ...
- This is an advanced scenario (though I prefer “actors” instead of “agents”), but in this discussion I want to say that, the machine could use abstractions (models) in a lower level, such as plays a tool that only respond to human's input.
>Additionally, there is a planning level ... contains (well) models of software to build, … Does this make sense?
- Of course, this is somewhat closed to some my imagination... ...what ever, I think we still needs clarify many of the basic issues, from what are models, how models work...
To complete the picture: there's a third abstraction/world view, located in the people's minds who are doing the business and who are using the software, looking at the UI, interacting with real world and data. Sentences like "...you are already in our system...." demonstrate this nicely. I hope it's actually not me myself who's in the system, but obviously from the perspective of the user his abstraction of my real world avatar and his abstraction of the system data representing me do not necessarily differ.
And again, for the sake of usabiltiy, common understanding and economics all these abstractions should be more or less isomorphic. In fact, the purpose of languages to create a common understanding and to enable interaction by communication get's beautifully in focus here.
I'm writing a reply to you last comment and see this. It IS my complete picture for models and modeling (with computing): all the entities and its models are appeared in three spaces, I call them as Physical Space, Conceptual (or conscious, mind, I'm not sure which one is the better) Space, and Computing Space. More comment later... :-)