Introduction

In modern society, computer programming has been emphasized as a pivotal digital competency and a desirable skill for a workforce whose purpose is digital transformation (Law et al. 2018). Unfortunately, introductory programming learners (subsequently referred as novice programmers) customarily face learning challenges (Kwon 2017; Prather et al. 2018; Veerasamy et al. 2016; Rahmat et al. 2012) grounded from individual differences such as programming aptitude (Harris 2014) and mathematical ability (Delsika Pramata et al. 2018), and non-cognitive factors such as motivation (Kori et al. 2016), attitude (Bringula et al. 2012), and emotions (Bosch et al. 2013). This is in addition to the default perception of newbies that learning programming is rigid, difficult, and sometimes boring (Katai 2015; Pendergast 2006). Consequently, the knowledge delivery system of computer programming education has become a significant and challenging issue in the education sector (Brito and de Sá-Soares 2014; Krpan et al. 2015). Therefore, educational leaders have attempted to develop policies and teaching strategies to overcome these problems from integrating programming courses within compulsory education to utilizing various pedagogical approaches.

Despite these efforts, there are still empirical evidences showing that teaching and learning programming languages remains a defiant challenge (Barr and Guzdial 2015; Sáez-López et al. 2016). As such, researchers have recommended to integrate proper teaching strategies to overwhelm the presence of serious impediments to the achievement of learning goals and eventually encourage learning performance improvements in programming courses (C.-Y. Tsai 2019; Rahmat et al. 2012; Chang et al. 2012; M. B. Garcia et al. 2019; Annamalai and Salam 2017). Among the suggested teaching strategies that experts recommend (Sarpong et al. 2013), educators mostly follow individual learning (e.g., teacher-centered lectures and individual activities) while group learning is the under-researched pedagogy. Although there is an existing research on group learning of introductory computer programming (Tobar et al. 2011), it is only focused on the proper formation of groups grounded on collaborative learning technique. Researchers have also established that collaborative learning is different from cooperative learning (Sawyer and Obeid 2017) in such a sense that the former is about students being responsible for their individual learning to be shared in the group while the latter is about structuring positive interdependence and individual accountability. In traditional group works, the "if you succeed, I lose" mindset is common among members who compete with each other within the group. However, in cooperative learning group works, each member believes that they cannot succeed unless the other members of the group succeed ("If you win, I win"). Therefore, it is still unclear how cooperative learning influences the learning performance of programming students. This pose a research gap in computer programming education most especially that novice programmers tend to form their own group discussions during laboratory activities and after lecture meetings, and often rely on peers when a topic or activity is difficult (Rahmat et al. 2012). More importantly, real-life software projects require coordinated efforts of a team due to the increasing complexity of projects (Fernández-Sanz et al. 2009).

While cooperative learning offers potentially valuable learning opportunities (Altun 2015; Gull and Shehzad 2015; Parveen et al. 2017), educators are still warned when adopting such strategy (Herrmann 2013). Moreover, the culture of computing students prior to experiencing group work shows that they prefer to work alone to avoid dealing with interpersonal problems and less competent group members (Waite et al. 2004). Thus, this study intends to evaluate the impact of cooperative learning through the use of Jigsaw Technique (JT) when teaching computer programming to novice programmers. Understanding the response of learners may establish a basis for educational institutions, curriculum developers, and programming professors that could help them achieve a better knowledge delivery system of computer programming education. Towards the realization of this goal, a quasi-experimental study was conducted to evaluate the effects of JT as a cooperative learning strategy among novice programmers where an experimental group and a non-equivalent group were compared in terms of attitude, self-efficacy, and knowledge gain. On a side note, pair programming was not selected as the intervention strategy since its impact to students was already investigated (Facey-Shaw and Golding 2005; Faja 2014; Umapathy and Ritzhaupt 2017). Lastly, the succeeding parts of the paper cover the theoretical underpinning, how data was collected and analyzed, discussion of the findings, and conclusions, implications, and recommendations.

Literature Review

Computer Programming

With computer programming being sought as a desirable skill in the 21st century, policies and teaching strategies are being proposed to strengthen the production of coding connoisseurs. Curriculum adjustments are starting to become noticeable from integrating programming courses within compulsory education (Björkholm and Engström 2017; Harlow et al. 2015) to simply establishing an ecosystem of learning computing (Seow et al. 2019). Pedagogies in computer programming are also being proposed to facilitate the creation of an effective learning environment. For instance, games and contests (e.g., Leek Wars, Code Hunt, and Code Fights) were reviewed to make teaching and learning process of computer programming more attractive and fun (Combéfis et al. 2016). Aside from aesthetics and real-world sensory data integration, games that require collaboration and participation between players (e.g., multiplayer collaborative games) were found to be more engaging. The effective use of game-based learning for teaching programming concepts was also demonstrated by Mathrani et al. (2016), which is later supported by recent studies that implemented a game-based programming education (Kiss and Arki 2017; M. B. Garcia et al. 2019). Other notable teaching strategies and tools in this area of specialization include multimedia approach (Annamalai and Salam 2017), block-based visual programming environment (Sáez-López et al. 2016), gamification (Ibáñez et al. 2014), affective tutoring system (Fwa 2018), and more. In a meta-analysis of 139 studies from 1965 to 2017 pertaining to teaching and learning computer programming, instructional approaches such as blended learning, collaboration, game-based learning, metacognition, and problem solving exhibit moderate to large effects (Scherer et al. 2020). It is important to note that collaboration in computer programming is crucial particularly on complex topics and logical problems (Bagley and Chou 2007), hence, the use of collaborative learning in computer programming courses (Hayashi et al. 2015). Although it is similar to cooperative learning, it lacks a more structured setting where the teacher has total control of the learning environment. Nevertheless, teaching and learning programming languages remains a challenge which leads to a conclusion that there is still a merit on the findings of Bubica and Boljat (2014) that such strategies dot not work in every learning situation. Therefore, the search for more pedagogical approaches and classroom interventions for teaching computer programming to enrich the existing knowledge base of "what works and what doesn't" is not over (Lye and Koh (2014).

Cooperative Learning

One of the under-researched educational approaches that could be integrated with computer programming education is cooperative learning due to the fact that novice programmers tend to form their own group discussions during laboratory activities and after lecture meetings, and often rely on peers when a topic or activity is difficult (Rahmat et al. 2012). Jacobs et al. (1997) defined cooperative learning as an "organised and managed groupwork in which students work cooperatively in small groups to achieve academic as well as affective and social goals". Drawing from existing studies, it was exhibited that the completion of cooperative learning group tasks has been associated with a greater comprehension, higher academic achievement, and a more positive social skills and attitude (Cohen 1994; Slavin 1991; Asha and Hawi 2016; Gull and Shehzad 2015). In a more recent study, Molla and Muche (2018) evaluated the impact of cooperative learning on students’ achievement and laboratory proficiency and they found a significant learning gain via a cooperative learning achievement division. In another study (Hebles et al. 2019), cooperative learning was also found to have a positive, significant influence on teamwork competence – or the capacity of individuals to integrate themselves in a team and contribute effectively. For computing students and professionals, teamwork is one of the most crucial soft skills to have in order to decipher complex problems through technological solutions (Fernández-Sanz et al. 2009). With decades of evidence, it is clear why there is motivation and interest to incorporate cooperative learning strategies in various subjects. However, the successful implementation of cooperative learning is dependent on meeting criterial elements that promotes cooperation where each individual and all members of the group achieve academic learning success. First, positive interdependence must be the foundation of learning activities to establish the feeling among group members that they sink or swim together – that is, the success and failure of one member is a success and failure of the group. Moreover, these activities must also permit a sufficient time for learning as lack thereof will limit the academic benefits of cooperative learning. Although students operate in a group work format, it is also vital that there is an equal opportunity for success for each student by requiring them to complete their own information-processing task. Individual accountability is also crucial to achieve this element. In addition, face-to-face interaction must also be arranged between students, and not only between members of the same group. Without these criterial elements, teachers are merely implementing cooperative group tasks and not cooperative learning group tasks (Stahl 1994). To ensure effective cooperative learning activities, educators advocated and used several methods to maximize achievement such as JT, Learning Together, Teams-Games-Tournaments, and Cooperative Learning Structures, to name a few (Johnson et al. 2000).

The Jigsaw Technique

Founded by Aronson and et al. (1978), JT is a cooperative learning and an organization method for classroom activities that promotes learning by making students dependent on each other. Among the cooperative learning methods, JT was selected for this study because it has been reported as an effective pedagogy for various subjects and academic levels. Karacop and Diken (2017) investigated the effects of JT towards the cognitive process development of university students in Science Teaching Laboratory Applications (STLA) course. Through the use of instruments such as the Scientific Process Skill Test and Student Opinion Scale, it was found out that students from a group that received JT intervention have higher scientific process skills compared to those students who only received their traditional confirmatory laboratory approach. Similar findings were demonstrated in the study of Márquez et al. (2017) where JT was utilized in a Physics course. Learning improvement in constructing concepts maps was evident on an experimental group that received JT intervention, although without reaching statistical significance. In a graduate school level, A. Garcia et al. (2017) examined the implementation of JT to enhance learning and retention in an Educational Leadership course. This qualitative case study revealed that graduate students learned more effectively when they are learning collaboratively and that they enjoyed learning with smaller parts of the whole topic. JT has never been evaluated in a computer programming course and this is the first study to examine its impact towards novice programmers.

Methods

Research Design

A quasi-experimental research using a nonequivalent control group pretest-posttest design was conducted to evaluate the impact of jigsaw teaching strategy as an educational approach in implementing cooperative learning among novice programming students. This kind of research design is fixated on making comparison between an experimental group and a nonequivalent group structured like a true experiment, except that this design lacks random assignment and assertion of the order by which variables occur (Privitera 2019). Although randomized controlled trials (RCT) can provide strong evidence of effectiveness even on educational settings (Connolly et al. 2018), a quasi-experiment design was intentionally selected due to small sample size, preclusion of ethical issues concerning school interventions at a classroom level, and constraints brought by university policies. Additionally, Rowe and Oltmann (2016) strongly asserted that the use of RCT in educational research is a flawed design choice as educational and clinical contexts differ. Nevertheless, students who were part of the study chose their preferred class schedule and computer programming professors did not have a control on course assignments and corresponding sections to handle. To protect students’ and professors’ rights in research participation, the study was conducted in accordance to the ethical principles in the Declaration of Helsinki and of the University.

Setting and Sample

This study was carried out during the first trimester of the academic year 2019-2020, from August to November, at FEU Institute of Technology in the City of Manila, Philippines. The university has a 4-year information technology program with four specializations such as Animation and Game Development (BSIT-AGD), Web and Mobile Application Development (BSIT-WMA), Digital Arts (BSIT-DA), and Business Analytics and/or Service Management (BSIT-SMBA). All specializations have a computer programming course, both lecture (CCS0003) and laboratory classes (CCS0003L), set to teach freshmen on how to acquire logic and design skills in solving computer problems using conventional techniques such as flowcharting and/or pseudo-coding, and basic programming concepts such as basic input and output, conditional and repetition control structures, and array. The same syllabus, instructional materials, and online modules in a learning management system are strictly used by various professors across specializations. A total of 786 computer programming students scattered in 24 sections were enrolled during the first trimester. Due to some restrictions of intervention enrollment (e.g., university policy), only two sections were recruited. Each section (N=40) was assigned either as the experimental group or the nonequivalent group. Although the same syllabus outline was used for both groups, a separate instructional guide outlining how to deliver the jigsaw teaching strategy in a programming course to the experimental group was developed. For most Jigsaw activities, concepts from Design Thinking curriculum applied in Higher Education Institutions (Revano and Garcia 2020) were borrowed to have a more engaging classroom discussions and activities.

Learning Intervention

The CCS0003 and CCS0003L are basic programming courses focused on using C++ programming language that aims to establish students’ foundational knowledge in computer programming. Because these courses are the first among many programming courses and prerequisite to many professional and major courses, the acquired knowledge from these courses dictates the destiny and experiences of students in the university. Additionally, students’ first encounter with programming learning session has been proven to produce confusion, frustration and boredom (Bosch et al. 2013). The importance of the introductory programming course therefore calls for a teaching strategy that could foster active learning and improve academic performance. As reviewed, cooperative learning through the use of JT is a prospective pedagogy to achieve these goals. With such a new strategy to be implemented in a course, it results to the development of an intervention plan. The development of the revised syllabus and corresponding classroom activities is a testament of a meticulous preparation for the integration of cooperative learning technique which separates it to the traditional group learning (Jacobs 1997). Moreover, the formation of groups followed validated strategies for doing collaborative works in the context of computer programming (Tobar et al. 2011). Table 1 shows the course modules for the 14-week intervention (equivalent to one trimester) of JT as an approach of cooperative learning in computer programming.

Each module has a corresponding Jigsaw activity in either its lecture or laboratory session. To integrate JT in learning activities, the class is first divided into small heterogeneous groups of four to six students called "Expert" groups. The number of groups is dependent on lesson complexity since each lesson is divided into subtopics and each subtopic is assigned to an expert group (the harder the lesson is, the more subtopics and groups are formed). Therefore, the number of expert groups created is equal to the number of subtopics (puzzle) per lesson to ensure the whole coverage of the module. Each puzzle is distributed to an expert group where the assigned leader (randomly, voluntarily, or selected based on readiness, interest, or knowledge) facilitates the learning process of the group. To apply JT in Module 1: Introduction to Programming Concepts, for instance, History of Computer Programming subtopic is assigned to Group A, Programming Terminologies is assigned to Group B, and so on. After a substantial amount of time given to master the subtopic, new "Jigsaw" groups are formed consisting of one representative from each expert group who contributes information about the subtopic learned from their respective previous groups. Figure 1 visually describes the usage of JT where each letter represents a student and each block represents a group.

Research Instrument

Data were collected using a survey containing a demographic questionnaire, Attitude Scale of Computer Programming Learning (ASCOPL), and Computer Programming Self-Efficacy Scale (CPSES). Demographic information included students' age, gender, program specialization, General Point Average (GPA) on Senior High School, and programming experience. ASCOPL, a 5-point Likert-type scale developed by (Korkmaz and Altun 2014), was incorporated in the questionnaire to measure students’ attitude towards learning computer programming. This validated instrument is composed of 20 items grouped into Willingness, Negativity, and Necessity, with correlation coefficients ranging from 0.611 and 0.671. While most constructs are positive, there are few negative items in ASCOPL that require reverse scoring. On the other hand, CPSES is an evaluation tool based on a computational thinking framework to assess learners’ computer programming self-efficacy (M.-J. Tsai et al. 2019). This validated tool is composed of five subscales such as Debug, Control, Algorithm, Logical Thinking and Cooperation, with a reliability alpha ranging from 0.84 to 0.96. Combining the instruments together yielded a Cronbach's alpha of 0.89 for the total scale. Although there are a number of factors known for influencing learning success, attitude and self-efficacy are considered more important than others (Anastasiadou and Karakos 2011).

Data Collection and Analysis

The survey questionnaire was distributed in the programming course classroom in an online learning management system where both professors and students were enrolled. The experimental group completed the pre-test questionnaire on August 16, 2019, and both experimental and nonequivalent groups completed the post-test questionnaire on November 22, 2019. The same questionnaire was given to both groups, and the data collection was facilitated by a professor who was not part of the intervention delivery. With consent and approval, long quiz scores per course modules for knowledge gain analysis were also collected from the professors’ gradebook. However, within-group comparison of scores was excluded from the analysis and only the between-group comparison was performed. The collected data was analyzed using IBM SPSS Statistics 26.0 (IBM Corporation, USA). Demographic information was reported and data distribution was tested using descriptive statistics. Although the results presented are from parametric tests due to similar significance with non-parametric tests, both statistical tests were used since self-efficacy and knowledge gain did not meet the normality assumption. For testing the homogeneity of participants, Fisher's exact test, chi-square test, and Independent t-test were used. Lastly, the comparison of post-test questionnaire and knowledge gain between the groups were measured using Independent t-test and Mann Whitney U test while the effect of jigsaw teaching strategy on a programming a course within the experimental group was examined using paired t-test and Wilcoxon signed rank test. There were no dropouts throughout the course of the study, hence, data from 40 students per group was utilized for analysis.

Results and Discussions

The purpose of this study was to investigate the effect of a cooperative learning approach using JT towards novice programmers in a basic programming course. Using a quasi-experimental research with a nonequivalent control group pretest-posttest design, JT was utilized in a 14-week intervention to analyze the attitude, self-efficacy, and knowledge gain of students. A total of 80 students participated in the study (Table 2) where half was part of the experimental group and the other half was part of the nonequivalent group. The participants were dominated by male students (93.75%) and the overall mean age was 19.08 years. Although the participants were most male, an empirical analysis demonstrates that gender difference may not come into play at all when it comes to computer programming (Akinola 2015). Nevertheless, there were more students with less experience on computer programming (83.75%) although the majority of them received an 86-90 GPA (50.0%). Upon testing, the homogeneity between experimental and nonequivalent groups was confirmed since their characteristics were not significantly different with one another.

Upon testing the impact of cooperative learning using JT when teaching computer programming to the experimental group of novice programmers, the results (Figure 2) show mixed findings. On the attitude factor, the averaged willingness score increased from 2.90 ± 0.87 to 4.53 ± 0.51, p = 0.000, the average negativity score decreased from 4.00 ± 0.75 to 2.48 ± 1.06, p = 0.000, and the average necessity score increased from 3.35 ± 1.03 to 4.45 ± 0.71, p = 0.000. On the self-efficacy factor, logical thinking increased from 3.30 ± 0.99 to 4.43 ± 0.71, p = 0.000, algorithm increased from 3.25 ± 0.95 to 4.10 ± 1.06, p = 0.002, debug increased from 3.35 ± 1.03 to 4.10 ± 1.13, p = 0.004, control increased from 3.88 ± 0.91 to 4.08 ± 0.94, p = 0.345, and cooperation increased from 3.40 ± 1.03 to 4.13 ± 0.76, p = 0.000. Among the variables, only control under self-efficacy was not significant.

Aside from the within-group comparison of attitude and self-efficacy, the same variables with an inclusion of knowledge gain were analyzed between the two groups (See Table 3). On the attitude factor, the mean willingness score in the experimental group (4.53 ± 0.51) was higher than in the control group (3.45 ± 0.90), the mean negativity score in the experimental group was lower than in the control group, and the mean necessity score in the experimental group (4.45 ± 0.71) was higher than in the control group (3.90 ± 1.19). All of these were statistically significant. On the self-efficacy factor, the mean scores in the experimental group in terms of logical thinking, algorithm, debug, control, and cooperation were all higher than in the control group. Although the experimental group consistently yielded higher scores, only logical thinking and cooperating were statistically significant (p < 0.05). The experimental group likewise consistently yielded higher scores on all of the modules. However, statistically significant differences were only noticeable in modules 1, 3, and 4 (p = 0.000).

After a series of cooperative learning activities using JT, the attitude of novice programmers towards the course was significantly more positive. The modification of the teaching instruction, from individual-based to cooperative-based learning tasks, recruited a positive change in students’ programming learning experience which has a direct influence to their attitude (Yang et al. 2018). One possible explanation is the fear factor stemmed from the nature or complexity of computer programming itself. Naturally, novice programmers are afraid of learning programming because they perceived this uncharted territory as a difficult subject (Katai 2015; Pendergast 2006). Solving machine problems alone would only aggravate the situation particularly for underperforming students, and inhibit the likelihood of initiating discussions or asking questions (Bergin and Reilly 2005). Unfortunately, the fear factor also leads to a lack of comfort, a sense of confusion, inability to focus, and questioning one’s ability when not eliminated. The feeling of negativity is also counter-productive to learning, and may also result in a dislike of programming (Simon et al. 2006). Thus, the significant positive change in attitude of novice programmers may be explained by the sense of comfort received from team members (Rogerson and Scott 2010). According to Wilson and Shrock (2001), comfort level was the most reliable predictor of success in an introductory college computer science course. Therefore, the impact of cooperative learning approach in the attitude of novice programmers has huge implications for computer programming education since attitude has a significant positive correlation with the academic achievement of students (Baser 2013).

In addition, the self-efficacy of novice programmers was also noticeably higher after the course intervention. Nevertheless, only logical thinking and cooperation were consistently significant, and only control was consistently not significant within- and between-groups. First, cooperation is an important factor because it prepares students in real-life software projects where coordinated efforts of the members of one or more teams are needed due to the increasing complexity of software projects (Sancho-Thomas et al. 2009). The division of programming tasks and concepts using JT made novice programmers to believe that they can work with others and make use of these divisions to enhance programming efficiently. There is also something to be learned from logical thinking being significant while algorithm was not. It could only mean that cooperative tasks direct novice programmers towards the understanding of basic programming concepts but not the development of algorithmic coding skills. Therefore, programming teachers must exert more time in sharing their skills and knowledge when teaching more complex topics because cooperative learning approach becomes less useful when students cannot acquire the knowledge they need to share to other members of the group on their own. The results of knowledge gain analysis between-groups reinforce this finding since the use of JT was only significant on modules with easy-to-learn concepts (e.g., Introduction to Programming Concepts, Introduction to C++ Programming, and Basic Input/Output Statements). Nonetheless, there is still a positive effect of cooperative learning using JT towards the academic achievement of novice programmers, which supports the literature in computer literacy (Akseer et al. 2017).

Conclusion

In this paper, the effect of cooperative learning approach through jigsaw teaching strategy on the attitude, self-efficacy, and knowledge gain of novice programmers was examined using a quasi-experimental research with a nonequivalent control group pretest-posttest design. The major findings from this study were that (1) attitude and self-efficacy (with an exemption of control) significantly increased after completing the course, and (2) the level of attitude, self-efficacy (in terms of logical thinking and cooperation), and some modules (Module 1: Introduction to Programming Concepts, Module 3: Introduction to C++ Programming, and Module 4: Basic Input/Output Statements) in the knowledge gain was significantly higher in students who were exposed with cooperative learning approach compared with those who were not. To achieve these positive results, several considerations must be kept in mind when implementing cooperative learning approach in a computer programming course. First, there are essential elements of cooperative learning that must be met in order to differentiate cooperative learning group tasks from cooperative group tasks (Stahl 1994). Moreover, preparation of instructional tools, syllabus, and other necessary materials must be prepared ahead of time to smoothly integrate cooperative tasks since the modification of the teaching instruction, from individual-based to cooperative-based learning tasks, requires a great amount of time and effort. Despite positive significant results, programming teachers must not also be dependent on cooperative tasks and should reinforce knowledge dissemination particularly on complex topics. It was found out that cooperative learning in a computer programming course becomes less useful when students cannot acquire the knowledge they need to share to other members of the group on their own (e.g., Module 7: Array Data Structure).

Future research may replicate the study by addressing certain limitations. First, the study was only conducted for one trimester (14 weeks) even though there is another course of programming on the next trimester. The next part of the course is focused on much more complex programming concepts which presents an opportunity to validate whether cooperative learning only works for simple and easy-to-learn programming topics. However, this realization only occurred after finding out that knowledge gain was significantly higher only on non-complex modules. Moreover, due to some restrictions of intervention enrollment, the study’s population size was limited to 80 students although there were 786 computer programming students enrolled during the time of the study. Future study could also validate whether a cooperative learning approach will work on advanced programmers too or not. There is a possibility that, at this stage, advanced programmers may prefer to work on their own rather than join a group. On the other hand, other cooperative learning methods aside from Jigsaw could also be utilized as a technique such as Learning Together, Teams-Games-Tournaments, and Cooperative Learning Structures, to name a few (Johnson et al. 2000). By using other cooperative learning methods, it might encourage and convince educational institutions, curriculum developers, and programming professors to utilize such pedagogy as an alternative knowledge delivery system of computer programming education.

With all this in mind, there is still a potential in using cooperative learning in computer programming education to make learning become more meaningful and with ease even for a subject that is perceived as difficult.