I would like to thank all who replied to my previous post, regarding complexity.
As I said in that post, my interest in cognitive psychology is motivated by software engineering (SE). I agree that abstraction, as well as language/tool support for it, is generally considered the way to tackle complexity. There is even a workshop dedicated to the topic (The Role of Abstraction in Software Engineering Workshop). However, there seem to be very few studies of abstraction from the side of cognitive psychology. I've also tried, without much success, to find out material on what cognitive psychology has to say about abstraction as a mechanism of the human mind. In particular, I'm interested in studying the connection between abstraction and the hierarchical nature of mental models. It may be useful to distinguish between abstraction and generalisation, though I'm interested in both. I refer to abstraction as an information filtering process that extracts the properties of an object according to some focus, leaving aside all properties deemed not relevant to the focus. In SE, this seems to be often confused with generalisation, an information increasing process through which information about a number of objects is collected and used to yield a single description that applies to a larger set of objects. >From what I could learn, both abstraction and generalisation seem to be ways to "navigate" through hierarchical structures of concepts. These are useful to compress information in an efficient way: a concept at one level can subsume all concepts at lower levels (I suppose this is abstraction). In addition, different levels of the hierarchy support different inferences. An inference about a concept at one level does not necessarily apply to a concept at a more abstract level. This seems to be related to generalisation. Representations of the world tend to be set-subset hierarchical structures, one example being the taxonomy proposed by classical physics, which decomposes objects into molecules, atoms, subatomic particles. Traditional programming languages are another example, by organizing the modules into hierarchical structures, according to a given decomposition criterion. In fact, the choice of decomposition criterion defines the programming paradigm. For instance, a very successful decomposition criterion is that of object-oriented programming (OOP). However, no single decomposition is adequate for problems and systems: some concerns do not align well with the chosen decomposition. In the case of OOP the so-called non-functional requirements are cause of problems. The "more than hierarchical" nature of problems in modern SE provides the motivation for my specific field of research - aspect-oriented software development (AOSD). AOSD focuses on systems and problems whose concerns map to more than one decomposition criteria. When a problem or system is "more than hierarchical", i.e., includes concerns that map to distinct decompositions, not all concepts can be cleanly represented within the modules provided by the chosen paradigm, whatever that is. AOSD strives to obtain and manage modularity in the presence of such complex problems and systems. One thing that I recently realised is that though it is true that the human mind tends to build hierarchical structures, it also able to manage _multiple_ hierarchies, by relating a given concept from one hierarchy to a concept from a different hierarchy. This seems to happen when we deal with different subjective views of the same concept. One example is the concept of tree, which may interest a woodsman from the point of view of its height, caloric consumption and yielded fruits. The woodsman may also build a hierarchy of trees based on this criteria. A tax assessor, by contrast, may approach the concept of tree from the point of view of estimated value, tax value and cost of cutting it down. The tax assessor may build a different hierarchy of trees along these different criteria. The human mind seems capable of taking a view of a concept and polymorphically switch to another view of the same concept, and proceed "navigation" from that point, along the different conceptual hierarchy. Unfortunately, most programming languages do not provide support for such kind of "multi-dimensional polymorphism". My aim is to have a more precise and complete notion of mental models and its capabilities and limitations, in the hope of using this knowledge to build a model to which programming languages and paradigms can be assessed. Thanks for any pointers, mpm -- Miguel P. Monteiro | cell phone +351 96 700 35 45 Departamento de Informatica | Phone +351 21 294 8536 ext. 10708 Faculdade Ciencias e Tecnol.| Fax: +351 21 294 8541 Universidade Nova de Lisboa | URL: http://ctp.di.fct.unl.pt/~mpm 2829-516 Caparica, PORTUGAL | Skype: miguel.p.monteiro
