Born to share
From the moment we are born to the moment we die we are wired to connect and share everything we do. It is our connections that give meaning to our lives and they shape how we think and what we are. Even before we are born we start learning language, we learn the sounds of the language and the accent of our parents.
We come out and we are sponges for language, babies keep on running those learning algorithms making out which sound are each phoneme in a given language, as we are told in this TED Talk of Dr. Patricia Kuhl.
Babies exposed to language in the first year learn at amazing pace the sounds of the language, but the most striking is that in two weeks a baby not previously exposed to a language catches up, if a person comes to talk to him in a new language, and here is something very intriguing: it must be a person, not a television, not a radio, there must be firing of social neurons in order for the learning to occur.
But this is not the only learning that is shaped by our social interactions as we can see in another inspiring talk, this time by Professor Sugata Mitra who stumbled upon a great discovery with his experiment Hole in the Wall where he leaves a computer exposed to the street and finds out that the poor children, who had no previous contact with computers and without external assistance, are able to teach themselves all sorts of things. He explores this idea further and reports again in his next talk in his finding he observes that there must be more than one child, they must interact, even at first being wrong and advising one another wrongly, they end up building knowledge.
The birth place of ideas
But the benefit of human interaction for learning does not end in adolescence, we carry on “sinergizing” with others to produce and create as Steven Johnson explores on his Where good ideas comes from, we are nodes in a great human network load balancing ideas and knowledge and the interactions that allow the ideas to make sex are the real geniuses of the human race.
Programming is comunicating
Enter programming, one can argue that human languages are messy and ambiguous, on the other hand computer languages are clear and precise, besides you just need to make the computer understand what is said. It is easier than with humans. Right?
Computer languages are just like human languages, there are many ways to achieve the same result in a given language, more in some than in others(Perl comes to mind), specially on those with a high level of abstraction. The abundance of bugs on every program just shows how hard is to really get the message through the computer thick mind.
Having the computer to understand your meaning is just half the story, for there is maintenance, making the computer understand is never enough, unless you produce throw away software, you have to write code in an way that the non-native speakers, us humans, understand clearly the concepts intended for the computers.
On top of that, those concepts are not just something you knew all along. They are new ideas to solve the problems of the system being written, the act of writing computer programs is not just a passive activity of writing down something well known. It is a creative, engaging, challenging processes of creating new knowledge and writing it to be understood by two completely different beings.
The connection solution
Thus we have in programming the full stack, from learning what is needed to be done, how to do it and pass the knowledge around. Programing does benefit fully from keeping our social neurons firing and interacting at which pair programing excels. It provides the needed social context for the act of programing to keep our brains going, working full steam.
Programing is not the mechanic act of typing code, for that we have IDEs, what slows down to a stop development is the lack of ideas, even worse: bad ideas that creep in and if left in the system cause all kinds of misunderstandings(A.K.A.:bugs) and troubles like the time taken to understand a piece of code to fix it that will accumulate cost along a project.
Pair programing, by satisfying our social cravings, as seeing in the prevalence of social networks, reduce time spent on them, for that need is supplied in the act of programing itself. Through positive peer pressure it keeps the quality of code high for no one likes to show bad coding style. It homogenizes knowledge among the team both from the application inner works as with technical knowledge and knowledge in general.
It also builds bounds among the team and sthrengtens confidence which make people work more motivated.
Pair programing makes the endeavor of programing more humane, rises the quality of the software produced and generates knowledge. It is a very powerfull tool that works in tandem with agile values and is too valuable to not be applied even outside agile environment.