Author:
(1) J. Walker Orr, Electrical Engineering and Computer Science, George Fox University, Newberg, OR, 97132, USA ([email protected]).
Table of Links
Abstract and 1. Introduction
2 Literature Review
3 Approach
3.1 Problem Structure & Dynamic Scaffolding
3.2 Informal Assessment & Feedback
3.3 Pair Programming Dyad
3.4 Course Structure
4 Discussion
5 Conclusion
6 Acknowledgements and References
Abstract
This study examines the adaptation of the problem-solving studio to computer science education by combining it with pair programming. Pair programming is a software engineering practice in industry, but has seen mixed results in the classroom. Recent research suggests that pair programming has promise and potential to be an effective pedagogical tool, however what constitutes good instructional design and implementation for pair programming in the classroom is not clear. We developed a framework for instructional design for pair programming by adapting the problem-solving studio (PSS), a pedagogy originally from biomedical engineering. PSS involves teams of students solving open-ended problems with real-time feedback given by the instructor. Notably, PSS uses problems of adjustable difficulty to keep students of all levels engaged and functioning within the zone of proximal development. The course structure has three stages, first starting with demonstration, followed by a PSS session, then finishing with a debrief. We studied the combination of PSS and pair programming in a CS1 class over three years. Surveys of the students report a high level of engagement, learning, and motivation.
1 Introduction
Pair programming is an eXtreme programming (XP) methodology (Beck, 2000) that has seen some use in industry (Hannay et al., 2009). It involves two programmers working together on a single problem and computer with one programmer taking the role of a “driver” and the other in the role of “navigator.” The “driver” operates the keyboard and directly writes the code while the “navigator” observes and asks questions, critiquing and refining the code and its design. The “navigator” is not passive, they watch for bugs and defects, think of alternative designs, and look up related documentation and resources. Though the effectiveness of pair programming is mixed (Hawlitschek et al., 2022; Hannay et al., 2009), in some cases it has been shown to produce higher quality code faster than solo programming (Williams et al., 2000). The intention is that pair programming will help developers working together catch mistakes and defects much faster than on their own.
For education, pair programming is compelling because it fits into the paradigm of apprenticeship and distributed learning, the idea that “Knowledge is commonly socially constructed, through collaborative efforts toward shared objectives or by dialogues and challenges brought about by differences in persons’ perspectives” (Salomon, 1997). Further, it has been shown to increase student satisfaction, reduce student frustration, improve student’s tendency to persist, and give students a sense of self-efficacy (Williams and Upchurch, 2001). The ICAP framework describes four modes of student engagement and behavior, identifying the interactive mode as producing the highest level of student cognitive engagement. Interactive modes of learning are believed to produce deep, transferable knowledge (Chi and Wylie, 2014). Pair programming fits within ICAP’s definition of interactive learning and hence has the potential to produce robust, transferable, conceptual learning. Recently, Hawlitschek et al. (2022) conducted a literature review arXiv:2311.01693v1 [cs.CY] 3 Nov 2023 and meta-study of pair programming in education concluded that pair programming is important and effective for students, especially beginners, but effective instructional design was missing. Hence pair programming has been shown to have a lot of potential as a teaching methodology but the details of how to implement it correctly in a classroom has yet to be discovered.
We propose that the solution to effective instructional design for pair programming in the classroom has been found in the Problem Solving Studio (PSS) learning environment (Le Doux and Waller, 2016). PSS was designed to teach biomedical engineering students to solve complex problems without having to resort to rote memorization of procedures and algorithms. Students work in teams of two to solve ill-defined problems in a public space, enabling instructors to provide real-time feedback as they progress. A key feature of PSS is dynamic scaffolding, a targeted adjustment of problem difficulty to keep students challenged but not discouraged. By increasing or decreasing the difficulty on a per-team basis in real-time, as many students as possible can be kept in the zone of proximal development. A lecture-based course will have a difficult time matching the variety of levels that students are at since the same lecture content and delivery are communicated to all the students. There is good evidence that PSS improves students’ conceptual understanding (Le Doux and Waller, 2016).
PSS and pair programming are a natural fit and the combination of the two match the objectives and pedagogical needs of CS1 courses. For this reason, this study specifically addresses the adaptation of PSS in conjunction with pair programming for CS1 pedagogy. Two key objectives of a CS1 course are to teach algorithmic problem solving skills and a specific programming language. One of the challenges for expert instructors is that both problem solving and language knowledge is so deeply ingrained that it is second-nature to the instructors. Paradoxically, this high level of understanding means instructors often have a difficult time communicating this knowledge since it is taken for granted (Le Doux and Waller, 2016). Further, student ability and background varies significantly in CS1 courses. However, the synthesis of PSS and pair programming addresses these challenges and objectives directly, by giving students a hands-on opportunity to develop problem solving and programming language skills. PSS with the addition of pair programming, teaches algorithmic problem solving through a cognitive apprenticeship environment (Collins et al., 1987). Students learn from each other and are also guided by the instructor or other teaching assistants. Peer learning is helpful since students who are at similar levels of ability have recent experience with similar problems. This means that they are often better at communicating those solutions since they remember the details and particularities of both what they found challenging and how they overcame those obstacles. Pair programming’s ability to give rapid feedback helps students learn the syntax and semantics of a programming language. Further it promotes pair collaboration and problem solving. Pair programming has been shown to help notice programmers solve problems can not handle on their own (Hawlitschek et al., 2022). The combination of PSS and pair programming creates both an apprenticeship and peer learning environment in which students develop both problem solving and programming language skills.