It seems that the popular thing to do in the last few days (at least for CS geeks) is to write a reaction to Bret Victor’s “Learning Programming” essay. Here is my submission.
I liked it. Am I sold on the concept he proposes? Not totally but it seems to be a viable approach. Now realize, I am reading this with beginning programmers in mind. High school freshmen, sophomores and juniors are my target audience for something like this. For a high school Programming I class I think this would be a pretty slick approach. It would take some major fleshing out but I could really do something with this. Now remember I am not trying to teach kids to be professional programmers. Of my Programming I kids maybe 10% take Programming II, and of those maybe 50% will take the Programming III+. I am trying to give my Programming I students a taste of what programming is all about and on the way they learn some problem solving, some concept of what can be done with programming and maybe a tantalizing view of what they could possibly do if they want to continue in the field. I do not think this would be a good approach with an APCS class. Too many whistles and bells in the way. The advanced kids should know their API by that stage or at least be familiar with documentation and how to read it.
When teaching Programming I kids the language has to be able to do fun projects. Drawing houses in Small Basic – fun. Writing a check balancing program in Visual Basic – not fun (not VB’s fault, crappy text). I do not care how cool the language is and how well it allows the kids to learn concepts, if Programming I kids cannot do fun stuff (a very technical term in education parlance) there will be no Programming II kids (except the uber-geeks of course). That beginner language/IDE also has to have very little overhead, which is why I have pretty much given up on VB and C# for beginners. Simply too much “clutter” in the IDE. Victor’s concepts are a reasonable approach but there are just so many other factors involved in deciding on a teaching language; simplicity for teacher and students, versatility, support through forums and users, “fun” factor and some basic tutorials to get started with.
Several blogs have been somewhat deriding of Victor’s visual emphasis. With beginning programmers visual is good. My beginning programmers are by far more excited about programming when they get to use the Mindstorms robots. They will spend lunch, after school, and home time trying to get the robot to do a task. This is main stream kids, not geeks. A robot is the ultimate visual aide. The amount of trial and error time and problem solving effort committed by the students to that robot just tickles the cockles of my heart. For a teacher it is almost like cheating, the kids want to program that robot and are willing to struggle mightily to do it. The next best and perhaps the most efficient programming teaching tool is the graphic turtle. Again the kids what to program the thing. For beginners it has to be visual or that will be their last semester of programming.