So as you read this it is a day or two after Christmas. You may still be full from Christmas dinner and you just want to take it easy. Or it may be that you don't celebrate Christmas and you are struggling to find interesting content to read on the Internet. Well just for you I wrote this post a week in advance so you'd have something to think about.
The CSTA has been asked for feedback about changes to the Advanced Placement Computer Science curriculum and they blogged about it recently. Honestly I'm rather amazed that there are not more comments there. To me this is one of the major issues of high school computer science today. Most of this I left as a comment but I'm not sure it was posted properly. But since I decided to expand on my thoughts here that's ok.
My first thought would be to start with a list of the major/important concepts that people believe should/must be in a first course. These must then be prioritized. Then you can have a discussion about how long it takes to each each and where teachers will run out of time. We'll probably wind up leaving out someone's pet concept but there is limited time available. I've long thought that there was may too much in the curriculum.
Now here is something a lot of people don't know. I think that most people assume that to get a top score on the AP CS exam a student probably gets 90 percent of the questions right. In fact though a student who scores between 60-70 percent correct will usually get a top AP CS score. To me that screams there is too much in the curriculum.
I also think we need to think about basic concepts in a different way. We need to focus on the ones that are most constant. I know that the only real constant in CS is change but to a real extent some things will always be with us - Boolean expressions and decision structures, loops, math operations and their order, and things like that. These are required for a solid base for future training.
We need to should lower the priority on the tricky, fun to have latest fad stuff. How much of object oriented programing really can't wait until a later course?
One thing I struggle with is where does recursion fit in? I think we need a good discussion about that. I love it but is it really core? Arguments can be made either way. We haven't always had it in out mainstream languages.
We also need to revisit the case study. While I love the idea of students reading and knowing a large piece of code is the first course really the place for it? I don't think so. I would rather they spend time reading a lot of shorter (but still well-written) pieces of code.
I think we need to revisit the idea of a mandated language for the exam. Yes I know all the arguments for it. I've been listening to them for years. But at the same time it just seems like it fosters an attitude where we look at the language for things to test rather than looking for things to test and then look for what languages to use. Concepts first is what we should be doing but it easy to look at the tool (the language) and ask "how can we use this?"
Now the really controversial suggestion. The AP team should involve industry in the discussion. Not to mandate things and not the create a test designed to make students into professional programmers. And certainly not to specify a language or a development environment. That would be wrong. But industry can talk about what the basic skills and concepts they see a need for. What are the basic white board questions they ask on interviews? What are the building blocks they need to start a new hires professional development? Sure let teachers and university faculty make the final decisions but at least give industry a seat at the table.