posted: February 10, 2018
tl;dr: My attempt to bust the myth of the introverted, antisocial programmer...
Those who are not programmers often think of programmers as being a bit weird. They see programmers staring at their screens for perhaps hours on end, occasionally typing rapidly or moving the mouse, and not speaking to anyone. Because of this observed behavior, programmers as a group often get tagged with labels such as: uncommunicative, introverted, loner, or perhaps even antisocial.
What the programmer is actually doing, which accounts for the observed behavior, is long stretches of deep thinking. It’s hard to describe exactly what programming is like, to someone who has never done it in any depth, but I’ll try. Working on a significant programming problem is like solving a large, complex, interconnected, multilayer puzzle, where every component can possibly affect every other component if you’re not careful. The puzzle itself is has many more different pieces than the 26 letters that can go in a crossword puzzle, or the 9 digits in a 3-by-3 Sudoku puzzle. There are actually a nearly limitless set of pieces, given the availability of other software code that can be downloaded from the Internet to help solve a portion of the puzzle. There are therefore a large number of possible solutions, and the programmer is constantly trying to choose the best one, knowing that the resulting program will ultimately be judged by others based on multiple criteria: correctness, speed, ease of future modification, ease of understanding by others.
The puzzle needs to be broken down into a series of smaller puzzles to be solved, and it may take many days to solve them all. The big picture needs to be kept in mind while focusing on one of the smaller puzzles at a time. To solve the smaller puzzle, all the layers of that puzzle and how they connect to their nearest neighbors need to be analyzed. The programmer builds a mental model of this portion of the puzzle in order to then start developing a solution for it. If a detail is overlooked it can be fatal to the overall solution, as code and computers can be absolutely unforgiving.
If I had to choose the nearest similar activity it would be writing, if what is being written is a detailed, precise, lengthy document such as a research paper or a mathematical proof. Novels which are entirely coherent and self-consistent (e.g. where an event on page 12 has impact on the storyline on page 318) would be another example. Blog posts, however, would be similar to writing only a very short program.
So when non-programmers observe a programmer, they need to realize that what they are observing is someone deep in thought, similar to observing a researcher, a mathematician, or an author. Interrupting the programmer can cause a major setback, as afterwards the programmer will have to recover the state of mind and the mental model of the problem that existed before the interruption. This is why programmers prefer asynchronous forms of communication, which can be ignored until the programmer is ready to receive communications. It is also why programmers often are late to meetings, or skip meetings: they often focus so hard on the problem that they lose track of time. It is also why programmers typically don’t keep regular hours: when they are working on a portion of the puzzle, they will often want to finish it before quitting.
Programmers don’t program all the time, and it is unfair to judge their overall personalities by how they behave when programming. Programmers have to think deeply for hours on end in order to succeed at their profession, but this does not mean that they necessarily deserve the negative labels I listed above. Programmers can be and often are talkative, outgoing, and social - just not when they are focusing on their work.