When I first joined the University of Gloucestershire in the late nineties, we taught C. I supported the introductory programming module by helping in the labs and delivering one or two lectures. The module was structured round a single application and the students gradually learned enough C to understand how to program this application. The application was a lovely example of good design but there was a very high failure rate for the module.
When the language changed to Java in 2000, I took over the module leadership of the introductory Java module, as I had already designed and taught an introductory Java course at another university. There, I had taught an 'objects first' approach but had been dissatisfied with it as I observed that weaker students found it far too abstract. At that time, teaching Java was new and the received wisdom was that beginning programmers would take to the object-oriented paradigm easily as they were not already in the mind-set of the traditional procedural approach to programming. I had some sympathy with this as the approach to program design is entirely different. However, both paradigms use the same basic programming constructs and I had found it very restrictive trying to teach object-oriented programming when students did not have any knowledge of how to introduce functionality into their methods. I also reasoned that, as in the past I would not have dreamed of teaching user-defined data structures before teaching the basic data types, I would experiment with an 'objects later' approach.
I decided that I would teach some basic programming constructs first (basic data types, conditional, loops, methods and parameters) before progressing to objects in semester 2. Peter Annesley designed the follow on semester 2 module, where we introduce object-orientation by means of an extended example that students gradually implement through careful guidance (See GroupStudent.doc for a class diagram of a typical program). Thus, we have lots of small examples of creating and using objects in the first semester and a larger example of defining classes in the second semester. We share the delivery of both modules and this has worked quite well.
Another influence on the design of the course was a belief that students need to visualise the running of a program in some way and many need support to be able to do this. At my previous university, we had used a Turtle class written by Peter Martin to provide that visualisation and I decided to use it as a central part of the course delivery. In this case, the instructional design was influenced by the abstract nature of programming and the need to make it concrete in some way (see Lecture5.doc for an example of how it is used). Students always comment favourably about the Turtle class in the end of module questionnaire and enjoy using it.
Our courses have a strong vocational emphasis that is reflected in the ethos that programs should be developed to professional standards and with good style. At level 1, this means that students must adhere to the module Standards Manual in program layout, using comments at the beginning of every method (using javadoc in Semester 2) and choosing meaningful variable names.
Attendance had also been an issue, as in many modules. For programming, attendance is critical because of the way the concepts build upon earlier ones. In order to encourage attendance, we decided to link it closely with assessment. We have a portfolio style of assessment with one exercise a week that was required to be signed off in the lab session. This has been successful in encouraging interaction in the labs. However, when coming up to the assignment deadlines, we can be overwhelmed by waiting students and organisational changes need to be made to reduce this.
The module is structured into the 12 weekly one-hour lectures followed by a two-hour lab session plus an assignment workshop in the final teaching week. The aim in each lecture is to give an introduction to a particular topic (e.g. the for-loop). Examples are shown and brief notes handed out. Students are encouraged to use Java books to read more round a topic and as a reference. Some do this; more do not. Most of the learning takes place in the lab when students attempt the exercises and are able to ask questions.
The change to Java has been relatively successful. The drop-out rate has reduced and the module mean has improved. By the end of the first semester, students show some competence in using the basic concepts. By the end of the second semester, they have programmed complete classes; used arrays and written a test harness to test a method. Their education in object-orientation has begun and is continued more seriously in the second year. However, despite current attempts to make programming accessible, many students still find it challenging and some give up before the end of the module.
<-- Previous | Next --> |