Dual Programming: Collaborative Learning of Computing
It has been long recognized in introductory computer science courses that students working in pairs are more successful than students working independently. The most common and successful model for such collaborative work is Pair Programming. In this model the pair shares one computer with one student acting as the "driver" writing the code and using the computer, and the other partner becoming the "navigator", checking the work of the driver and suggesting ways to complete the programming exercises. The partners regularly switch roles so that both share the responsibility for the work. While this might be an excellent model for college students there are some key features that would be problematic in a K-12 setting. In particular the student filling the role of the navigator is likely to become disengaged with the work and it is very easy for one student to dominate the partnership. Because of this it is recommended that a slightly different model called Dual programming be implemented.
Dual programming is a collaborative learning technique pioneered by the UC Davis C-STEM Center and its K-12 partners. Using dual programming two students work together, each with their own computer to complete a programming assignment. Both partners must have completed an assignment before either one is allowed to move on to later exercises. As they are working, partners compare their source code, discuss the differences, and support each other in the debugging process.
By making these simple adjustments to the pair programming model, dual programming maximizes the amount of time that each student spends engaged with the computer. This in turn enhances students’ ownership of the work they complete as well as individual accountability. Together these elements make it more likely for each student to attain a higher level of content mastery, while at the same time maintaining the benefits of increased confidence from their partnership as well as improved work quality. In addition partners are not only seeing examples of another student’s code, but actively engaging in critiquing one another's work.
In order to maximize the benefits students are placed into heterogeneous groups that can be dynamically adjusted. This allows groups to be modified should a particular partnership prove unsuccessful. Such groupings are beneficial to both partners as students of differing skill levels are equally capable of recognizing troublesome syntax errors and provide an extra level of security to each other's coding process. Additionally, heterogeneous grouping provides a solid scaffolding structure for students who need such support.
Dual programming has the ultimate effect of increasing student confidence, accuracy and understanding. Equally important, the ability for students to rely on each other to find and correct each other's errors enables the teacher to focus their time on student teams that are struggling with the content.