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; Jenkins, 2002; McCracken et al., 2001; Proulx, 2000). Difficult to learn, programming skills are difficult to teach too (Allison, Orton & Powell, 2002), not least because "traditional teaching methods do not adapt well to the domains of coding and problem solving, as it is a skill best learned through experience" (Traynor & Gibson, 2004, p. 2). According to Kolling and Rosenberg (2001), the situation is even more challenging when it comes to teaching object-oriented programming to beginning students as "software tools, teaching support material and teachers' experience all are less mature than the equivalent for structured programming" (p. 1). The issue of computer programming is no different at Victoria University where, since 1999, object-oriented programming using Java has been taught to the introductory programming students. Here, too, students struggle with programming, and programming has continued to be a major factor contributing to the attrition of first year students from the computing courses. Various restructurings of the programming unit and changes to teaching methods implemented over the years, for example the use of different textbooks, or the introduction of an electronic assignment assessment system, have done little to improve the situation; a new approach was called for. To this end, a new research project, supported by a Teaching and Learning Support grant, was launched in July 2006 to investigate the nature of the difficulties encountered by programming students and develop a 'friendly' framework for teaching programming to novices; the framework was intended to make computer programming welcoming and accessible to novice programmers and, at the same time, achieve pedagogical objectives. To address the difficulties associated with computer programming, first it is necessary to understand them well. Accordingly, this article first looks in detail at the reasons why first year students find programming such a daunting prospect, and discusses the impact that poor performance or failure in an introductory programming unit can have on computing students. An overview of the various interventions created to alleviate the programming problem is also presented. Then, the article outlines the features of a proposed approach to teaching introductory programming currently being developed at Victoria University.
Difficulties Encountered by First Year Programming Students
Undergraduate students enrolling in computing courses are not expected to have prior programming experience; computing experience is not a prerequisite. While some students study some computing units in secondary schools, many do not. The lack of prior computing experience does not seem to be a problem however, the lack of problem-solving skills is. Dunican (2002) indicated that subjects offered in secondary schools do not include any logic/problem-solving modules, which puts students in a difficult position when they enrol in computing courses at university. Stamouli, Doyle, & Huggard (2004) also pointed out at the lack continuity between subjects studied in secondary schools and those encountered in the first year of university studies; they went on to say that several of the first year units including computer programming were "beyond the students' previous experience".
Even though computer literacy may be high among some of the commencing computing students, most of them tend to lack experience with programming. This includes not only program design and construction, but also routine tasks such as compiling or running a program, or, indeed, a basic understanding of a computer model with its hardware and software components. …