|How To Teach Computer Science - It's The Programming Stupid|
|Written by Mike James|
|Wednesday, 01 July 2020|
A new article in ACM Inroads describes all that is wrong with secondary school level CS education. Many of us outsiders probably knew this all along.
Scott R Portnoff, a secondary school computer science teacher has been thinking hard about what is wrong with CS education. He points out that, while CS education looks as if it is being successful it mostly consists of students having fun with edutainment-style projects such as robotics. When you look more carefully students don't really seem to be making progress of a sort that really matters.
The article is a very long one and if you read it, and you should, you might very well take away some different ideas to the ones that I picked on. The key observation, however, is that programming is central to computer science and yet it is not central to computer science education.
The first question is why?
The answer is that the well known Novice Programming Failure Problem reveals that many students drop out of CS courses because they fail to learn to program. The solution, of course, is to improve the way programming is taught, but this is not the solution adopted. Instead, if programming is too hard, the expedient is to get rid of it and replace it by "survey" or overview courses. Quoting from CSTA K-12 Computer Science Standards:
"Almost since its inception, computer science has been hampered by the perception that it focuses exclusively on programming. This misconception has been particularly damaging in grades K–12 where it often has led to courses that were exceedingly limited in scope and negatively perceived by students. It also fed into other unfortunate perceptions of computer science as a solitary pursuit, disconnected from the rest of the world and of little relevance to the interests and concerns of students."
So the solution was less emphasis on programming and more on "major concepts of CS" - as if programming wasn't a major concept of CS!
"What's the harm in teaching a survey course? To contend that superficial exposure to simplified non-programming topics—even were they to include limited coverage of short programs—will later enable students to surmount the NPFP and magically acquire competence in programming is like arguing that watching French films, eating Parisian cuisine, and learning a few tourist phrases would adequately prepare students for a second-year French language course. Rather, these courses simply postpone the difficulties that the vast majority of these students will encounter should they later take a subsequent CS class that will—without exception—require that they acquire proficiency in fundamental programming concepts and skills."
You're probably thinking - "obvious"! Does this really need to be stated? Yes, it does.
The key problem, under-emphasized in the article probably out of a desire not to anger colleagues, is that most teachers of CS are not proficient programmers. They get far too little professional development in the subject and when they do get it then it is usually of the edutainment variety that the students are going to be subjected to. Put simply, the teachers have to be better than the pupils to teach the subject and with notable exceptions they are not.
"Applying the current AP training model for new CS teachers is similar to asking a teacher with no mathematics background to initiate a new AP Calculus course with just one week of training."
We have seen this before in the way computer programming courses morph into computer literacy courses. This might be fine if all you are trying to do is create the lower-value computer generalist, but a CS student needs and deserves more.
The problem is that just as math teachers teach arithmetic instead of math, because it is easier, so CS teachers teach anything but programming.
While I agree with many things in the article, I part company with its proposals when it starts to advocate a rote learning approach to programming
"One possible mechanism for why this works is as follows. As stated, language syntax cannot be taught explicitly, e.g., through grammar rules; rather it is implicitly acquired through repetitive exposure to language data/input. Memorizing a program and reproducing it without error mimics this process insofar as students must undertake numerous cycles of reading a program, writing it out without looking, and comparing. In doing so, they bombard their brains repeatedly with idealized language data. As with natural languages, the brain subconsciously constructs an internal mental representation of the syntax rules implicitly by induction from the patterns in the data."
Having taught many students of a wide range of ages, experience and background I can vouch for the fact that there is moment when they understand the relationship between the static text that is a program and the dynamic, time-dependent, thing that is the algorithm that it describes. It is like seeing a flower opening and it is worth the effort.
Programming is important and a prerequisite for CS.
Programming is not about syntax or learning a single language, it is about seeing how algorithms are captured and expressed by static text.
We need to teach programming, but we need to teach the deeper aspects of it.
or email your comment to: email@example.com
|Last Updated ( Wednesday, 01 July 2020 )|