When most people think of computers, they think of machines that are always logical, never forget, always follow precise instructions, react identically to identical inputs, and have no emotion. From this perspective, it sounds absurd to claim that humans are computers. Humans have drives and wills, computers don’t. Humans have emotions, computers don’t. Humans understand and empathize with each other, and computers don’t.



As a skeptical coworker put it, “if you run the same code twice on the same inputs, you get the same results. With humans, asked to make the same choice twice, even things like hunger can affect the outcome.”



Whenever you’re asking whether things in category X are also in category Y, it all comes down to definitions. This is why I’m normally uninterested in statements like “people are computers” – it all depends on how you define things. If computers are, by definition, metal machines that follow mathematical instructions, precisely and deterministically, then no, clearly people are not computers.



So what definition am I using, and why do I think this definition makes sense?



Flows of Information

My definition of computer is “an element in a flow of information.” Anything that receives information from the world, reacts by modifying its internal state, and emits information to the world, is a computer. This is an incredibly broad definition, almost to the point of being able to describe anything.



I use this definition because I think it captures what’s important when we want to reason about computer systems – we are reasoning about flows of information. The specific properties of those information flows, and the physical objects they flow through, can vary wildly.



If you don’t like this definition, try to come up with a better one that doesn’t exclude things we know to be computers. Any mention of instruction sets rules out analog computers. Any mention of ‘machine’ or ‘device’ puts you in a position where you can’t use the word ‘wing’ to describe the commonality between birds, airplanes, and mosquitos. You could build a distributed system out of humans exchanging paper messages, if you wanted – and yes, the cap theorem would apply. It wouldn’t be very reliable, or consistent – but these defects can be described in purely computational terms.

So yes, I totally agree that humans are very different from modern digital computers. However, I think it makes sense to talk about these differences in terms of how humans compute. That is, information flows through humans will have different properties from information flows through modern digital computers. In both cases, though, the important results are driven by flows of information.



Modern digital computers aren’t the only type of computer there is. Most computers are networked, and networks of computers behave quite differently from a single computer. Networked systems of computers do forget things, and they aren’t always predictable. It’s reasonable to state that, in the exact same situation, a network of computers will behave identically. It’s also completely unreasonable to expect a network of computers to ever be in the same state twice.



The number of possible states in a computer network is massive, and tiny changes in things like ‘the temperature of the metal in a network cable’ can affect outcomes at the system level. I think the same is true of people: if you put a person in exactly the same situation, they will behave identically. But ‘exactly’ in this case requires a description of every single atom in their being and their surroundings. So it’s completely unreasonable to ever expect a person to be in exactly the same situation twice – especially given that human brains change as they are used.



In other words, computer systems aren’t always predictable or deterministic. Individual digital computers are predictable and deterministic, but computer systems aren’t. When I say “People are computers”, it might be more fair to say they are “computer systems”, but this just seems redundant since everything is a system anyhow.



If you don’t like the definition, don’t worry about it. My goal isn’t to change anyone’s definition of what a computer is. My goal is to show how the skills and techniques we use for reasoning about computer systems can also be used to reason about people.



So yes, humans have drives, wills, and emotions, and computers don’t. All of those phenomena described above can be characterized as flows of information. Let’s work with one simple example.



“People are sometimes logical, but often emotional, while computers are always logical.”



What are we really talking about when we say “people are emotional, and not always logical?”

Emotion and Logic, as Flows of Information

Our understanding of brains tells us that logical decision making is done in the prefrontal cortex, emotions are processed in the amygdala, and that these two systems inhibit each other. When we feel intense emotion, and the amygdala is firing, activity in the prefrontal cortex is inhibited. This inhibition of the prefrontal cortex means that our actions will be what comes to mind instinctually, rather than the end result of a rational thought process comparing choices and weighing outcomes.



In other words, the idea that human beings are emotional and not always logical is describing a reality based upon different flows of information leading to different results. This widely held idea is describing a specific property of how our brains process and respond to information. This way of responding to information is different from most modern digital computers, it’s true. Yet in both cases, getting the outcome we want requires reasoning about flows of information.



Since all of our mental tools for debugging computer systems are really just generic tools for modeling and debugging information flows, it’s perfectly reasonable to use these same mental tools to debug our own minds, as well as our interactions with other minds.



Much of work as a software engineer consists of trying to get the right data in the right place, at the right time. I often compare it to a very elaborate form of plumbing. Sometimes, the problem is that you have the wrong data, or you aren’t sure what the right data is. This last part is more of an issue the higher you go up the control stack – err, the management hierarchy. Very often, however, it’s a (relatively) simple matter of putting in the plumbing to connect an existing data source to a new place where that data needs to be consumed.



I think many human problems – especially those problems dealing with our minds, and mismatches between how we’d like to behave, and how we do – are similar.



Consider a very human situation: When I argue with my wife, I can say hurtful things. I don’t want to do that. It’s not logical to say these hurtful things, because it does not get me the outcomes that I want. I know saying these things is not a good idea, but in the heat of the moment, pain and anger can overwhelm logic. As a result of the inhibition of my prefrontal cortex, I’ll say angry or hurtful things. I’m human, remember? Not always logical. I might say something hurtful or mean that I know won’t make things better. That’s a very human situation. It’s messy, it’s emotional, and it deals with relationships as well as what really matters in life. It sounds totally alien to come along and claim there’s a computing solution to this problem, right?



Get the Right Data to the Right Place at the Right Time

Well, the solution to all computing problems is to make sure the right data gets to the right place at the right time. Fortunately, I view myself as a computer system. There is no need for legacy techniques like shame and guilt, with their highly questionable success rates. I just need to get the right data to the right place. That’s all.



In this case, the right data is the fact that my relationship with my wife is more important than anything we might fight about. The right data is the fact that my wife does so much for our family, and works so hard to provide for us. The right data is that I would have killed for the chance to get back with her, after we broke up, and before we got back together. The right data is that younger me’s, from the time period we were apart, would have done anything to get to an outcome a tiny fraction as good as the life I have now. The right data is the fact that in the past, on more than one occasion, I’ve come to regret things I said when I was mad. The right data is the knowledge that my children will see how I treat my wife, and I want my children to see their parents modeling a conflict resolution approach that works, and makes them feel safe. All of these data have a higher priority than expressing the hurt I feel in that moment.



So if I don’t want to say hurtful things when I argue, I need to make sure the right data is in the right place at the right time. The right data are listed above. The right place is “in my conscious awareness”, and the right time is “when we are having a fight.”



There’s a system I have root access over, behaving in ways I don’t like: words come out of my mouth interface, travel through the air, and are received by the eardrums of the woman I love. She receives whatever pain and anger I have transmitted. And for some damn reason, sharing pain through the wrong interface just amplifies the pain at the receiver end. The net pain in the world has increased, slightly, due to my poor choice of words. The poor choice of words is ultimately due to my failure to get the right data to the right place at the right time.



There are many possible fixes here. Each fix is ultimately about getting the right data, to the right place, at the right time. Here are two.

Fix One: Practice Regular Gratitude

The first technique is to frequently practice gratitude, so that gratitude becomes habitual. Our brains change over time, to make it easier to activate thought patterns that we frequently activate. This means that performing a thought pattern makes that thought pattern easier to perform again in the future. Every time I tell my wife how often I appreciate her, and every time I do chores or nice things for her, I’m doing the plumbing work necessary to get the right data, to the right place, at the right time.



Deterministically, in the moment of the fight, the outcome might be preordained. The outcome might be predictable in advance. The point of apologizing is to transmit the fact that I know I screwed up, and that I will work to improve. The specific work I can do to improve is to practice the correct flow of information, repeatedly, until neuroplasticity makes it so that thoughts of gratitude are like a good luck charm in my back pocket: all I have to do is reach, and they’ll come up easily, with effort. The hard part is remembering to reach. That’s where fix two comes in.



Fix Two: Daniel Tiger Algorithm

Daniel Tiger is an incredible television program for kids, based upon a character from the show ‘Mister Rogers.’ Almost every episode features a song or jingle, usually in the form:



“When (bad emotional signal is detected), (execute this procedure)”



This is interesting in part because it’s similar to a pattern-matching computer language. There are many computer systems that feature rules engines, based upon matching inputs to a pattern, and then performing some action when the inputs match. The entire Daniel Tiger program could be viewed as a database of trigger-action pairs, formatted in a delivery mechanism suitable for a human toddler’s cognitive architecture. Of course, I could say a lot about media and how it relates to people being computers. I plan to do that in future blog posts.



In this case, the relevant trigger-action pair is:



“When you feel so mad that you want to roar, take a deep breath and count to four.”

The Daniel Tiger Algorithm

This fix is targeted; the idea is to get you to notice when you’re mad, and then take actions to mitigate that feeling at present. Singing a song like this, and practicing it, causes you to get better at noticing when you’re angry. Taking a deep breath helps direct your conscious attention to your body, and the outbreath activates your parasympathetic nervous system, which has a calming effect.



Practicing the Daniel Tiger Algorithm thus gets relevant data – both awareness of your anger, and a process for mitigating that anger – into your conscious attention, when it needs to be there to resolve the problem. When I’m taking that deep breath, thanks to the hooks implanted by Fix Two, I can pull up the gratitude data, which is much easier to do because of Fix One.



Both of these techniques can help anyone improve their relationships, and both of them are a form of getting the right data to the right place at the right time. Both techniques can be explained entirely in terms of modifying information flows.



So when I say, “people are computers”, what I’m really saying is “there is utility in thinking of people as computers. Insights and techniques we have developed to reason about computers are also useful when reasoning about people.”



It’s a way of saying “we can reason about our own minds, and each other’s minds, just the same as we can reason about computing systems.” Saying “people are computers” is a way of saying – “There is no magic here. Just cause and effect.” It’s true that we don’t know everything about how our minds work, but we know enough to make ourselves far happier and healthier than we are today.



Lest you think I don’t like magical thinking, and want to fill the world with soulless automata, consider: What could be more magical, more wonderful for the world, than techniques for improving the quality of human relationships, techniques that work, even for insanely logical people who insist on having all the terms defined please, in terms of physics, please, techniques based upon reason and cause-and-effect relationships? Because that sure as hell sounds like magic to me.

