Gas station without pumps

2013 July 1

How can we get more programming taught in high schools?

In the comments on Mark Guzdial’s post Why AP CS:Principles is a good thing: Responding to Gas Station without Pumps (which is a response to my post Millions for a fairly useless new test), an interesting question has arisen: What should a CS teacher know?

I commented

I agree that figuring out what content an intro CS teacher needs to know is important, both in depth and in breadth. If we set the bar too high, there will be no CS teachers in public schools (essentially the current situation). If we set the bar too low, no CS will be taught and we’ll have to undo the damage once the students get to college.

CS as a field is still struggling with how to teach beginners (it is pretty clear that some students learn, but it is not clear to me how much this correlates with what teachers do—but that’s your [that is, Mark Guzdial’s] area of expertise, not mine).

Defining the core competencies that a beginning instructor of beginning students needs seems to me quite difficult. I suppose it starts with deciding what the students need to learn, then figuring out what the teacher needs to be able to do to get them there. I further suppose that this is the intent of the CS Principles course—figuring out the minimal set of essential skills we want out of a first course.

Garth commented

In most schools the CS teacher will also be teaching something else; Math, Science, Art or whatever so the requirements have to be realistic. I think CS Ed would almost have to be a minor, there are just not enough jobs out there yet for a teacher with only a CS Ed major.

So Garth has been thinking of it in terms of new teachers only, it seems. I suspect that we’d get more CS teachers more quickly by summer training for existing math and physics teachers than by trying to train new teachers in ed schools.

Physics teachers could be attracted to programming by a computational modeling curriculum, like the one used in the Matter and Interactions textbook.  Vpython provides a fairly simple entry point for physics teachers and students to write simulations of the sorts useful for AP Physics (both C: Mechanics and B).  I think that a computation-based text for Physics B still needs to be written, as Matter and Interactions definitely requires calculus after the first couple of weeks (or is there already an algebra-based physics book using something like Vpython?).  Once physics teachers become proficient in Vpython, it is not a big stretch for them to teach the CS Principles course (they could even continue to use Vpython for it).

Math teachers could be attracted to programming by summer workshops based around Project Euler, which provides a series of math challenges to be solved by programming (currently 434 such challenges).  Providing them with instruction in a suitable programming language (Python is a good choice for Project Euler) so that they can tackle the math problems would give them the experience programming needed before they would consider teaching programming.  Teaching them to program in Geogebra, free software for doing geometry and algebra presentations and apps, would also be valuable—both for improving their programming skills and for improving their current math courses.

The key point of both these ideas is that we could attract physics and math teachers to programming in order to become better teachers in their current fields.  That they would also become competent to teach beginning CS courses is a bonus.  Even if this approach failed to produce any new CS courses, we would still have improved physics and math teaching.  Given how addictive programming is, I think that we would also find these teachers becoming a force within their schools for creating programming courses, avoiding the current Catch-22: that there are no CS courses because there are no CS teachers, and no CS teachers because there are no courses.

I’ve not addressed in this post the initial question from the comments: what do beginning CS teachers need to know?  One implication of my proposal is that CS teachers need to be able to program.  They don’t need to be fantastically good programmers, nor do they need to know many different programming languages, but they need to be able to program and debug in the language of instruction.  They need to be able to model debugging, and they need to be able to assist students who are stuck (without taking over for the student).  They need to have personally done every assignment they assign, to figure out any ambiguities in the wording of the assignment and to make sure that it is doable with the tools and techniques that the students have been given in their class.

I think that may be enough—I don’t think that beginning CS teachers need to know software development techniques and the intricacies of the development environments and libraries beyond what is essential for the assignments.  They may choose to learn more (some math teachers might enjoy asymptotic analysis of algorithms, for example, and some physics teachers might get into programming robots), but it isn’t necessary for teaching an intro course.

I don’t think we can set the bar any lower: a teacher who can’t program can’t teach programming effectively, and programming should be at the heart of any intro CS course.


  1. I was kind of thinking of new teacher training but I was also thinking of the requirements for getting certified. In Montana to teach CS a teacher has to be certified in CS. There are no CS programs for certification in Montana. A couple of colleges advertise a CS Ed program for certification but I talked to them and the programs are vapor-ware. Offering summer programs for existing teachers is the best route to getting the largest numbers of CS teachers in the classroom the quickest but the big issue I see there is cost. What would motivate an experienced teacher to dig in their own pocket to pay for the program? School districts typically do not pay for this type of training. A new teacher still in school might see a justification for taking the required courses if it increases their marketability. And they are already paying.

    Comment by Garth — 2013 July 2 @ 07:33 | Reply

    • The Federal government gave the College Board millions of dollars to develop the test. If each teacher training for a 2-week workshop costs about $2k, then training 1000 teachers would cost about $2M.

      State certification can be a catch-22, as it clearly is in Montana.

      Comment by gasstationwithoutpumps — 2013 July 2 @ 08:29 | Reply

  2. Right. I would love to take a real, current CS course, but even the online ones are at least about $2K. I would totally take a course every summer if I had the money or if someone helped me out. Instead, I have been taking Udacity courses, which are ok, but I’m not thrilled with them. For one thing, they take longer than one might think. I spent a couple of hours yesterday on the second half of a unit. There was almost no coding in that, just watching videos. And the instructor shows only one way to do things and it’s often complex and implicit rather than explicit. List comprehension for beginners! Stuff like that.

    The best way I’ve learned is to do my students’ assignments and projects. I end up doing them during the year as they’re doing them and I’ve learned a ton that way. It allows me to go in with solutions for them, often with multiple ways of doing things: something the courses I’ve taken haven’t offered.

    Summer hackathons might work as well. I think one of my frustrations is that I just want to work through some projects with someone there to assist when needed. I don’t want to sit through a lecture on how to write a poker game. I want to write it and then work with someone to make it better.

    Comment by Geeky Mom/Laura — 2013 July 2 @ 10:02 | Reply

RSS feed for comments on this post. TrackBack URI

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: