Additional profile information on Alfred Thompson at Google+
Starting back this past winter I started hearing about a National Science Foundation (NSF) project to create or perhaps promote might be a better way of putting it a new three course computer science curriculum for high schools. This is part of the Broadening Participation in Computing (BPC) program at NSF. I heard some of it at TCEA and more still at SIGCSE. It sounds pretty interesting. Clearly, in my opinion and in that of many others, we need to expand computer science education. We especially need more diversity in the field. Only some 20,000 high school students take the APCS A exam these days. That compares pretty poorly with over 80,000 in statistics which is a fairly new and still small (in AP terms) exam. Would a good course before the APCS course help matters?
What I have been specifically thinking about lately is this so-called first course. Some people refer to it as a pre-AP course but others see this as a course for far more students than just those who are headed for the Advanced Placement Computer Science course. I tend to agree. While it might be nice to have a lot more kids take the AP course – ok yeah it would be nice – I keep coming to the idea that what we need to do most in high school is:
a) get students interested in computer science and
b) give them some basics so that when they get to college/university they are ready to start if they have the interest
I’ve seen a number of my own students over the years take just one computer science course in high school and then do just fine as CS majors in college. Not taking APCS did not stop them because they had interest and some basics. So the question is – what should that first computer science course be like?
Should it have some programming in it? I’d have to say yes. But it doesn’t have to be boring or especially difficult programming. Start with Alice, Scratch, squeak/eToys or something along those lines. Then move to something a little more “real” like Small Basic, Visual Basic or perhaps Python or a functional language like F# or Scheme. Personally I’d avoid curly bracket and semi-colon languages but for some people C#, Java or even C++ will work out just fine. The important thing I think is to give teachers some choices. Let people teach with what they are comfortable with. If they like the tools teachers are much more likely to spread enthusiasm to their students. That to me is a key piece.
I think you also have to be concepts focused more than tool focused. I think that the activities at Computer Science Unplugged are great for that. its not just that they are fun and interesting it is that they move some of the focus from the physical computer and to the concepts themselves. That’s a big plus.
I’d like to see some computer history covered as well. I know. Everyone tells me history is boring. But maybe that just means we are teaching it wrong. We’ve got some real characters in the history of computers and we should play that up. There were some out of the box inspiring people like Grace Hopper for example. Let’s get some creative people to tell those stories in the best way possible. And stories are the way to do it – no dry recitation of facts and dates. That would be boring. But talk about the things that made change and innovation necessary. World War II and everything from code breaking to simple cannon trajectory calculations. Why was computing necessary for just in time inventory? And there are lots more we could come up with after a little brainstorming.
What else do we need? What concepts are key? Remember that in a single semester or even year course we can’t cover it all. Loops and decision structures? Absolutely! Right? What about object oriented design/programming? Is the first course too soon? Or should we use objects even if we don’t teach how to create them? Is recursion in or out? Can we use games as projects? Why or why not? What are good projects that build interest while teaching concepts?
Do you have or know of a scope and sequence document (or more complete package) for a first computer science course? Please send me a link at alfredth (at) microsoft.com or add it to the comments? Strong opinions about what this course should look like? Let me know in the comments, by email or write about it in your own blog and let me know about it. This is something I think needs a broad background of ideas and support.
If you’ve been paying attention to the news lately one of the things you hear about are machines on the battle field – or above it. For the most part these machines are controlled remotely by people who make the actual decision to “fire” or not. But increasingly there is interest in machines, call them robots if you like, that will make the “fire or not” decision on their own. These machines will be controlled by software. But just how do you program a machine to act ethically?
In fiction we have long had Isaac Asimov's “Three Laws of Robotics” but in real life its not that easy. Ronald Arkin, a professor of computer science at Georgia Tech, is working on this problem. He’s not the only one but you can read about him and some of the related issues at this article titled “Robot warriors will get a guide to ethics” There are also some links at his web site at Georgia Tech. It’s a tough issue. The ethical questions involved in warfare are tough in and of themselves but getting a computer to understand or at least to properly process the inputs and make an “ethical” decision raises the level of complexity.
I think this is a piece of the growing importance of discussing ethics in computer science programs. I know that many under graduate programs have an ethics course requirement. The masters program I was in had a required ethics course. But I think we need to start having these discussions in high school (or younger). Ethical behavior is something best learned young.
Follow up: Chad Clites sent me a link to an article called Plan to teach military robots the rules of war that relates to this post.
In between trips to stores and working on the yard and cooking on the grill and yes even remembering those people who have fought and died for this country I spent a lot of free cycles thinking about teaching this week end. NSF wants to have 10,000 teachers teaching real computer science courses in the next few years. Great goal. But when I hear students talk about computer science they use words like “hard” and “boring.” These are not the sort of things that attract students. So I ask myself “is computer science hard and or boring?” And the obvious answer is not to me its not. But as my son regular reminds me I tend to look at things differently. So I think about the role of the teacher in all of this.
Some years ago one of my former students paid me a huge compliment. He said that what he enjoyed was not so much learning computer science but learning computer science from me. It made my day as you might imagine. But at the same time it concerned me. I’ve seen students get excited about a subject because of a good teacher and I’ve seen students get turned off from a subject because of a poor teacher. So what then for computer science?
Can we train enough teachers to teach computer science? Probably but it’s not an easy thing. And even then is giving them the base knowledge (say more than a chapter ahead of students) enough for success? Anecdotal evidence suggests otherwise. OK there are some crazy good teachers who can teach anything, get students involved, make learning fun and all but walk on water. I don’t think I’m one of them. How many do you know? And can we get them to teach computer science? More common are stories of people drafted to teach computer science to fill up their contract or fill a need that no one else can or will fill and who share their lack of enthusiasm with their students.
So what than can we do? There was a recent article by Mortimer Zuckerman in US New & World Reports and a Bill Gates’ TED talk where they talk about quality teachers and point out that individual teachers make a huge difference. They go on to say that we should take advantage of those teachers.
Now a lot of teachers don’t like either of these position statements. The Gates talk has taken a lot of flack from teachers and people in education for example. Gates and Zuckerman dare to point out that all teachers are not of the same high caliber. That is something approaching blasphemy in the education world. Well, when it comes from people who are not teachers that is. Teachers in the privacy of the teacher’s lounge will complain bitterly about other teachers who are doing a poor job. I’ve heard it myself time and again.
So even if you don’t want to admit it there are teachers who could use some help. And some students who could benefit from a teacher with a bit more knowledge and a bit more enthusiasm for the subject. But how to make that happen?
Both Gates and Zuckerman suggest that there is a role that technology can play here. Video conferencing is one way. There are a lot of guest visits going on via Skype and that might be helpful. Perhaps we could get more outstanding lectures and demos on video so that they can be shown to more students. Perhaps we can get some online support groups (wikis perhaps or maybe online chat rooms) to get students assistance in ways that work for them. There are creative teachers in all disciplines doing great things with web 2.0 tools and we can learn from them.
And maybe we would be better off if it were easier for second career professionals to move into teaching. Some changes to certification requirements perhaps. Or perhaps some financial aid for people making the transition – income while taking certification courses perhaps. There have been industry plans from such companies as IBM and DEC in years past. Perhaps some of today’s high tech firms could invest in education in that way again.
And we need to address the “hard” part of computer science. Is it really hard to learn or are we just teaching it poorly? We have far too little investment in computer science education research. A faculty member in a computer science department can’t get tenure (or so I am told) by doing research in CS education. Education departments seem either uninterested or unable to do the research in their departments. Some universities with both education and CS departments need to invest in our future by taking this on jointly. Perhaps NSF has funds for this? If not they should. And universities will have to reward this work with tenure too!
Above all I think that any subject is interesting if taught by the right teacher and any subject is learnable with the right individualized attention to learning styles. We can do it. We just need the will to make is so.
Note that enthusiasm and fun in teaching seems to be a recurring thought for me. A couple of previous posts for example.
And on the topic of “hard” see Is science too hard or are other courses too easy?
Note: It bares repeating that these are my personal opinions and not official or policy or representation of any other individual, company or organization. Also I wrote this at 1AM for what ever that may mean. :-)