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

Reply via email to