Last week, Mark Guzdial asked What does it mean for Computer Science to be harder to learn than other STEM subjects? as a follow up to his ACM Blog post this month and the ensuing discussion.
You should read both posts but here's how Mark started off the follow up:
I made an argument in my Blog@CACM Post for this month that “Learning Computer Science is Different than Learning Other STEM Disciplines,” and on Twitter, I explicitly added “It’s harder.”
When you talk about how hard or easy it is to teach a subject you can do so at many levels. college, high school, middle etc.. Since most of my career has been as a High School guy, let's focus there.
I do in fact believe that it is hard to teach CS, at least to do it well but is it harder to teach then other STEM subjects?
Let's see how we're doing in those other subjects. I took a look at the New York State Regents Exam results from 2015/2016. I'm certainly not a believer or supporter of standardized tests but they're a convenient measure for the sake of this post.
Only 58% of test takers scored 65 or higher on Integrated Algebra and only 41% scored 3 (proficient) or higher on the Common Core version with far more students taking the Common Core exam.
Higher performing schools frequently offer Algebra in 8th grade but in the lower performing districts, students frequently take it over the course of two years.
The Geometry regents boasts a passing rate of about 40%. Trig does a little better.
The science regents exams look a little better but overall, these are not terrific results, particularly on the classes that are required for graduation.
It seems that those other STEM fields aren't so easy to teach after all.
On the other hand we have CS. If you listen to all the press releases and media attention on APCS-P from this past year it would seem that CS is easy to teach and learn. We have all these high school students mastering a "college level" course and we can prepare teachers to be master CS instructions with just a bit of in-service professional development.
The truth is, of course that CS isn't easy to teach. When you're a summer or after school program or even an elective it's easy to create a fun experience using shiny tools to self selecting students but when you have to take everyone and prepare many of them to succeed in more advanced classes we have a real challenge. We really should be looking at retention in more advanced CS classes rather than just passing the intro ones. Most students won't go beyond the intro class in any given subject but the ones that do must be well prepared. Unfortunately, I fear that the people who will get the blame when kids drop CS later on will be the teachers of the more advanced classes regardless of who, if anyone, is at fault.
Teaching CS is hard. It's brand new and very open ended. When programming a solution to a problem kids start with a blank slate. They don't have the library of patterns, vocabulary or idioms needed to build solitions. There are many ways a teacher can scaffold the learning. Code tracing, analogies, Parsons problems and more but the truth is teachers strong in both content and pedagogical knowledge are still in rather short supply and as Mark wrote on his blog the body of knowledge on teaching CS is just not that mature.
On the other hand, Algebra students usually had a first look at some of the topics prior to the class and much of the class can be "learned" through memorizing relatively short procedures and patterns. This might not lead to a depth of understanding but it does get you past standardized tests. On the science side, the Living Environment exam is really just a reading test. On the other hand, we're supposed to start teaching proof to students in Geometry and that's really hard to do.
So, teaching in general is hard and teaching CS is no exception. At least it is if you're doing it right.