Cognition is the research term for “the process of thought“. Usage of the term varies in different disciplines; for example in psychology and cognitive science, it usually refers to an information processing view of an individual’s psychological functions. Other interpretations of the meaning of cognition link it to the development of concepts; individual minds, groups, and organizations.

Cognitive space uses the analogy of location in two, three or higher dimensional space to describe and categorize thoughts, memories and ideas. Each individual has his/her cognitive space, resulting in a unique categorization of their ideas. The dimensions of this cognitive space depend on information, training and finally on a person’s awareness. All this depends globally on the cultural setting.

When understanding software we need certain types of cognition spaces.  In book Symbolic Analysis for PC the spaces are named:

  1. The most abstract space is Concept (an unlimited definition for a thing).
  2. The next concrete space is Context (a situation)
  3. The next concrete space is Architecture slice (high level module with its dependencies and attributes)
  4. The concrete space is Slice, which refers to symbols (part of program).

A typical piece of software (slice) can be modeled upwards in a person’s mind using these cognitive spaces. There is a certain meaning for it to be understood (concept), it have some ways to be used (context) and it can have some extensions to the architecture implementation. It is the responsibility for the developer and maintainer to catch this information, but tools can be useful in order to shorten that time.

An analogy between topological understanding (see figure) and software understanding is clear.