Article Preview
Top1. Introduction
Programming is a fundamental skill for computer science students (Davies et al., 2011). Usually, programming is the first course offered to computer science freshmen. It might take one or two semesters for students to learn their first programming language, which could be either C++ or Java, as can be seen in most higher education institutions. Because in most cases, this will be the first time that students get to know a programming language, most instructors consider teaching how to use a language a higher priority in these courses. Accordingly, students could focus more on language syntax and usages and might not get more opportunities to practice their analytical skills and problem-solving skills.
The drawbacks of focusing mainly on language aspects in introductory programming courses are not commonly understood in computer science education community (Huet et al., 2004). Therefore, they are described here. First, students could understand one programming language well but might be hard to know how to use it properly. Second, given the diverse functions provided by a programming language, students might not know which language feature should be used to solve a problem. Third, students might not get a chance to appreciate the complexity of real-world problems. Studies show that there is a great need to change this traditional teaching approach (Ngo, 2015).
Within the computer science community, it is commonly agreed on that lecture-based learning is not the most effective approach in ensuring the teaching quality and helping students achieve their learning objectives. Problem-based learning (Barrows and Tamblyn, 1980; Jones, 2006), on the other hand, has become a major teaching and learning method used in computer science education. However, it is not an easy task to develop an introductory programming course based on problem-based learning, as in most institutions, the learning objectives of introductory programming course is about language education. Some educators even consider that it is not important or necessary to focus on problem solving in introductory courses. The logic of these beliefs is that we do not teach our kids how to write an essay in their first grade, instead they should be taught how to read. The problem with this analogy is that our college students are not elementary school kids and they are adults; we do not need to spend about 12 years to teach an adult a programming language as we teach English to K-12 students. Accordingly, we should not follow exactly the same teaching method used in elementary or secondary education.
Problem-based learning is a student-centered learning approach. The experience of solving real-world problems can help students acquire knowledge and/or skills that could better prepare them for high level courses and their future career (Hmelo-Silver, 2004; Kay et al., 2000). To reduce the gap between industry expectations and what the academia can provide, problem-based learning has been introduced in computer science and software engineering education (Richardson and Delaney, 2009; Armarego, 2002; Richardson et al., 2011). Table 1 summarizes the differences between instructor-centered learning and problem-based learning in computer science and software engineering education (Yu and Adaikkalavan, 2016).
Table 1. Comparison of instructor-centered learning and problem-based learning (Yu and Adaikkalavan, 2016)
Instructor-centered learning | Problem-based learning |
Knowledge is passed from instructor to students | Knowledge is learned through solving real-world problems |
Skills are educated through lectures | Skills are learned through practicing |
Computer science knowledge is presented | Computer science knowledge is applied |
Unique solution is provided | Many solutions are discussed |
Instructor is the customer who has the clear and fixed requirements | Interacting with real-world customers whose requirements could be vague and variable |
Problems from the textbook may be outdated or unrealistic | Solving the real-world problems that students can relate to |
Failure of the assignments indicates failure of the learning objective | Failure, which is part of the learning process, is allowed, and lessons could be learned |