Why am I here? What am I trying to do?

Philosophy

A computer lab, where learning takes place.

I find it rather difficult to think about a "philosophy" of teaching programming. It's the learning of programming that's the problem, and I find that I'm not exactly convinced that programming is something that can be taught. At least, I'm not convinced that it can be taught in any conventional sense of the meaning of that term.

And does a philosophy of teaching programming also have to be a philosophy of teaching? Is it not the case that programming is in some sense "special"?

Let me explain. I find it difficult to believe that anyone has ever learned to program solely from being taught; here I mean "taught" in the sense of attending lectures, attending tutorials and labs and completing coursework assignments. It may well be possible to get the basic gist of what programming is all about from "being taught", but programming is something that is learned, not taught. I suspect that this learning tends to take place when the learner finds that they absolutely have to program, possibly as part of a job, or possibly just for fun.

A long time ago, I attended an introductory programming course. As it happens it was at the institution in which I now teach. The language we were taught was Pascal, and I diligently attended all the lectures and completed all the assignments. I passed quite comfortably, even with a small disaster in the final exam. But could I program at the end? Not really.

I remember that during this course I really could not wrap my head round the idea of a "variable parameter". I also seem to remember hitting on the tactic of making every parameter a variable parameter; it seemed to work!

I really learned to program much later on, when I was doing it as a job. I was writing code that gathered data from test rigs in a diesel pump factory; if I got this wrong things might explode, and people might get hurt! That was when I actually learned to program. Asking around other members of the Commons, I suspect my experience is not unusual.

Onto a philosophy. This all means that my job (as someone who still claims to "teach" programming) is very different to that of someone who teaches, say, history. My job is to support the learners. I have to motivate them and convince them that programming is indeed a skill that they can hope to master. I have to watch for the strugglers and I have to encourage them before it's too late. I have to try to understand what it is like to learn to program, and specifically what it is like to learn to program as part of a degree programme in a mass Higher Education System at a research-led university. My role is very much more of a motivator rather than something that someone might recognise as a teacher.

But, I confess that when I "teach" programming I do still give lectures. By "lecture" I mean the sort of activity where one person stands in front of a larger number of people and talks about something. I'm not at all convinced that these quaint gatherings represent a useful activity from the point of view of conveying information about programming (how can you convey information about a skill, anyway?), but the students seem to demand them. I know from experience that if there are no lectures, they complain that there should be. They don't seem to have any firm ideas about what should be discussed in the lectures, though. This baffles me, as does the apparent widespread popularity of the "lecture" activity in programming courses.

So, the summary of my philosophy would be that my job is to support and motivate those who are learning. My job is not to teach them.

Interestingly, I suspect that I have a rather different philosophy when I am teaching databases. I can see at least parts of this subject as a body of knowledge that possibly can be communicated by a lecture. For that matter, the philosophy is probably different again when I am teaching computer graphics or networking!

Artefact

This paper illustrates pretty well how I came to these views: Tony Jenkins, Teaching Programming: A Journey from Teacher to Motivator, Proceedings of LTSN-ICS Conference, London, 2001. [PDF]

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License.