I live in a very small world CS ed speaking. Most of my world view comes from blogs and internet readings. There is another programming teacher in my school but his interest is in business (his degree) and football (he coaches). He has no programming background. Everything he knows I have taught him or guided him towards so he does not increase my world view much. He is smart and is a good person to bounce ideas off of but he has a very limited interest in the field. There is another programming teacher in town, at the public school, but his approach is APCS directed. My school has 20 kids taking programming this year, out of 180 kids in the school. The public school has about 20 kids taking programming also, out of 3000. So it is somewhat logical that I am not impressed by the local public school approach. I have looked at the APCS curriculum and got bored. The trouble is there is nothing to tell me that my approach, although I get better numbers, is the right way to go. I specialize in introductory programming: Scratch, Small Basic and intro to Visual Basic. I do get a few kids taking multiple semesters of programming where we work with Corona and the basics of C# (that is all I know about C#, the basics). I want to kids to explore and get an overview of programming. I want them to have some fun with it. To tell the truth I really do not have enough programming background to do a rigorous programming curriculum so it is good that I am absolutely not interested in a rigorous course at the high school level. I do wish I knew a lot more for that one kid every few years that is interested in going to that level. Since there is no practical way of getting what I need I had better be happy with what I can do. I occasionally see my graduates and from their feedback they seem to be well ahead of their contemporaries in their programming classes. This can mean one of two things. Either I really am on the right track, or their contemporaries were not. (Yes, I know there are several other logical reasons for this observation but I like this one best.)
One of my elementary school parents is an instructor in the CS department at the local university. When I asked him about what he sees as issues with his incoming freshmen and what he would like to see more of from the high school level his answer was simple, problem solving skills. He says he can teach the programming they need but he does not have time to teach them to think on their own. He says that if they encounter a problem they will not/cannot troubleshoot their programs at the most basic level.
Now for the purpose of this blog entry. What should a CS Ed certification program teach in the way of programming? Considering a certification program is probably only 2 to 4 semesters long there is not a long time to squeeze in a lot of programming education. Should a program target APCS level teachers for that .1% or smaller student population or the 10% basic level group of students but stress problem solving? Then there is the question if a prospective teacher can be brought up to the APCS level in the required time? I assume a new APCS teacher is going to learn a lot on the fly the first time they teach the course. Will a background in Scratch and Small Basic with a heavy emphasis in problem solving and pedagogy be enough to make a teacher capable of teaching APCS? Not having taught APCS I cannot answer that question.
For smaller schools the basic courses are the logical approach. The courses attract a good number of students and can give them what they need to succeed at the next level. Small schools rarely have the gaps in the curriculum to squeeze in something like APCS and the course prerequisites. Also the student numbers in a programming sequence dwindles rapidly each semester making advanced programming courses a bit unjustified in a cost/benefit context.
Here in the West there are lots of small schools compared to large schools so the teacher training requirement could be very different regionally. A small school is going to hire a multi-dimensional teacher, not a CS major. So I would have to argue that any national CS teaching program has to target the most need for schools and where the most students are going to benefit. A teacher training program that targets lower level programming skills has several advantages. It could attract prospective teachers that typically would not go into a CS program but are looking for an added certification to improve their marketability. This would probably lead to the larger number of qualified programming/CS teachers that will be needed eventually. An emphasis on problem solving skills has excellent transference to other subjects. The ability of a large number of students (compared to a few Java whizzes) to program in a simple language like Small Basic could have benefits in other courses.
There simply not enough CS majors going the education route, the money is not there and, for many, the interest is not there. We need a teacher training program that will temp the non-computer geeks into teaching programming/CS. A program focusing on Scratch, Small Basic and other intro languages with a strong emphasis on problem solving and pedagogy might attract the numbers needed for the future. Of course now there is that minor little detail of convincing universities of offering CS ed programs. Back to the chicken or the egg.