Skip to content

High-bandwidth Communication and Pair Programming

January 21, 2021

I'm currently re-reading Paul Allen's memoir, Idea Man. He tells the story of how he and Bill Gates met through a high school computer club and began a lifetime friendship and working partnership. He describes the quality of how they would interface while working on computer problems as "high-bandwidth communication" in which they were able to verbalize thoughts that some listener wouldn't be able to follow. He gives the example exchange:

::"So then we can move this string..."
"You're right, the other thing will never happen if that's true..."::

Allen describes how they could go up the stack -- passing into different frames of reference without missing a beat. If you've ever programmed in a language like JavaScript, you know that "this" is the current context of evaluation and knowing which "this" you are dealing with at any given time determines what actions are appropriate. If you are modeling the code in your mind differently than how the computer is modeling the same code, you will probably get unexpected behavior.

So, to be able to follow along with someone else's thinking, and being able to communicate about an abstract process that you and your friend are creating, is a very special ability and is probably why Allen and Gates were so successful.

In all communication, the sender and receiver must use messages that at least one can create and at least one can decode. Typically, we assume the sender and receiver share a language structure and pool of objects (ideas) that are represented by a vocabulary. The objects that are transmitted must have some degree of isomorphic representation in each of the participants' minds so that relations between the grammar of the language and the objects behave the same way in both minds. This is what is known as "being on the same page."

So, in a abstract design process, the two participants must also be synced to a particular abstraction, and the potential moves they can make (and are likely to make) have a high degree of isomorphism, in order to communicate in the very sparse manner as given in the sample dialogue above.

The great power of pair programming is to use more than one human mind in cutting through technical work. In a standard setup, one person "drives" and the other "navigates". Switching back and forth allows each person to exercise a part of the skills. Driving is about punching in the syntax and moving around the OS. Navigating is about thinking about the structure of the program and making decisions about the organization of the abstraction. I think what Paul Allen and Bill Gates accomplished was a merging of their thinking in driving and navigating simultaneously.

If you can find a person to interoperate with at this level, this may be the greatest productivity gain of any that you can get out merely applying computing principles against the latest technology.

Hello World!