On Computing & Trusting Information

A mental model of computers, humans, and interactions between them for the near future.

Mental model

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.

Let's work with the following mental model for human agency (it might not be super accurate, in fact, it's rather simplistic and wrong in the sense that it assumes a very rational human):

Human beings have:

This is a very mechanistic way of thinking about humans. It's almost like thinking of humans as computing machines, which, in some sense, they are (there's a bias regarding modeling human behavior as the most advanced piece of technology -- I remember an anecdote about how in the 1800's, some people thought of the brain as multiple little connected steam engines).

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:

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 systems.

In this context, a normal web/mobile user gets this relevant data in the form of feeds, forms, pages, and views of conversations.