Collaborative Learning of Computer Programming: An Empirical

advertisement
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
Download