Article Preview
TopIntroduction
Computer programming is challenging for most students (Mayer, Dyck, & Vilberg, 1986; Winslow, 1996; Costelloe, 2004). It is a dynamic and non-linear procedure. In traditional programing instruction, teachers usually demonstrate and explain static code without showing the whole non-linear programming procedure (Soloway, 1986). As a result, novice programmers often feel frustrated with the whole process of implementation and, more often than not, cannot finish a whole program by themselves. With the growing interest in computer supported collaborative learning (CSCL), it has been argued that collaborative programming would not only provide students with opportunities for interacting with peers and utilizing each other’s resources and skills but would also facilitate better learning of computer programming (Williams & Jacobs, 2004; Wu, Chang, Shieh, & Lai, 2009; Alorda, Suenaga, & Pons, 2011; Hwang, Shadiev, Wang, & Huang, 2012). Possible reasons why collaborative programming can foster problem solving and improve programming skills are many. Firstly, students can foster more ideas from observing others’ programs (Byrne & Lyons, 2001; DeClue, 2003). Secondly, they also gain experience from seeing others’ mistakes (Wei, 2013). Lee (2008) claimed that the metacognitive activities inherited in collaborative programming can foster students’ self-monitoring which can, in turn, improve problem solving abilities. Bravo, Marcelino, Gomes, Esteves, and Mendes, (2005) also showed that paired-collaborative programming activities could help students with problem-solving. Students not only can develop better problem-solving abilities, but also can create more effective programs when using collaborative programming (Bryant, Romero, & Boulay, 2005; Braught, Eby, & Wahls, 2008). Collaborative programming has been shown to help with motivation, engagement, retention, and building confidence in students (McDowell et al., 2006; Chong & Hurlbutt, 2007). Learning tools for collaborative programming must be, therefore, designed specifically and deliberately to support learner engagement (Chong & Hurlbutt, 2007). By browsing the source programs and feedback from peers during beginning stages of learning, students could gradually improve their independent coding skills through imitating peers’ programs or being enlightened by observing peers’ programs. This has been shown to be especially true for low and medium ability students (Hwang, Wang, Hwang, Huang, & Huang, 2008; Hwang, Shadiev, Wang, & Huang, 2012). Since programming involves declarative, procedural, and strategic knowledge (McGill & Volet, 1997), more adaptive collaborative learning platforms and activities should be developed to help students build different types of knowledge. Traditional programming instruction, however, focuses more on declarative knowledge.