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."

This is just wrong and a waste of time. There are deep ideas in programming that are language-independent. As a programmer who knows multiple languages in the past and the present, I can tell you that I have few, if any, problems in shifting from one language to another because I have a framework of concepts which works in Java, JavaScript, Fortran and Python, C and more. It is this framework we need to teach and make syntax look unimportant, irritating and trivial.

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. 

More Information

A new pedagogy to address the unacknowledged failure of American secondary CS education

Related Articles

Teach Code In School - Before It's Too Late!

Trouble At Code School

Deep Teaching

The Real Reason To Learn To Program - The Power

MOOCs Fail Students With Dark Age Methods

Programming - A Life Long Challenge

Teach Concepts Not Just Code

Does Math Help Programming Or Programming Help Math?

What makes a programmer

Raspberry Pi or Programming - What shall we teach the children?

To be informed about new articles on I Programmer, sign up for our weekly newsletter, subscribe to the RSS feed and follow us on Twitter, Facebook or Linkedin.



World Emoji Day 2024 Surveys Most Confusing Emojis

This week sees the 'celebration', if that's the word we're looking for, of World Emoji Day, the annual emoji-fest that has happened on July 17 for the last eleven years. This year we've largely b [ ... ]

OpenJDK Project Leyden Now Available

Project Leyden, an OpenJDK project, is now available in an early access release. Leyden aims to improve the startup time, lower the warmup time, and reduce the footprint of Java programs. It aims to d [ ... ]

More News

kotlin book



or email your comment to:


Last Updated ( Wednesday, 01 July 2020 )