I've recently been reading Pragmatic Thinking & Learning: Refactor Your Wetware by Any Hunt, Pragmatic Bookshelf, and it has really got me thinking... (Yes, that was pretty lame. HaHaHa!)
Actually it got me thinking on "context", "perspective", "metaphors", and in particular the definition of "Pair programming", which struck me as interesting. Pair programming is a highly effective technique used to improve the productivity and quality of work generated by the pair. As Mr. Hunt demonstrates in his book, it benefits from cognitive side effects that may in fact cause a person to be a little bit smarter when working as a pair rather than when working on your own.
Here is the definition as found on WikiPedia:
"Pair programming is a software development technique in which two programmers work together at one work station. One types in code while the other reviews each line of code as it is typed in. The person typing is called the driver. The person reviewing the code is called the observer or navigator... While reviewing, the observer also considers the strategic direction of the work, coming up with ideas for improvements and likely future problems to address. This frees the driver to focus all of his or her attention on the "tactical" aspects of completing the current task, using the observer as a safety net and guide."
While that definition doesn't mention anything about causing one to be any smarter, what I find stricking is that it does mention things like "considers the strategic direction of the work, coming up with ideas for improvements and likely future problems to address", and "focus all of his or her attention on the "tactical" aspects of completing the current task" which I would quite confidently define as working smarter any day of the week.
The next thing that I find stricking is how closly it resembles a trend in software development which we call "Commercial Open-Source" . How do these two things relate?
Let's re-write the definition and only change a few of key words:
"Commercial Open-Source is a software development practice in which two entities work together on one repository of source code. One types in code while the other reviews each line of code as it is typed in. The entity typing is called the company. The entity reviewing the code is called the community. While reviewing, the community also considers the strategic direction of the work, coming up with ideas for improvements and likely future problems to address. This frees the company to focus all of its attention on the "tactical" aspects of completing the current task, using the community as a safety net and guide."
This sounds relatively accurate and makes that Pair programming is a pretty great metaphor for Commercial Open Source.
What does that mean exactly?
It might mean that while working on Commercial Open Source projects, like Liferay, the community is a little bit smarter, the company is a little bit smarter. It might mean than Commercial Open Source projects, like Liferay, are a little bit better for it.
It also means that it's in the best interest of both company and community to ensure and nurture a lasting relationship such that the pair can continue to be effective and continue to be smarter.
Until next time, let's all get smarter together!

