I am cruising the blogs I read and today I saw with some excitement Mark Guzdials mention of a course at Purdue for teaching future teachers methods of teaching computer science. The course is taught by Aman Yadav and the syllabus is available at http://cs4edu.cs.purdue.edu/license. Total disappointment. This course is supposed to prepare secondary education teachers. It is absolutely amazing what a university CS department thinks is needed for a high school CS teacher. This syllabus is totally appropriate if we were teaching only the top 1% of the students. C, Java, Python, Advanced C Programming, Data Structures and Algorithms are all excellent for the APCS kids and above but there is nothing on how to teach the mainstream kids that are just taking a look at CS. We need CS teachers who have the background to tempt the non-computer non-elite into a CS class. A well prepared CS teacher should be very familiar with Small Basic, Scratch and languages of this type. Using tools like Lego Mindstorms or Arduino projects should be part of the mainstream. A prospective teacher should not just be able to program in these languages but able to teach the kids how to program and have fun using these languages. If we want to reduce the numbers of freshman high school CS students, introduce them to Java early. That top 1% will hang in there because they love it. The other 99% will say “ugh” and be done with CS forever. This syllabus does not teach prospective CS teachers to teach programming, it teaches teachers to teach ubber-geeks.
CS should not be just for CS geek, there just are not enough of them to meet the needs of the US. We need to attract the average kids into the world of programming because it is fun and has a future for them. Training CS teachers with a program like this is will attract only the CS geek teachers to teach the few CS geeks in a high school.
I remember ages ago when I showed up at my first teaching job as a math teacher. I had just spent the last four years learning calculus, ordinary differential equations, abstract algebra (I can still spell group, field and ring) and a few other maths I cannot remember the names of. All this college math preparation and I was totally unprepared to teach high school freshman math. In four years of college math I do not think I ever used F.O.I.L. or tried to explain why it is worthwhile remembering the quadratic formula. A semester long methods does not really cover the issues.
Teaching programming does not mean knowing only how to program. It means knowing what problems a beginner programmer is going to make and what they misunderstood that led to the mistake. It means being able to approach a concept at a 14 year old kid’s level, which is not the way it is taught in a collegiate C course. It means making a possibly dry topic interesting by hooking it to something that would excite a kid. It means having a clue what to do if hired by a school with 5 Dell GX160s and asked to build a 4 semester CS program for sophomores and juniors. These are types of topics that need to be a major part of those 19 – 21 credits. The problem is there probably is NO collegiate CS professors that have ever encountered any of these issues.
Programs like that at Purdue do not generate CS teachers that can get kids interested in CS. If every kid walked into the high school CS classroom ready for APCS the teacher trained in a program like this would be operational. You build a strong program by building a strong foundation. I see no foundation building capability in a program like this.
CS teacher training is such a frustrating topic. So many stake holders are focused on APCS. APCS is just too narrow of a scope. There are just so many other places to take kids in CS that are much more interesting and fun, yet still meet the needs of the US.
CS teacher education gets me a bit fired up. The most important technology development ever and what is shaping the modern world today and we cannot seem to generate interest to develop decent programs to train teachers. Stupid.