Collaborative Learning of Computer Programming: An Empirical Study of its Effects, Problems and Prospects in an Introductory Java Programming Class Olalekan S. AKINOLA1 Akinola.olalekan@dlc.ui.edu.ng solom202@yahoo.co.uk and Babatunde I. AYINLA i.ayinla@mail.ui.edu.ng ayinlab@yahoo.com Department of Computer Science, University of Ibadan, Nigeria 1Corresponding Author Abstract Many students particularly in the first year of introducing them to computer programming; find it difficult to grasp. However, collaborative learning is a tool that can enhance the positive attitude of students towards programming as a laudable profession. We empirically demonstrated the use of collaborative learning in computer programming in this study. One hundred and five (105) Computer Science students, who were firstly introduced to computer programming, were subjected to collaborative programming tutelage at the University of Ibadan, Nigeria for a 13-week period. The results of their course outcomes before and after collaborations and their perceptions of collaborative learning show that it has a promising prospect for teaching students the art of programming especially when they are new in the task. Keywords: Collaborative learning, Computer programming, Programming skill, Empirical Computer Science Introduction Computer programming is an integral part of a Computer Science curriculum and a major stumbling block for many computing students, particularly in the first year of study; many of those students find programming difficult to grasp, let alone master (Dunican, 2002; McCracken et al., 2001; Proulx, 2000, Iwona and Grace, 2007). According to Eustáquio et al., (2006), the difficulties faced by the students can be perceived by the high degrees of failure and the difficulties presented in the courses directly dependent on the abilities to program, to develop a logical reasoning and to solve problems. In part, this is the result of the difficulties found by instructors to effectively guide the students during their programming lab activities, due to the large number of students per class. The collaborative work involving groups of students can contribute to solve this problem, provided that adequate mechanisms are available to construct and mediate group work. When this is done, it has been observed that students are able to reach improvements on performance, critical thinking and cooperative behaviour (Eustáquio et al., 2006). Collaborative programming is an extremely important skill which should be developed in undergraduate education. This is because software development in industry is often performed by teams of software engineers working collaboratively on projects. It is known that programming projects performed in pairs are completed in a shorter time and produce better code than projects performed by individuals. In addition industry programmers working in pairs have reported higher job satisfaction than those who work alone (Tamar and Ela., 2006). Pair programming is a practice in which two programmers work collaboratively at one computer on the same design, algorithm, or code. Prior research on pair programming has primarily focused on its evaluation in academic settings (Andrew, 2008). This practice has been nominated several times in the last decades as an improved way of developing software (Laurie, 2008). With the complexity and size of modern software projects, most professional programmers do not work alone, but rather on a software development team. With the increasing need to coordinate work, programming work has had more and more of a social component. Programmers commonly turn to team members for technical knowledge, advice and programming help (Jan, 2007). 1 Qualitative assessment of the effects of collaborative learning of programming has been done extensively. For instance, the studies of McKinney & Denton (2006), Donna & Paul, (2008), and Eustáquio et al., (2006). However, in this study, we empirically studied the effect of collaborative learning of computer programming on students who are just being introduced to Java programming. The positive and negative perceptions of the students about collaborative learning were also empirically determined. 2. Collaborative Learning of Programming Collaborative learning is a situation where two or more students are engaged in a teaching and learning exercise on a particular topic. Beck et al., (2005) as cited by Matt and Debbie (2006) opined that collaborative learning is increasingly being recognized as a technique for improving learning outcomes. Based on socio-cultural learning principles Vygotsky, (1978), collaborative learning allows students to progress beyond what they would have been able to learn alone by sharing mental models and observing the thought processes of others. As opposed to direct instruction, collaboration allows students to actively participate in problem solving processes by communicating about the conceptual representations relating to the task at hand. Collaborative approaches allow the tightly-coupled interactions required for rapid and complex concept formation to occur. The task of developing quality software requires a lot of analysis, design and programming which also requires very careful design. The various tasks to be done during software development have resulted in obvious division of persons into analysts, designers and programmers. Collaborative learning involves grouping or pairing students to work together. This practice has been nominated several times in the last decades as an improved way of developing software (Laurie, 2008). Many conditions may affect the efficiency of collaborative learning. Dillenbourg (1996) study about efficiency in collaborative situations listed group composition, group size and individual differences between group members as conditions that could affect collaboration. Having the right core team can make or break a project. Therefore, great care should be taken when selecting team members. LeJeune (2003) argued in favour of small-groups interactions. She suggested that group size should be between five and seven people and that grouping more than seven people may result in communication problems. It is even noted that many developers are forced to abandon pair programming due to lack of resources (e.g., due to small team size), something that can actually harm a project by hindering the integration of new modules to the existing project (Rajendran and David, 2012). Hence, one of the most difficult decisions in programming teamwork or collaboration task in Computer Science is how to determine how many people should be in a team. According to Edgar et al. (2005), collaborative programming improves the quality of software design, reduces the deficiencies of the code, enhances technical skills, improves team communication and it is considered to be more enjoyable for the participants. Collaborative programmers repeatedly cite how much they learn from each other. Knowledge is constantly being passed between partners, from tool usage tips (even the mouse), to programming language rules, design and programming idioms, and overall design skill. Learning happens in a very tight apprenticeship mode. The partners take turns being the teacher and the taught, from moment to moment. Even unspoken skills and habits cross partners. McKinney & Denton (2006) experimented with collaborative learning in an introductory programming course at the School of Computer and Information Sciences, University of South Alabama. The students were exposed to team-based problem solving and pair programming and the results provide confirmation of previous research that early use of collaborative learning leads to higher interest, higher retention, and higher academic performance in students. Other benefits of 2 collaborative learning – having fun, deeper learning and having a higher sense of belonging – were reported as being enjoyed by all students, but were particularly important for first year students who are at risk of leaving the discipline (Donna and Paul, 2008). Tamar and Ela (2006) also put emphasis on the importance of collaborative programming as an extremely important skill which should be developed in undergraduate education. This is because software development in industry is often performed by teams of software engineers working collaboratively on projects. It is known that programming projects performed in pairs are completed in a shorter time and produce better code than projects performed by individuals. In addition industry programmers working in pairs have reported higher job satisfaction than those who work alone. 3. Conducting the Experiment One hundred and five (105) students of Computer Science in their second year at the University of Ibadan, Nigeria volunteered to participate in the study. The students got little or no prior knowledge of Java programming. They were taken through a 13-week teaching and practical classes in Java Object Oriented Programming (OOP) concepts in CSC 232 (Structured Programming) Course in the first semester of 2012/13 Session. The students were taken through weekly two-hour teaching and three-hour practical classes in the first eight weeks of the semester. After the series of practical and theory programming classes, the students were given a practical test lasting two hours to determine how much programming skill they have acquired before collaboration. The performance of the individual students was recorded over ten marks. Thereafter, five different team sizes (1, 2, 3, 4 and 5) of male and female students compositions were randomly formed and were given four different practical questions to solve (analyze, code and debug) for four weeks. No student was fixed to a particular team. The students were randomly assigned to different team sizes each week. This allowed the students to get used to real-life collaborative programming. It was ensured that the teams were given same practical questions to solve at each session so as to avoid biasing of the results. The students in the teams were enjoined to collaborate among themselves to a large extent and record all their discussions on the given problem on the Report Form given to them. Each team was given one computer with flat LCD Monitor. The experiments were monitored and coordinated by the researchers. The researchers ensured that there was no interaction between the teams during the practical sessions such that ideas were not shared across teams. During the practical sessions, one member of the team served as recording officer, another served as typist and another served as coordinator. On the average the practical sessions lasted about four hours each day. There was no specific time limit placed on the students for their practical. Another test lasting two hours was also given to them after the four-week collaborative practical exercises and scored over ten marks for the students. The students were finally asked to write down their experiences on the perceived merits and problems of all the collaborative practical periods they went through. Research Hypotheses The hypothesis set for the experiment is stated below: Ho: Programming skill acquisition levels of students before collaborations will not be different after collaborations. 3 4 Results and Discussion 4.1 Results The means of the results from the two tests conducted before and after the collaborative programming exercises were calculated and plotted on a chart. Figure 1 gives the chart of the results obtained. 6 5 4 3 2 1 0 Mean Performance Before Collaboration MeanPerformance After Four Series of Collaborative Exercises Figure 1: Chart showing the Mean Results of the Tests Conducted Before and After Collaborations Tables 1a to c show the result of the statistical analysis performed on the data. Table 1a: Paired Samples Statistics Mean Pair 1 Mean Performance Before Collaboration Mean Performance After Four Series of Collaborative Exercises Std. Deviation N Std. Error Mean 4.34 105 1.990 0.194 5.99 105 1.390 0.136 4 Table 1b Paired Samples Correlations N Pair 1 Performance Before Collaboration & Performance After Four Series of Collaborative Exercises Correlation 105 0.617 Sig. 0.000 Table 1c Paired Samples Test Data Mean performance scores of students before and after collaboration. Hypothesis Tested H1: Skill acquisition levels of students before collaborations will not be different after collaborations. p-Value Mean Values Decision Before Collaborations = 4.34 Ho rejected 0.00 p < 0.05 After Collaborations = 5.99 Table 1c shows that there is a major significant difference between the mean performances of students before and after collaborations in programming and that there is a positive correlation of 0.617 between the performance of students before and after collaborations. The Table further shows that the Mean values of the skill acquisition levels of students before collaborations and after collaborations were obviously different (Mean acquisition skill levels before collaborations = 4.34 and Mean acquisition skill levels after collaborations = 5.99). 4.2 Students’ Perceptions The following sections give the summarized responses of the students on their perceptions of collaborative learning of computer programming. The responses are reported here nearly the same way and language the students used to write them down. 4.2.1 Perceived Prospects 1. Programming Skill Acquisition: “Team members, especially weak programmers, usually acquire new skills/techniques in the collaborative programming tasks. The skills of the strong members too increased the more. Knowledge and ideas are shared among the members. Strong/skilled members assist the weak ones to learn or better understand programming better”. 2. Easy and Fast problem Solving: “Problem solving becomes easier as members will contribute different ideas to solve a particular problem. There was a better program analysis and design. Different ideas on solution to problems were usually suggested by the team members and one of them was usually taken as the best to solve the problem at hand. Debugging of errors in programs also was very fast and easy in collaborative programming environment. This usually resulted to efficient and accurate programs”. 3. Increased Interest: “Passion for programming increased among the team members especially those that had initially lost interest in programming. The collaboration makes the members to eager to learn more”. 5 4. Increased Social Interactions: “There were better interaction and improved communication skills among the team members during and after the collaboration exercises. Students who always feel shy to ask questions in classes because of the fear of intimidation usually feel free to ask questions from their team mates”. 4.2.2 Perceived Problems 1. The Domination Factor: “The highly skilled programmers tried to dominate the whole programming process, right from the analysis to coding, and to debugging phases. The highly skilled programmers did not always want to share ideas freely. The skilled did as if they knew everything and would not want to accept the idea of the unskilled members in the team. They will like their own idea to be implemented. Ideas from others were not usually put into consideration. This usually brings clash of interest among the team members, usually resulting to unwarranted arguments among us. Although ideas of the unskilled might not be considered at first, the team may find out that those ideas were very useful at long last”. 2. Inferiority Complex factor: “The unskilled usually don’t want to talk freely in the programming exercise and this may lead to little or no participation from them. Thus leaving the whole programming exercise to the skilled members of the team”. 3. Time factor: “Time taken to agree on issues is usually high especially in a large team size of say 4 or 5. The time taken may become higher if there were many unskilled programmers in the team. This is due to the fact that the skilled members will have to be explaining little things to the weak members in the team. The skilled members tend to work at faster speed than the weak ones; and so, weak members slow them down. Thus making the exercise uninteresting and boring to the strong programmers in the team”. 4. Forced Conformance Factor: “Individuals in the teams were usually forced to accept the general decision of the team even though they have their own ways of doing their things. This also arises as a result of the dominating behaviour of the skilled members of the team”. 5. Same Skill Level factor: “When almost all the team members are of the same skill level, usually there is no improvement in their outputs. This is worst when majority of the members of the team are weak in programming”. 4.3 Discussion This study shows the strength of collaborative-programming as a tool for potential programmers to boost their confidence, to serve as a learning platform to the unskilled and to prepare them ahead of future. The collaborations enhanced the programming skills of the unskilled students by giving them room to learn more from their colleagues. The experiment shows that there is a major significant difference between performances before and after collaborations of the students in programming tasks (p < 0.00). The mean results show that programming skill acquisition levels of students before collaborations got improved after the collaborative practical exercises. Our keen observation of the student participants while on the study is a further confirmation of the submission of McKinney & Denton (2006) that early use of collaborative learning leads to higher interest, higher retention, and higher academic performance in students. In accordance with Lahtinen et al. (2005), learning among the students in the collaborative exercises became a social process where they learned from each other. Students interactively engaged in the practical tasks, observing each others’ approaches to problem solving, keeping each other focused on the task, and being encouraged to verbalise issues and decisions along the way. 6 No doubt, observation and results from this study show that collaboration brings about better social interactions among the students. Three of the students actually confessed that the collaborations increased their interests in making friends in their class and that “we now knew the mates that we can make friends with in order to improve ourselves”. The series of collaborative exercises exposed the weakness areas of the weak programmers to a larger extent and it helped them to improve their knowledge in the weak areas or topics. It was also observed that their problem solving skills became increased over time. They ended with better analytical, coding and debugging skills. Ultimately, the last two practical exercises resulted in efficient codes being turned out by the students. Collaborative-programming has stood tall as a major means of impacting and enhancing undergraduate students' ability to learn programming languages. It serves as a main technique to encourage the novice in programming and it is also found to be more effective in given students a friendly environment to help one another in order to gain more knowledge. Collaborative learning addresses other issues and in particular provides benefits to first year programming students including greater achievement and interest, developing skills expected by industry, and having fun (McKinney and Denton 2006). Collaborative learning is generally advocated as an exemplary pedagogical practice (Yerion and Rinehart 1995; Williams and Kessler 2000; McKinney and Denton 2006) where grouped students become responsible for one another’s learning as well as their own (Gokhale 1995). Nevertheless, student-participants in this study brought out some cogent issues that are needed to be addressed when adopting collaborative learning. The issue of fear of dominated upon especially by weak programmers, the enormous time that may be taken to resolve an issue and forced conformity to other’s opinion. These problems were truly observed with the larger team sizes 4 and 5; but more pronounced with team size 5. These problems could be minimized if the collaborative team is reduced to say 3 or 4 in size. Judging from the whole exercise, it was noticed that the advantages of collaborative learning of computer programming far outweigh its disadvantages if it is well planned and conducted. 5. Conclusion In this study, we have empirically demonstrated the positive effect of collaborative learning on computer programming. The perceptions of the students about collaborative learning, both positive and negative, were also presented. The study clearly suggests that collaborative learning is a tool that can enhance the positive attitude of students towards Computer Science. Acknowledgement We specially acknowledge the 200 Level students of the Department of Computer Science, University of Ibadan, Nigeria for their sincere and faithful participation in this study. The study was carried out as part of their regular teaching and practical periods in the First Semester of 2012/2013 session. References Andrew Begel (2008). Pair programming: what's in it for me? http://dl.acm.org/citation.cfm?id=1414026. 24th Downloaded on May, 2013. Beck, L. L., Chizhik, A. W., & McElroy, A. C. (2005). Cooperative learning techniques in CS1: design and experimental evaluation. Proceedings of the 36th SIGCSE technical symposium on Computer Science Education, St. Louis, Missouri, USA, pp. 470–474. Dillenbourg, P. et al. (1996). The evolution of research on collaborative learning. Learning in Humans and Machines: Towards an Interdisciplinary Learning Science, ed. D.P.R.H. Spada. 1996, Oxford: Pergamon. 189-211. 7 Donna Teague & Paul Roe (2008). Collaborative Learning – towards a solution for novice programmers.(Internet) http://eprints.qut.edu.au/17818/1/c17818.pdf Downloaded 10th August, 2013. on Dunican, E. (2002). Making the analogy: Alternative delivery techniques for first year programming courses. In J. Kuljis, L. Baldwin & R. Scoble (Eds), Proceedings from the 14th Workshop of the Psychologyof Programming Interest Group, Brunel University, June 2002, 89-99. Edgar Acosta Chaparro, Aybala Yuksel, Pablo Romero and Sallyann Bryant (2005). Factors Affecting the Perceived Effectiveness of Pair Programming in Higher Education, www.citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.108.8224.pdf Downloaded on 24th May,2013. Eustáquio São José de Faria , Juan Manuel Adán-Coello, Keiji Yamanaka (2006). Forming Groups for Collaborative Learning in Introductory Computer Programming Courses Based on Students’ Programming Styles: An Empirical Study. 36th ASEE/IEEE Frontiers in Education Conference http://fie2012.org/sites/fie2012.org/history/fie2006/papers/1170.pdf Downloaded on 23rd May, 2013. Gokhale AA (1995). "Collaborative Learning Enhances Critical Thinking." Journal of Technology Education 7(1): 22-30. Iwona Miliszewska and Grace Tan (2007). Befriending Computer Programming: A Proposed Approach to Teaching Introductory Programming, Issues in Informing Science and Information Technology, Volume 4, pp 277 – 289 Jan Chong (2007). The Social Dynamics of Pair Programming. http://www.ipd.uka.de/Tichy/uploads/folien/134/chongSocialDynamicsofPairProgrammingIC SE07.pdf Downloaded on 24th May, 2013. Lahtinen E, Ala-Mutka K, et al. (2005). A Study of the Difficulties of Novice Programmers. 10th annual SIGCSE conference on Innovation and technology in Computer Science Education ITiCSE '05. Laurie Williams(2008). Pair Programming. North Carolina State University http://collaboration.csc.ncsu.edu/laurie/Papers/ESE%20WilliamsPairProgrammin g_V2.pdf Downloaded on 20th May, 2013. LeJeune N. (2003). Critical Components for Successful Collaborative Learning in CS1. J. Comput. Small Coll., 2003.19(1): p. 275-285 Matt Bower and Debbie Richards (2006). Collaborative learning: Some possibilities and limitations for students and teachers. Computing Department Macquarie University http://www.ascilite.org.au/conferences/sydney06/proceeding/pdf_papers/p150.pdf Downloaded on 24th May, 2013. McCracken, M., Almstrum, V., Diaz, D., Guzdial, M., Hagan, D., Kolikant, Y.B.-D., Laxer, C., Thomas, L., Utting, I., & Wilusz, T. (2001). A multi-national, multi-institutional study of assessment of programming skills of first-year CS students. ACM SIGCSE Bulletin, 33(4), 125-140. McKinney D and Denton LF (2006). Developing Collaborative Skills Early in the CS Curriculum in a Laboratory Environment. SIGCSE 2006 Technical Symposium on Computer Science Education, Houston,Texas, USA. Proulx, V. (2000). Programming patterns and design patterns in the introductory computer science course. SIGCSE Bulletin, 32(1), 80-84. Rajendran Swamidurai1 and David A. (2012). Umphress. Research Article CollaborativeAdversarial Pair Programming. ISRN Software Engineering Volume 2012 http://www.downloads.hindawi.com/isrn/se/2012/516184.pdf Downloaded on 23rd May, 2013. Tamar Benaya & Ela Zur(2006) Collaborative Programming In An Advanced Programming Workshop Conducted In A Distance Learning Environment The Open University of Israel 8 www.dsc.ufcg.edu.br/~jacques/cursos/map/recursos/XPSardinia.pdf Downloaded on 23rd July, 2013. Vygotsky, L. S. (1978). Mind in Society: Cambridge, MA: Harvard University Press. Williams L and Kessler RR (2000). The Effects of “Pair-Pressure” and “Pair-Learning” on Software Engineering Education. Proceedings of 13th Conference on Software Engineering Education & Training. Yerion KA and Rinehart JA (1995). "Guidelines for Collaborative Learning in Computer Science." ACM SIGSCSE Bulletin 27(4). 9