Developing Authentic Problem Solving Skills in Introductory Computing Classes Katrina Falkner
Edward Palmer
School of Computer Science University of Adelaide, Adelaide, Australia
Centre for Learning and Professional Development University of Adelaide, Adelaide, Australia
[email protected]
[email protected]
ABSTRACT
1.
The ability to solve problems is the key to developing software, and it is an ability that can be difficult to learn. Introductory Computer Science students are often taught syntax and semantics, along with simple problems designed to develop logical, structured thinking, but authentic problemsolving skills are rarely developed at these early stages. In this paper we describe an approach to introductory computer science education that addresses student engagement through integrating cooperative learning techniques and authentic problem solving processes throughout each aspect of the curriculum. Over a period of 4 years, the introductory computer science course at the University of Adelaide has been modified to support a cooperative learning style. A three-stage methodology has been implemented in place of traditional lectures to achieve this. The process focuses on observing the application of programming techniques, observing problem solving techniques and then applying cooperative problem solving exercises in the classroom. The results from this change in teaching methodology have been an increase in attendance rates at lectures and practical sessions as well as improved learning outcomes as measured by exam results. Student experience surveys show students have greater motivation for learning and believe they have a better understanding of concepts since the changes have occurred.
The development of software is a creative process, requiring skill in design, innovative thinking and communication. Software developers commonly start with partially defined problems, and must communicate with clients and colleagues in determining full problem specifications. An extensive process of partial solutions and experimentation follows in order to determine an effective, final solution. Introductory computer science classes, however, tend to take a significantly different approach, where the focus is on learning syntax and semantics, and the problem solving process is one of immediate success. Rarely do introductory computer science texts elaborate examples that illustrate that solving problems most commonly starts with failure. This is detrimental for our students, as students tend not to vary their approach to problem solving, instead persisting in applying the same techniques regardless of their effectiveness [7]. Common approaches to teaching introductory programming place an emphasis on learning the application of individual programming concepts, using “known-answer assignments” as demonstration. These kinds of problems are important, as they enable students to observe and practice the application of individual concepts, but this does not develop the skill of the problem solving process itself, and does not provide students with a realistic understanding of software development. Indeed, this approach constrains us in that it does not provide opportunities for exploring variations of problems and how the problem solving process might apply in these new situations. As software developers we do not solve problems on our own, or attempt to solve problems that we already know the answer to. However, we expect our students to learn how to develop software by doing just that. If we hide the problem solving process away as something we do between lectures, then students stand little chance of learning it. In this paper we describe an approach to teaching introductory computer science that uses authentic problem solving to facilitate experiential learning. Our pedagogical approach is based on the following properties:
Categories and Subject Descriptors K.3 [Computers & Education]: Computers and Information Science Education
General Terms Design, Human Factors
Keywords Problem solving, cooperative learning, engagement, introductory Computer Science education
INTRODUCTION
• Using cooperative learning techniques to increase student engagement and enhance the authenticity of the learning process.
Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. To copy otherwise, to republish, to post on servers or to redistribute to lists, requires prior specific permission and/or a fee. SIGCSE’09, March 3–7, 2009, Chattanooga, Tennessee, USA. Copyright 2009 ACM 978-1-60558-183-5/09/03 ...$5.00.
• Using cooperative problem solving approaches throughout every aspect of the curriculum, including course content and delivery, and support services. • Choosing problems that enable both practice and exploration of the problem space.
4
The next section describes our basis in cooperative learning and the impact on engagement that cooperative learning techniques provide. Subsequently, we describe our pedagogical approach in more detail, and discuss the impact that our approach has had on the success of our students.
Perhaps the most influential discussions on problem solving have been those of Polya [13]. The seminal How to Solve It has been highly influential in problem solving in Mathematics education, and has inspired similar processes in Computer Science education [2, 12]. One of the earliest discussions on problem solving in Computer Science, Riley [14] draws from work by Knuth [10] in his discussion of the need to teach students the problem solving process, exploring the teaching of top-down step-wise refinement approaches to solution development. This work revolves around the demonstration and study of complete solutions to problems; including all aspects of the problem solving process but as a fait accompli. More recent work emphasises the use of robots and group work to explore the problem solving process [6]. In this example, students must lead the problem solving process, but start with a partially specified problem. Allan and Kolesar [1] present an alternative approach to teaching problem solving, that is designed to address a diverse intake in an introductory Computer Science class. Their approach is to introduce a preliminary course in general problem solving before teaching programming concepts. In this preliminary class, students are introduced to logic puzzles to explore the problem solving process, similar to the Puzzle Based Learning Approach introduced by Michalewicz and Michalewicz [12], complemented with integration of foundational programming concepts, including data types and arithmetic operations. However, as Riley discusses “it is clear that programming is a special type of problem solving” [14] and requires its particular art and creativity to be explicitly addressed.
dent performance. Studies have shown a strong correlation between attendance and student performance, both within traditional didactic lecture style courses, and courses based around active, or cooperative learning principles [17]. A lack of confidence in their own abilities plagues many first year students, as they feel anonymous and out of their depth in the University environment. In order to become experts in their field, students must practice, and research indicates that expertise corresponds to repeated application of theory and repeated practice, even among elite performers [5]. Furthermore, cooperation with colleagues - working as a group rather than alone - is suggested as a key requirement for expertise in software development [16]. Glasser [9] draws a distinction between “learning by observing” and “learning by doing” and “being involved”: students retain approximately 10% of what they read, 20% of what they hear, but 70% of what is discussed with others and 95% of what they teach to someone else. As teachers, we try to ensure our students have a good knowledge base, but when applying a traditional didactic model it should be no surprise that our students do not recall all of the required material, or understand all of the required concepts. Cooperative learning [15] is a teaching strategy where students, traditionally in small groups, work together to improve their understanding of a given topic. Each student is responsible for their own learning, as well as for helping their teammates learn. Cooperative learning is an example of active learning, in that students work together to gain an understanding of concepts and apply knowledge, encapsulating a philosophy of practice and application rather than learning through observation. Cooperative learning can be viewed as a natural approach to teaching problem solving within Computer Science. Working as teams and exploiting the synergy that forms from group discussion is an essential element to the everyday work of a Computer Scientist. Adopting a more authentic learning approach to problem solving provides many benefits for students, beyond solely a better understanding of the problem solving process itself.
3.
4.
2.
RELATED WORK
A BASIS IN COOPERATIVE LEARNING
Engaging first year students is a difficult and well-recognised problem, as students must combine the development of independent study skills with mastery of their chosen topic. This is further complicated by the transition to University life, requiring most students to enter an alien education system, consisting of large classes, a de-personalised administrative system and separation from their peer group. Studies indicate that students feel “part of an anonymous mass” [18] and that one of the most common reasons for leaving University is a feeling of isolation and loneliness [3]. Student engagement within introductory undergraduate courses is strongly related to overcoming problems in the transition to tertiary education. Students suffering from transition are likely to miss classes and be distracted in those that they do attend. Missing classes impacts upon engagement directly, as students who feel left behind can easily become disillusioned about their ability to succeed at University. Conversely, students who participate and engage in the classroom are more likely to form bonds with their peers, overcoming transition issues and encouraging them to continue with their studies [11]. Increasing student engagement and attendance has the benefit of decreasing attrition, but has a perhaps more significant impact on stu-
AUTHENTIC PROBLEM SOLVING
An integrated approach to teaching authentic problem solving processes has been introduced to an introductory computer science class at the University of Adelaide. This course contains 200-250 students comprised evenly of domestic and international students. The course is taken by students from a broad range of disciplines, including Computer Science, Engineering, Commerce and Arts. The majority of students who take this course are entering University directly from the secondary education system and are new to the process of self-directed learning. The approach is based on the application of cooperation and active learning throughout all classes, and incorporated in support systems. This changes the style of education from the traditional didactic lecture style to a more interactive, student-driven approach.
4.1
Observing and Engaging
In an introductory computer science class we wish students to learn the different programming concepts, how to apply each and how to compose them to solve a larger problem. Problem solving skills are used both in the identification of the specific programming concepts to use in solving a problem, and in directing how programming concepts
5
should be composed. Our main exploration of this process is through a series of one-hour lectures, held three times a week to all students in the class. Lecture classes adopt a combination of observation using known-answer questions, and experiential learning using Worked Examples questions. These are designed to encompass the spectrum of the problem solving process:
Address Book MaxElements CurrentNumber Add Delete Search
Address Book MaxElements CurrentNumber Add Delete Search
• observing the application of programming concepts • observing authentic problem solving • cooperative problem solving An essential element of all lectures is the use of computerassistance, demonstrating the application of concepts and the development of solutions using the same laboratory environment and tools that the students will use themselves. Over a period of 4 years, the degree of cooperative learning involved in each class has been increased based on feedback from students, and analysis of course results. In order to engage the students in the learning approach, the course starts with a discussion of the benefits of cooperative learning and related research [9].
4.1.1
0..1
*
Entry PhoneNumber Name
Person * MaxNumbers Name 0..1
(a)
(b)
* PhoneNumber Number Location
Figure 1: Alternative Designs We have been contracted to develop a new mobile phone. We decide to build a software simulation in Java of how it is going to work. Problem solving lectures followed the following process: elaboration of the problem, identification of key elements of the solution, and concluded by identifying key classes and necessary algorithms. The lecturer led whole-class discussion in each stage, with individual students contributing questions and design ideas at requested points. An important aspect of these lectures was to explore the potential problem space, rather than focusing on one planned pathway. Multiple solutions, based on the inputs of the students, were presented. Two or more potential solutions were then taken from the design phase through to implementation, enabling discussion of the positives and negatives of each selected solution. Extending our example, a common design aspect targetted by the students was the design of an Address Book. Figure 1 illustrates two common designs identified by students. Figure 1(a) illustrates a simple design, where an address book consists of a set of (name, phone number) pairs; Figure 1(b) presents a slightly more complicated model, where an address book consists of a set of entries that model a person, while a person may have a set of phone numbers. The second design is more elaborate, but has the advantage that multiple phone numbers that belong to the same individual are easily identified, making subsequent computation simpler. Exploring poor design choices, such as inappropriate data type selection or class design, enabled students to observe the impact of such choices. This not only assisted them in identifying their own poor design choices, but also enabled them to observe failure and recovery as a normal part of the software development process. Exploring “wrong directions” and the results of failure can be important in establishing a starting point for divergent thinking, which stimulates creativity [8]. To extend our example further, students often reached this problem when discussing appropriate data representation for a phone number. Many students initially suggested an integer representation; once they worked through an example illustrating the representation of the number, however, they soon realised that that was inappropriate.
Application of Programming Concepts
Traditional teaching approaches describe programming techniques via examples of code. Moving away from this methodology to the demonstration of programming enabled students to observe what they would soon practice. The process initially was simple: whenever we came across a code example in our lecture notes, we replaced it with a live demonstration of developing said code. This enabled us to demonstrate the composition of programming concepts, such as selection and iteration statements, and the use of the laboratory environment. Our live demonstrations were performed using step-wise refinement; we discussed each step with the students and explained why we took the selected action. Students received a documented description of the development process and resulting code in their lecture notes. Discussions with our students indicated that this approach was not sufficiently engaging for our brighter students; the printed descriptions were adequate for these students to learn the application of programming concepts. Further, our weaker students indicated that they wished to see more examples of this kind. This left us with a dilemma: supplementary documentation was essential for our students to reflect upon lecture activities, but should not be at the expense of boredom! Our solution was to present two examples of application for each concept - one in the provided documentation, and another through live demonstration.
4.1.2
0..1
Observing Problem Solving
Demonstrating the application of programming concepts enabled students to observe the construction of the building blocks of a software system. This is only part of learning the software development process; an understanding of the required problem solving skills is also essential. We have integrated Problem Solving lectures at threshold points in our curriculum. At the stages where students must learn to compose programming concepts, and to solve more abstract problems, we insert a lecture dedicated to the demonstration of live problem solving. The process in these lectures is to start with a high level, and incomplete, problem specification, for example:
4.1.3
Cooperative Problem Solving
Our final problem solving component, and perhaps the most crucial in establishing authenticity and engagement, is cooperative problem solving. Our initial approach consisted of an integrated approach to cooperative learning extending
6
4.3
throughout lecture and tutorial classes. Starting in 2006, we held weekly Worked Examples lectures where the students were presented with a small set of problems to solve. The problems were designed to utilise the programming concepts demonstrated in the previous week. The distinction that we made between these lectures and the Problem Solving lectures was that in these the students led the activity, and the lecturer acted as a scribe. In this initial attempt, we adopted a co-lecturing approach with two lecturers engaging the class in discussion to explore the problem space. Although the students found this an enjoyable experience, we found that they were acting as observers and did not naturally take a leadership role. To address this issue in 2007, we adopted a small group cooperative approach. From the first class, we organised students into small groups of 3 or 4 students. Worked Examples lectures then involved allocating 2 or 3 problems across the individual groups. Groups were then asked to discuss the problem to make sure that each member of the group understood what was being asked, to design a solution and to start to develop a software implementation of their design. The role of group scribe was rotated within the group throughout lectures, giving every student a chance - and the responsibility - to lead the process. In these classes, the lecturer moved between groups, advising them and answering their questions. The lecturer was then able to observe common problems, and to gather examples of different solutions. In the last 10 minutes of the lecture, the lecturer summarised common issues and presents one or two example designs. Multiple solutions to the problem were then posted to the electronic bulletin board following each lecture to enable the class to continue its discussion. Students tended to remain in their initial groups for the remainder of the semester, regardless of whether they were undertaking group or independent work. We feel this is of great benefit in an introductory class. 30% of students who continued with their studies reported that the establishment of a peer group was the significant contributing factor [4]. Weekly tutorials were held in a similar style. Students were expected to submit answers to a set of tutorial questions prior to the tutorial, which were then assessed by the tutor. Within the tutorial session, the students worked in small groups to elaborate on their answers with each group working on a different problem. Each group then presented its solution to the rest of the tutorial class.
Analysis
Our experience is that students are creative when they are allowed to be. If students feel that there is only one right answer to a problem, then they may feel restricted when experimenting on their own until they have been affirmed with selecting the right approach. When presented with the idea that multiple solutions can be correct, but have different tradeoffs, then they are more confident in exploring on their own. This could result in greater motivation to learn as well as understanding and thus manifest itself as improved learning outcomes for students. Analysis of the course results using student experience surveys indicate that students feel more engaged with the course and the subject matter since the authentic problem solving teaching has begun. The surveys taken from 2005 to 2008 show that broad agreement with the following 7 point Likert style questions has increased over this period, where broad agreement is the percentage of students who have responded positively (not neutrally) to the question: • This course stimulates my enthusiasm for further learning increased from 57% to 74%. • I am motivated to learn in this course increased from 60% to 71%. • This course helps me develop my thinking skills (eg. problem solving, analysis) increased from 79% to 88%. • I understand the concepts presented in this course increased from 64% to 80%. Figure 2 shows the attendance rates in practical classes in comparison with lecture attendance rates and overall attrition rates for the course. A minor improvement can be observed in practical attendance from 2004-2007. Lecture attendance rates from 2004-2006 are not significantly different, indicating little impact from the emphasis on observation in our initial approaches to exploring problem solving. Lecture attendance increased dramatically once cooperative learning activities were introduced (2007). 100 90 80 70
Practical 60
Lecture 50
Cooperative Support Systems
Attrition
%
4.2
40
We have adopted a cooperative approach to our provision of support services, basing them on localized, peer support and voluntary programs with significant success. Our Computer Science Learning Centre is a space positioned near the first year practical laboratories where students may go for help on any aspect of studying Computer Science. The Learning Centre is staffed by senior undergraduate students who have undergone the same small group and cooperative learning training as our tutors. The Learning Centre staff act as informal tutors, providing help and advice on topics ranging from Java fundamentals to exam study techniques. The Computer Science Learning Centre is now the focal point for students within the School, with senior students often volunteering their time within the centre to help junior students.
30 20 10 0 2004
2005
2006
2007
Figure 2: Attendance rates from 2004-2007. Although it is beneficial for students to attend and engage in their classes, ideally this should be reflected by an increase in their ability to apply course concepts and demonstrate core knowledge. Figure 3 illustrates average student performance in practical examinations held throughout the course, where each student is assessed as an individual. The first practical examination (PE1) assessed fundamental computer
7
100.00%
90.00%
[2]
80.00%
70.00%
2004 2005
60.00%
2006 50.00%
2007
[3]
2008
40.00%
30.00%
20.00%
[4]
10.00%
0.00% PE1
PE2
[5]
Figure 3: Practical examination performance from 2004-2008. awareness skills and the abilty to use the practical laboratory, rather than the application of programming concepts or software development. Questions in this examination were relatively simple: requiring correction of simple syntax errors, demonstration of the ability to edit, compile and execute source code. Failure in this examination is used as an indicator of a lack of confidence in using the laboratory facilities, and of requiring assistance in understanding instructions, rather than of a lack of comprehension of course concepts. Live demonstration of the task of programming, including failure and experimentation provides crucial experience and confidence that students require at this early stage in their program. Figure 3 demonstrates a significant improvement once we introduced live demonstrations and authentic problem solving in 2006. Figure 3 also demonstrates results for the second practical examination (PE2), which assesses problem solving skills and the application of programming concepts. As can been seen in the figure, the performance of students improved significantly once we introduced cooperative learning techniques (2007-2008), with the continued improvement attributed to the improved facilitation of the learning groups gained through our experience with this technique.
5.
[7]
[8] [9]
[10] [11]
[12]
[13] [14]
CONCLUSIONS
In this paper we have described an approach to establishing authentic processes for problem solving, with subsequent increases in student confidence and engagement. Our methodology consists of combining observation of the application of programming concepts, observation of authentic problem solving processes and participation in cooperative problem solving activities. The result of these activities has been increased attendance, participation and ability to apply course concepts. Students have taken on these ideas to create their own cooperative learning communities outside of the classroom, including establishing online problem solving forums where students set their own problems and rules for success, such as fastest execution time or earliest correct submission. Interestingly, both cohorts of students independently developed a variation on these forums in response to exposure to cooperative learning approaches.
6.
[6]
[15]
[16]
[17]
[18]
REFERENCES
[1] V. Allan and M. Kolesar. Teaching computer science:
8
A problem solving approach that works. ACM SIGCUE Outlook, 25(1-2):2–10, January/April 1997. D. J. Barnes, S. Fincher, and S. Thompson. Introductory problem solving in computer science. In Proceedings of the 5th Annual Conference on the Teaching of Computing, pages 36–39, August 1997. R. Burns. Study and stress among first year students in an australian university. Higher Education Research and Development, 16:61–77, 1991. H. Cameron. Assessment and feedback in higher education: Key links in the learning chain. In Proceedings of the 2nd Education Research Group of Adelaide Conference (ERGA 2007), September 2007. K. A. Ericsson, R. T. Krampe, and C. Tesch-Romer. The role of deliberate practice in the acquisition of expert performance. Psychological Review, 100(3):363–406, 1993. T. Flowers and K. Gossett. Teaching problem solving, computing and information technology with robots. Journal of Computing Sciences in Colleges, 17(6), May 2002. D. Ginat. Misleading intuition in algorithmic problem solving. In Proceedings of the 32nd SIGCSE Symposium, pages 21–25, 2001. D. Ginat. Learning from wrong and creative algorithm design. In Proceedings of SIGCSE’08, March 2008. W. Glasser. The Quality School: Managing Students without Coercion, 1st edition. New York: Harper Collins, ISBN: 006055200X, 1990. D. Knuth. Structured programming with go to statements. Computer Surveys, 6(1), December 1974. C. McInnis, R. James, and R. Hartley. Trends in the first year experience in australian universities. Technical report, DETYA, Canberra, 2000. Z. Michalewicz and M. Michalewicz. Puzzle-Based Learning: An Introduction to Critical Thinking, Mathematics, and Problem Solving. Hybrid Publishers, June 2008. G. Polya. How To Solve It. Princeton University Press, 1945. D. Riley. Teaching problem solving in an introductory computer science class. ACM SIGCSE Bulletin, 13(1):244–251, February 1981. B. Smith and J. MacGregor. What is Collaborative Learning? National Centre on Postsecondary Teaching, Learning and Assessment, Pennsylvania State University, 1992. S. Sonnentag. Expertise in professional software design: A process study. Journal of Applied Psychology, 83(5):703–715, 1998. M. Urban-Lurain and D. J. Weinshank. Attendance and outcomes in a large, collaborative learning, performance assessment course. In Annual Meeting of the American Educational Research Association (AERA), 2000. N. R. White. Tertiary education in the noughties: the student perspective. Higher Education Research & Development, 25(3):231–246, 2006.