There is No ‘Silver Bullet’ in Learning Computer Programming

ProgrammingThere is an increasing depth of literature on innovative techniques to teach introductory programming. Considerably less has been written on the best way to learn programming and what there is, tends to be in the cognitive psychology literature rather than in that of computing education (Mayer 1981).

A review of cognitive style and personality factors concluded that success in learning computer programming can be predicted by a range of factors including: field dependence, divergent thinking and to a lesser extent, a reflective (as opposed to impulsive) cognitive style and internal focus of control (Bishop-Clark 1995). Jenkins argues that programming is simply a very difficult subject/skill and therefore it is unsurprising that students found it challenging (Jenkins 2001). Studies have investigated the factors that indicate students’ ability to learn programming – which include mathematical ability, processing capacity, analogical reasoning, conditional reasoning, procedural thinking and temporal reasoning (Pea and Kurland 1984). Programming is neither a simple single skill, nor a discrete body of knowledge. To become a competent programmer a student must master many skills. In his landmark paper ‘No Silver Bullet’ Fredrick Brooks (Brooks 1986) states

I believe the hard part of building software to be the specification, design and testing of this conceptual construct, not the labour of representing it and testing the fidelity of the representation. We still make syntax errors, to be sure; but they are fuzz compared to the conceptual errors in most systems. If this is true, building software will always be hard. (p.182)

To first year computing students this statement is particularly true, wherein the first semester of programming students are likely to encounter difficulties with all of the points that Brooks cites. Apart from understanding the algorithm design process and algorithm creation, novice programmers are required to master fundamental abstract components in their journey, such as initiating a project; the programming language with which they will be working and the programming environment to compile and run their source code. The anxiety provoking aspects of the mental schema required to achieve these tasks is a significant learning related factor which forms a central part of the research focus of this thesis.

Many novice C programming students are introduced to their first computer program with code similar to the following:

void main ()
  printf("Hello world!");

The student is introduced to the most simple of computer programs, where only the basic concepts of a main function and system output are presented. Additional components are included over the course of the term and by the end, students have gradually been introduced to the complete language. Students are expected to practice the use of the programming concepts by undertaking various exercises, until they have demonstrated an ability to author programs given specifications.

The process of transforming specifications into working program code is sequential involving five particular components:

  1. specification
  2. algorithm
  3. design
  4. code
  5. test.

Starting with the specification (normally written in plain language) the student must draw on an understanding of the problem domain to devise an appropriate algorithm. In general, this involves re-writing the specification in a precise manner that is close to an implementation. Perhaps the most difficult part of the task and drawing heavily on the students’ abstraction skills. The algorithm is translated into programming concepts through design and subsequently into actual program code. Given a correct design, this stage should be relatively trivial and determined by the programming language. The final stage is that of testing, which will lead to implementation of the programme.

The process is the most appropriate sequence in developing an efficient computer program, however students often leap into the final ‘code’ section before any specification or design takes place. Many novice programmers tend to concentrate on syntax (Linn and Clancy 1992) and this approach is reinforced by the way in which the topic is presented in both lectures and in books.

Programming draws on many skills, some of which are depicted below. Problem-solving ability is essential. A programmer must be able to devise ways of making the computer solve a particular problem sometimes in a particularly neat, efficient or elegant way. This involves abstracting a generalised representation of a problem from a specification. This expression must be made in logical terms (if … then …, while … do…) using elements of discrete mathematics and logic. A knowledge of the procedure of producing a problem (editing the file, compiling, producing the output) is vital. The ability to test a program thoroughly to find and correct bugs covers the final stage of the programming process. Life skills and or professional development are also facilitative and useful for computing students, as they learn how to study, manage their time, persist in the face of temporary failure and confusion, and ultimately succeed.


The skills required for programming are not applied in isolation. They are applied in the context of a particular problem or problem area. A programmer must understand the problem and aspects of the domain in which the problem exists before these skills can be applied. The precise nature of the required skills will be different in each case and so the programmer has to be flexible. In the educational environment the degree programme a student is following will also determine the amount of programming conducted, the language and environment. A challenge to juggle all!


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s