Over the last 15 years, through this column, I have been thinking out loud about what it means to consider software as a knowledge storage medium. Rather than a product in the traditional sense, software is better viewed as a container for the real product. What the customer buys and the user employs is the executable knowledge contained in the software. When that knowledge is complete, internally consistent, and properly maps onto a problem space, the software is valuable. When the knowledge is incomplete or contradictory the software can be difficult or even dangerous to use. Discovering a software bug is simply when a lack of knowledge is made manifest, its appearance signals an epiphany of ignorance—an event in time where something that is not known becomes obvious.
While we can consider software as a knowledge medium, perhaps we should also think of software as a thought medium—an extension of our cognitive processes. In fact, since software often contains things that are manifest not correct knowledge, it is really a place where we store our thinking, even if that thinking happens to be wrong.
So, given our increasing reliance on software to run the world, perhaps we should give some thought to thinking.
To take a simple evolutionary view, species usually develop capabilities that have some survival advantage. While most animals think, humans have a much higher degree of this capability. But why? We should avoid a teleological argument of the form: we ended up thinking because that is how we ended up. Or its corollary: if we had not developed thinking no one would be around to wonder how and why we ended up thinking. Not that these recursive views are not correct; they are just not very helpful.
The most obvious evolutionary advantage of enhanced thinking would be to give a more efficient way to deal with the world. Thinking has other functions: social cooperation, the ability to plan and forecast and the like. But if the foundational advantage is to better deal with the outside world then thinking should be closely aligned with the senses. It is through our senses that we experience the world, so it makes sense that thinking would build on this. We get hints of this when people say things like: "... that idea stinks, but this idea looks better and it somehow feels right ..." Lakoff and Nuñez have made a compelling argument for this with respect to mathematics1 but it could serve for other thought disciplines.
We cannot easily understand or deal with things unless they are "close together" either physically or conceptually. Our brains are adept at identifying or even imposing relationships that connote similarity; it is one of the fundamental functions of the brain. In fact this "like" construct is essential to our ability to reason and we have done a good job of extending this function by building whole systems, such as algebraic mathematics or the Linnaean classification of living organisms, by collecting different things together based on (our perception of) their alikeness.
The complexities of the constructs we have built for thinking, such as our ability to abstract ideas, make it appear we have moved a long way from our sense-driven cognition processes. But we still clump them together according to their proximity to like things. And we often refer to them using verbs based on our senses.
But these refer to what thinking does, not what thinking is. So what is it?
A traditional view of thinking views knowledge as being resident in some place: this person knows how to play chess and that one does not. This company knows how to build widgets and that one does not. The simplistic locational view of brain function recapitulates this and assumes that physical parts of our brain store knowledge in some static and persistent form. Thinking, particularly recovery from memory, would then be the retrieval of knowledge from those places. It is a simple model and is how we have constructed most digital computers. But it is probably wrong.
When we think of purple people who eat or are eaten the "static knowledge" view of the brain would imply that neurons that store the concept of "purple" and those that store the knowledge of "people" would somehow send purple and people messages to each other, to some central processing function, or to our consciousness. While the brain does have physical locations that specialize in processing certain kinds of information, there is no "purple" neuron, no "color" clump of neurons, and no specific area of the brain that deals with the knowledge of people, purple or otherwise.
Perhaps we should also think of software as a thought medium—an extension of our cognitive processes.
Our knowledge of purple and of people and of everything else is likely stored all over the brain and it is stored dynamically not statically. The brain is an enormous network of connections along which signals are continuously traveling. The function of neurons is to amplify and pass on these signals not to store them for later use. These messages start before we are born and they end when we die. They are active when we are reading articles in Communications and when we are asleep.
Thought—conscious or unconscious—can be viewed as a self-sustaining fractal pattern of signals. Embedded in these patterns are subpatterns that carry the knowledge of all the things we know and all the things we have known. The patterns continuously morph and refresh. Should they ever completely stop they would not restart. The knowledge carried by these patterns is like a radio signal imposed on a carrier in which is embedded many other signals.
The "strongest" of these patterns are our most conscious and intentional thoughts—those that are strong enough to be accessible to and recognized by the "consciousness" pattern. Our habits might also be strong patterns, though we may be quite unaware of them. Some patterns resemble other patterns and these similarities are themselves signals. Some signals are so weak they are almost gone. When they weaken further or are completely buried in other patterns they will be gone and we will have "forgotten." Patterns can be made stronger by continually revisiting them as happens when we practice playing a musical instrument. Patterns that are very similar to others may become conflated over time and memories merge.
We would think of better ways to build software if we better understand how we think.
Thought, like the Von Neumann architecture, uses much the same mechanisms for "data" as for "process"—for knowledge and how to access that knowledge. It is likely that some of these patterns are functional rather than factual. That is, they enable actions rather than store data; they are verbs rather than nouns. Some patterns are "retrieval patterns" that search other signals to see how similar they are and perhaps perform some organization on them. This organization may consist of:
Consciousness, as a pattern that is more aware of itself (read: able to process) than other patterns, seems to be the thing that separates humans from animals. Animals think, but they do not appear to think about thinking. This introspection pattern is likely a main element of consciousness and thinking-about-thinking is evident in the very name of the modern human, which is homo sapiens sapiens.
Software languages and designs appear to recapitulate brain function—in fact, it is difficult to see how they could be much different. We use proximity constructs in "modularization." We have search patterns and indexes and "like" constructs we call inheritance, we push and pop data into our memory as onto a stack. We refresh using constructors and destructors. We have process and data, operators, and operands. This seems quite obvious. But if software is thought—even "bad" or "incorrect" thought—then the building blocks of thought must be the building blocks of software.
Our most entrenched software mechanisms and constructs come, not from the outside world, but from the inside world. We do not have object classes and inheritance because the world is structured this way, we have them because we are structured this way. We would think of better ways to build software if we better understand how we think.
The first sentence on the first page of the first book I ever read about software development reads: "This book has only one major purpose—to trigger the beginning of a new field of study: ... the psychology of computer programming."2 I read it in 1972.
It is time to read it again, I think.
1. Lakoff, G. and Nunez, R. Where Mathematics Comes From: How the Embodied Mind Brings Mathematics Into Being. Basic Books, 2001
2. Weinberg, G.M. The Psychology of Computer Programming. Van Nostrand Reinhold, 1971
The Digital Library is published by the Association for Computing Machinery. Copyright © 2015 ACM, Inc.
No entries found