- Maybe 10 year olds are too young, not having proceeded far enough up the Piagetian steps toward abstract thinking. Could adults do better?
- Is 1/2 day of instruction enough? We might expect someone to learn a word processing system with 1/2 day of instruction. However, programming has more inherent complexity. Perhaps we might compare it to something like constructing a spreadsheet. Can someone learn more about programming using a well-designed system like John's in 1/2 day than a comparable someone might learn about spreadsheets in the same 1/2 day?
- John had to make a bunch of design decisions in the construction of his user interface. Maybe there are better design decisions. Exploring variations of his user interface might have different results.
All of these questions lead to the general question of the role of language in learning programming. Certainly, there is some role. Eric Roberts of Stanford has observed that the downturn in interest and enrollment in CS came at the same time that the predominant introductory language in the U.S. moved from Pascal to C++ and then Java. (One phrase that I heard at the ACM SIGCSE conference a couple years ago: "How bad was using C++ in intro courses? It was
so bad that Java looked better!") Most computing teachers who have worked over these 20 years will tell you that C++ and Java are clearly
harder for students to use than Pascal.
Measuring that additional complexity is a significant challenge (see earlier blog posting on the challenge of assessing learning about programming). Part of the problem is syntactic. C++ and Java require more typing and have more syntactic rules than earlier intro languages (Pascal, and also Logo or even Basic). There's another level of complexity, though -- the model of computation that a language requires the programmer to use.
I have argued previously in this blog that objects are hard, that object-oriented programming is harder than procedure or function oriented programming. I will address the role of paradigm in introductory programming in a later blog entry. Even leaving that alone, it's pretty clear that "public static void main(String [] args)" requires a lot of explanation, and that's where you
start in Java. That's a lot of inherent cognitive complexity, even if the syntax were easier.
Experience with Alice is an example of how cognitive complexity trumps syntactic complexity. Alice, as I'm sure most of you readers know, is a visual programming environment for storytelling. We teach Alice and Scratch (another visual language), as well as Python and Java to computer science teachers in our workshops. Alice has no syntax to type--you simply drag and drop the language components. You can't get a syntax error.
However, we found that it takes teachers
longer to get started with Alice than with Python. We can get teachers to write their own Python Media Computation code in half a day--we'll start in the morning, and teachers will code some fun image manipulations at our lunch break. Alice has a longer learning curve. No, there are no syntax errors, but if you try to drag the wrong thing into the wrong place, it won't drop--and you won't get any messages explaining why. You can't use Alice unless you understand the underlying computational model. You simply can't assemble pieces appropriately without knowing that model and assembling according to that model. It's not a simple model, and that's where most of the effort goes in learning Alice.
And yet, teachers
love Alice, and seem more likely to adopt it for their classes than our Python Media Computation. Why? That's part of Lijun Ni's research, which I've mentioned previously in this blog -- and there's more to talk about there, as well. Let me suggest here one big part of it. Alice is about storytelling, and we teach Python for media computation. Storytelling is an even bigger motivator, an even more fundamental driver of human behavior, than manipulating media. I continue to believe that the most significant bit in helping people learn programming is the motivation. What are you
doing with programming? The language can get in the way, but people will go through a huge amount of effort to do something that they
want to do.