A recent issue of Science has an article on the pipeline for computer science teachers . . .
The first sentence says, “It’s not easy to teach a subject in which you have no training.”
That could be the whole article, really. That’s about all you need to know about the current state of computer science instruction: It’s not easy to teach a subject in which you have no training.
Cameron Wilson, chief operating officer and president of the Code.org Advocacy Coalition, is quoted as saying, “It’s really hard to convince a computer science professional to give up a job that pays up to three times more to pursue teaching. And I don’t think we should.”
Wilson’s opinion that computer science classes should not be taught by someone who actually knows something about computer science is probably influenced by the fact that Code.org is one of the leading providers of training programs and online curricular resources for in-service teachers tasked with teaching computer science.
How would this “train a neophyte” scheme work in other academic areas?
Assuming you could provide a one- or two-week training workshop to prospective teachers, would you:
- Hire someone who has never played an instrument to teach a music class?
- Hire someone who has never picked up a drawing pencil to teach an art class?
- Hire someone who doesn’t speak Spanish to teach a Spanish class?
These all seem like absurd ideas with a very low ceiling on what you could hope to accomplish pedagogically. Why does anyone think it makes sense for computer science? Someone needs to explain that to me.
Putting non-practitioners in the CS classroom also requires, in addition to the teacher training, a second key component: the prefabricated curriculum.
Teachers are not able to design and teach a year-long class on a subject in which they have themselves only a week or two of experience, so Code.org and others offer packaged courses delivered to students online.
I’ve had an opportunity to see this in action. I volunteer two mornings a week at a local high school, helping out with the first period computer science class. It’s a mixed class, with most of the students taking AP Computer Science Principles, and a handful of kids taking an introductory programming class in Python.
The AP students are using UTeach, supplemented by the Berkeley BJC curriculum. The Python students are using CodeHS.
The teacher, a converted math teacher, does little to no independent instruction during the class period.
The material is too hard in my opinion for most people who are not programmers to read and understand and to figure out the assignments without a lot of help. Keep in mind that the teacher is also not a programmer.
The first two programming classes I took in college had a ~75 percent drop rate. Programming is hard but it can also be fun and beautiful. I don’t think a teacher who is not a programmer is able to convey that. Minus the beauty and fun, there’s nothing left but the difficulty.
I don’t see most students having what it takes to push themselves through difficult material delivered to them via a computer screen with no human interaction.
They give up and they blame themselves. I’m not smart enough for this. I don’t have what it takes.
It’s discouraging to see this because even kids who are not going to be programmers can learn useful ways of thinking about and solving problems from a computer science class . . .
- How to break down complex problems into manageable parts
- How to recognize patterns among and within problems
- How to recognize important information vs. irrelevant detail
- How to develop step-by-step solutions to a problem, or rules to follow to solve a problem
It’s a way of thinking that can’t be taught by someone who doesn’t genuinely think that way.
Thus spoke The Programmer.