I ran across Robert Floyd's Turing Award lecture last night. It was an interesting read and frankly there was a lot in there to make me think about the state of computer science, computer programming and how we teach those two closely related topics. One question he mentions is asking another computer science teacher "what he teaches in his introductory programming class." The answers he often got were "Fortran" or "PASCAL". The talk he gave was in 1978 and those were the languages used. Today we often get the answer "Visual Basic" or "Java" or even "Python."
But as Dr. Floyd suggests those are really the wrong answers. Those languages are just syntax and grammar and not what we really need to be teaching. We need to be teaching design concepts, paradigms of programming, ways of looking at and solving program, and in short concepts that are (usually) language independent.
The Fortran I learned in the first programming course I took is all but dead. COBOL is pretty dead outside of specific and legacy applications as well. (Not that either language seems to ever want to die completely and yes I know that people still write new applications in them.) But the concepts I learned live on and have served me well long beyond those courses.
When Dr. Floyd gave his talk structured programming was the new paradigm and now it is an old one. Top-down design was new then and now is old. But they are both still valid even today. Object Oriented Programming is the new thing and it is great. But it doesn't replace the old completely.
So what then do we teach in the first programming course? Is the language important? Of course it is. Discussion of which language to use causes great debates. My own recent post on the subject has a large number of comments. But that is not the essential question and I have come to think that it (the language) should not be the name of the course and it really should not be the foundation of what the course teaches. When the language becomes the subject the value of the course in preparing students for a live-long career is diminished.
So what do you teach (or recommend teaching) in your first programming course?