Experience Teaching Introductory Programming Courses

Experience Teaching Introductory Programming Courses

Liguo Yu (Indiana University South Bend, South Bend, IN, USA)
DOI: 10.4018/IJQAETE.2016010104


This paper describes the teaching methods and teaching experiences of an instructor who has been teaching computer science freshmen for more than ten years. Problem-based learning has been used in introductory programming courses to enhance the quality of learning. The common problem in introductory programming courses is that instructors quite often focus mainly on programming language syntax and usage but ignore the real world applications of these language features. Accordingly, students are likely to find out that it is difficult to apply their programming skills on solving complex problems in their high level courses. Through introducing problem-based learning in introductory programming courses, students not only could obtain experience of dealing with complex problems, but also could practice other soft skills, such as team working skills, which could better prepare them for junior and senior level coursework and capstone projects. In addition, other philosophy issues related to teaching introductory courses are discussed and tentative solutions are presented.
Article Preview

1. 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 learningProblem-based learning
Knowledge is passed from instructor to studentsKnowledge is learned through solving real-world problems
Skills are educated through lecturesSkills are learned through practicing
Computer science knowledge is presentedComputer science knowledge is applied
Unique solution is providedMany solutions are discussed
Instructor is the customer who has the clear and fixed requirementsInteracting with real-world customers whose requirements could be vague and variable
Problems from the textbook may be outdated or unrealisticSolving the real-world problems that students can relate to
Failure of the assignments indicates failure of the learning objectiveFailure, which is part of the learning process, is allowed, and lessons could be learned

Complete Article List

Search this Journal:
Open Access Articles: Forthcoming
Volume 6: 2 Issues (2017)
Volume 5: 4 Issues (2016)
Volume 4: 4 Issues (2015)
Volume 3: 4 Issues (2014)
Volume 2: 4 Issues (2012)
Volume 1: 2 Issues (2011)
View Complete Journal Contents Listing