Improving Progression and Satisfaction Rates of Novice Computer Programming Students through ACME-Analogy, Collaboration, Mentoring, and Electronic Support
Miliszewska, Iwona, Venables, Anne, Tan, Grace, Issues in Informing Science & Information Technology
Computer programming is an integral part of a computer science curriculum and a major stumbling block for many 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 also difficult to teach (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). Lister et al. (2004) emphasises the need for novices to be able to read code first before attempting to write programs. 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, such as the use of different textbooks or the introduction of an electronic assignment assessment system, have done little to improve the situation (Miliszewska & Tan, 2007). A new approach was needed. A research project, supported by a Teaching and Learning Support grant, was launched in July 2006. The project investigated the nature of the difficulties encountered by programming students and developed a 'friendly' framework for teaching programming to novices; the framework aimed at making computer programming welcoming and more accessible to novice programmers and, at the same time, achieving pedagogical objectives.
The first stage of the study examined the reasons why first year students find programming such a daunting prospect, and identified the various interventions reported in the literature that had been created over the years to alleviate the programming problem. The outcomes of the first stage of the research study were reported in 2007 (Miliszewska & Tan, 2007). The next stage of the research focused on the development of a new strategy to address the introductory programming problem. This paper presents in detail the features of this new strategy to teaching introductory programming and discusses the outcomes following the deployment of the strategy in semester 1, 2007.
Introductory Programming--Overview of Problems and Strategies
Introductory programming has been widely recognized as a major stumbling block for many computing students. Although computer literacy is high among some of the commencing computing students, most of them tend to lack programming experience. And it is the students' lack of problem-solving skills rather than the lack of prior computing experience that appears to be a problem (Dunican, 2002). In addition to the absence of problem-solving modules from Australian secondary school curricula, the lack of continuity between secondary and first year university studies exacerbates the problem; computer programming in particular appears to be "beyond the students' previous experience" (Stamouli, Doyle, & Huggard, 2004).
Lack of prior experience with programming includes lack of familiarity with complex tasks such as program design and construction, but also routine tasks such as compiling or running a program; sometimes, students even lack a basic understanding of a computer model with its hardware and software components. …