Two engineers. One Computer. You drive while your colleague navigates; she’ll focus on setting the direction of the code while you execute. After an increment of time you’ll trade places. Through this back and forth you get experience writing code. You are talking out loud about the logic behind your choices and the decisions you’re making. And you get experience directing problem solving (through high level direction and strategic questioning).
Pairing helps developers to transfer skills and spread knowledge. You get to play the role of the teacher, and you get experience providing feedback to your peer on their decision making. The value of this conscious and deliberate feedback cannot be underestimated. It helps both the navigator and the driver to gain a better understanding of abstract concepts, syntax, and semantics. Pairing also helps to develop bonds among developers, as they collaborate on a project and help one another advance their skills. In fact, research shows that paired programing makes the perceived difficulty of learning to program fall dramatically.
How can this model be applied to the classroom?
Imagine a teacher assigned a video from Khan Academy on scatter plots for homework. Every student would go home, watch the video (maybe take some notes) and be prepared for class the next day. At the start of class students would be paired off to answer a CK-12 problem set. The pairs would work off of one computer, and take turns answering questions. They’d have to talk out loud, explain their decisions, and work through the problem together. The teacher would be there to help pairs that get stuck, and could teach concepts to the entire class that seem to be common sticking points.
School would be more social, and students would get to direct their own learning. In all of my time spent working with schools and teachers I haven’t seen anyone apply this in the classroom. And I have to wonder why.