I read something every day where educators and/or elected officials are talking about the importance for our kids, our country, our future, etc., of teaching computer science, the sticking point being an extreme shortage of qualified teachers.
A person entering the workforce with a computer science degree is unlikely to go into teaching because of the opportunity cost: they can earn a lot more money as a software engineer.
The likelihood of getting a mid-career tech industry professional to switch into teaching is even lower. Teacher salaries are based in large part on years of service. A mid-career person switching into teaching is not going to get a mid-career teacher’s salary, they are going to get a first-year teacher’s salary.
So here’s the idea:
Give CS professionals the opportunity to apply their years in industry to years of service as a teacher.
It’s still a pay cut going from software engineering to teaching but it’s on a scale that people may be willing to take if they’re looking for a new direction in life. It’s not a pay cut to back when you were 22 years old and right out of college.
What’s the alternative? Schools can’t attract qualified CS teachers so they’re taking in-service teachers and sending them to a workshop for a few days to learn to be computer science teachers.
It’s like hiring music teachers who aren’t musicians, or Spanish teachers who don’t speak Spanish.
Are you going to have a good CS program if it’s run by someone whose only connection to the subject is a five-day workshop? No. Are kids going to get excited about computer science? No. How could they? The teacher isn’t even excited about computer science.
How can these teachers know if what they’re teaching is valuable, or how well they’re teaching it?
Programming is difficult, there’s no way around that. The first programming class I took in college had a 75 percent drop rate.
The essential difficulty is that we’re used to giving instructions to other humans. If our instructions are less than perfect and we leave out some details, people can still probably figure out what to do. If we send a text or an email with a grammatical error or a typo, the recipient can figure it out.
Computers can’t figure it out. If you’re giving instructions to a computer, everything has to be perfect and you can’t leave anything out. It’s not a natural mindset, operating at that level of detail.
UC Berkeley offers a CS class, intended for non-majors, called The Beauty and Joy of Computing, the idea being that yes, programming is hard, but it also opens up new ways for people to connect, design, research, play, create and express themselves, to translate ideas into code.
You can’t get the beauty and joy and challenge and fun of computing across to students via teachers who just learned programming at a week-long workshop last summer. The only thing that comes across is how difficult it is.
Introducing kids to computer science and programming in this way may be worse than not teaching CS at all. Kids decide pretty quickly that programming is too hard, it’s boring, they’re not smart enough, they don’t have the right aptitude, their efforts are not rewarded and they don’t want to have anything to do with it because it makes them feel bad about themselves.
Computer science is not unique in this respect, but it’s less about presenting “material” and more about conveying a way of thinking. Teachers can’t convey a way of thinking when they don’t genuinely think that way.
If teaching CS is important, provide an incentive to get qualified teachers in the classroom, who can teach what they do, teach something that is part of their life, teach something that is personal and valuable to them, and pass on their own insights and experience.
Thus spoke The Programmer.