Mental Models
A mental model is an abstraction about how someone or something works. A reflection of a real thing that happens in our minds.
For example, my mental model about why trees’ branches go up instead of horizontally:
Trees grow their branches up looking to maximize the sunlight they receive, so that they can get more energy from the sun to live.
Sometimes, mental models are a wrongful explanation of how things work:
There are little dwarves inside every computer that make it work.
Sometimes, wrong mental models are just fine, specially to explain systems that are too complex:
The Bohr model is a relatively primitive model of the hydrogen atom. As a theory, it may be considered to be an obsolete scientific theory. However, because of its simplicity, and its correct results for selected systems, the Bohr model is still commonly taught to introduce students to quantum mechanics or energy level diagrams before moving on to the more accurate and complex theories.
How can my model of human agency be described? I ask myself this question because I think it should be present epistemically in any moral discussion. I understand that my model of human agency might be wrong. In particular, I think it’s very simplistic and hyper-rational.
Human beings have:
- a mental model (conscious or unconscious) of how the environment works
- a set of resources available to them
- an ability to perceive the state of the environment (although incomplete)
- a set of needs, evolved to serve their genes (nature), and influenced by memes (nurture)
- the ability to express needs in form of requirements
- the ability to act on their environment with the prospect of meeting their requirements
The ability to act allows humans to transform needs into requirements based on their mental models. They combine requirements, resources, perception to plan curses of actions.They decide on the best curse of action, interacting with the environment. They observe the outcomes of their actions, and also other environmental changes unrelated to their actions (“changing conditions”). They update their mental models based on the outcomes and new information.
I believe that when human’s mental models closely resemble how a computer actually works, magic happens. How can we create a way of programming and interacting with computers that works better with the above presented mental model of human agency?
Expressing Intentions
A key aspect of computers better and more efficiently supporting the wants of human users is, for sure, the ability for computers to understand human intentions. We can work on this on the two sides of the problem: improving the tools for humans to express themselves, and improving the pattern recognition mechanisms of computers.
Recently, with GPT-3 being out there, we’ve advanced quite a bunch on the pattern-recognition part. Let’s work on improving tools for humans to express ourselves to computers and to work together with them better. Some random ideas on what this expressivity needs:
- There needs to be some kind of inherent transparency on how the computer is thinking and/or executing the orders of the user. Smalltalk did this very well early on, by having a very transparent interface that you could click to see and modify how it worked.
- “If you see something, say something” – computer should let the user know how it is interpreting their orders, and maybe predict or suggest alternative courses of action.
- That the computer has some capability for agency itself, but the human needs to understand it – so the computer must be guiding the user through its execution capabilities, maybe through clarifying and double-checking that the user understands what the computer is about to do.
- Transparency into how the computer will actually execute, before it does so, for example by checking the source code, or signaling dangerous operations that might come.
- The ability for the user to “teach it new tricks”. New tricks take the form of new code that the user inputs to the system, with some definition (maybe through a discussion with the computer) about how the code is useful and for what objectives.
- The ability for the user to define “abstract entities” and for the computer to have a storage mechanism that more likely resembles that fuzzy memory of humans.
- Access to the same corpus of data for human and computer. Computer should be able to know something about the user, in order to customize the experience. A system like this should be highly personal, for privacy concerns that might arise.
- Inference of behavioral patterns when utilizing normal tools. For example, letting the computer know that one is about to do a repetitive task, and having the computer understand the key elements of that repetitive task, so the user can trigger this “macro” later on.
How do you trust your data and code?
For a while now, my main problem as a developer has been a cognitive dissonance between my mental models and the code that I end up writing. I want to explore the possible ways forward for a system that allows me to augment my understanding of how computers work. These thoughts are heavily influenced by similar quests for better machine-assisted human action, like https://futureofcoding.org/catalog/, https://dynamicland.org/, and https://malleable.systems/.
Accessing Data
A way of looking at programming is that it’s about making data visible. What constitutes relevant data? What is it the operator of the computer wants? I’ll pose a conjecture:
The distinction between the programmer and the user, compile time and run time, and the inability to change and inspect the mechanisms that are at work are the enemies of useful augmentable and malleable systems.
In this context, a normal web/mobile user gets this relevant data in the form of feeds, forms, pages, and views of conversations.
Cheers,
Claude