Mental Models of Programmers for Non-Programmers

· Reflection, Thoughts

Programmers are a tricky lot. We have a certain mental model of how things should work and we "hack" systems in order to make sure they fit our mental model instead of changing ourselves and our mental model to fit with existing systems. Programmers are the bureaucrat's worst nightmare -- our brains are wired to look at the rules and go "why?" and our immediate reaction to anything that's not at least optimal is "well, that's stupid".

If you have a programmer in your life -- a parent, sibling, cousin, partner, or friend -- it would help if you understood how most of programmers brains work. I would even say as far as certain kinds of people -- not necessarily programmers -- gravitate towards becoming programmers (or engineers, or any profession/occupation where it involves building systems or just rigorous analysis and design) so you may recognise these people. I know these things work really well for me so if you know someone like me it might help you a lot with your interactions with them.

Logic

First off, we have a twisted sense of logic. Anything illogical or something approaching even asymptotically the thought of being illogical cause two things to fire in our brains (or at least my brain):

We have a myriad of actual outward actions ranging from the incredulous shouting and being "rude" interrupting the logically inaccurate person, to just outright ignoring the other party. We are straight-forward like this and it's only logical for us to stay this way.

I realize that I'm painting of a very dim picture of programmers and our ilk. What matters to us in these situations is restoring (or affecting) the situation such that all is right and logical in the world. You can help us by saying something to the effect of the following:

Now we also tend to get illogical when we feel attacked and that's the next point.

In general, when having a conversation with a programmer, please try to be logical. We appreciate it.

Feelings

We are a sensitive bunch. We don't like acknowledging it but we are humans too. We are tied to the result of our labours and we treat them as children. Our projects become our lives typically and we have this somewhat illogical search for perfection -- I know, the irony is not lost on me. When you're going to say something about the following, please be mindful:

Programmers also typically do not show feelings outwardly very well. From an outsider perspective we may be in only three states: asleep, indifferent, or thoroughly incensed. See the point about Logic again -- you will notice that programmers get angry a lot because in the rare cases we do show emotion, we show the strongest and most effective one. How do you know a programmer is happy? When they're asleep or indifferent. If you notice they are incensed a lot of the time, something is definitely wrong -- probably something that's illogical.

If you want us to convey our emotion, you have to pull it out from us -- we optimise our emotion showing to the bare minimum required (unless there's something wrong or illogical). If you want, see the conundrum on Shrödinger's cat -- our emotions are in a box, and the only way to find out whether we're happy or unhappy is to open the box; that way you cannot tell whether you made us happy or unhappy by opening it.

There are ways to ask us if we're happy or unhappy and here's a few that are really effective for me:

Another thing that's important to note is that when it comes to us volunteering our emotions, do not interrupt us because it is a high-bandwidth exercise for us. If we're telling you we're happy, unhappy, angry, sad, or <insert emotion here> please acknowledge that you received the message at least.

This then leads me to the final point about communication.

Communication

If you for some reason have a programmer in your life that works on network systems (websites, distributed systems, or something else involving communicating systems) you may find that they are sometimes really engaging when communicating. You find people who work on these systems really fascinated by three things: latency, throughput, and protocol. Let me explain a little of why these are and why I think it translates to the wetware systems of human society:

There are exceptions to optimising out these things -- usually when we are idling (more on this later) we prefer to waste as much time as possible doing as little as we can. This is the complete opposite of worrying about latency, throughput, and protocol. Another exception is when we realize we are in a setting that is not optimal for any sort of hacking -- like in the presence of a huge crowd, crammed in a social setting that's unescapable (a train, bus), or when we're in non-programmable situations (like when on a date).

The thing to remember is, when you're communicating with a programmer is: content trumps delivery. This is why we prefer email and avoid the awkward emotion conveyance involved with face to face communication. We typically do not optimise for sending the correct emotion, we rather send the correct content. We tend to be blunt and direct but this is optimal in our brains -- or at least we logically concluded somehow that emotions are a waste of bandwidth (the practical limits of the amount of information we can convey in a period of time).

So when you think we're being rude or direct, chances are we're in programmer mode. There are two things you can do to manage this situation:

This communication thing usually reverts to "normal person mode" in the weekends or during non-project working hours. With that point, I lead to the last thing to recognise: we like our breaks and we like idling.

Idling

This is usually (maybe correctly) perceived as procrastination. This is however an important part of programmer routine. You will usually find us idling when:

In general when programmers take a break (or wait for their code to compile) is a good time to have conversations with us. You might find that we have a routine -- I for one like watching the news until late into the night to "switch off", and I definitely appreciate having conversation at those times instead. Another thing I do is lie in bed reading some book I've thought interesting through a device (usually my mobile phone or a tablet).

It is best if you can synchronise and recognise the idling times and make the most out of it with the programmer in your life.

Conclusion

This is a piece I've wanted to write for a long time now and I thought I might as well write it down while I was "idling". I also thought it might help some friends I know who are programmers realize how sometimes we are a little too Spock and a little less Kirk (and I submit we should be a good mix of both for good balance in our lives). Some of us are lucky that we have people who understand while I'm positive there may be a few programmers out there (and friends or family of programmers) who have very little idea in how to interact with us.

I do not claim for this to be a definitive guide, I'm just sharing my thoughts and throwing it up to the void. As with anything you read on the internet, take with a grain of salt and your mileage may vary.

Do you have any other tips for non-programmers on how to synchronise their mental models with ours? I'd love to know your thoughts on this.

Originally published at https://mikhailberis.blogspot.com/2013/04/mental-models-of-programmers-for-non.html