Is programming easy to learn?

The second part of an interview with Bjarne Stroustrup showed up last week. (I talked about part one earlier.) One of the questions he was asked was if we should be "simplifying the process of coding so that more individuals are able to participate in development?" Stroustrup's answer is interesting and in two parts. Both parts are ripe for discussion. The first part of his answer is that "The idea of programming as a semiskilled task, practiced by people with a few months' training, is dangerous. " The second part should be very interesting to those of us trying to teach programming - "I don't think it is true that the programming languages are so difficult to learn. " He basically says that most other academic subjects are more complex, have more detail and are harder to learn. Interesting.

I go back and forth about the idea of a lot more people being able to do their own programming. There I times when I think just about everyone should be able to develop their own code for specific applications but that they need some easier tools to use. There are other times when I think we have way too many programmers who don't really know what they are doing already. The ideal is probably somewhere in the middle. I do think that we have to make it easier for more people to do more with their computers than they do now. Does that necessarily mean they will or should be programming? That is unclear.

The idea of programming being easier to learn than other academic subjects again is - maybe so maybe not.  I do believe that programming language syntax is not all that complex. Really it's not. Compare it to the weird stuff that goes into calculus or the complexity of learning another natural language or even the correct order of events in a history class. What is difficult about programming is the mind set - the thought process that goes into developing a program. That is what takes a while to teach.

That being said the art of teaching programming involves teaching the syntax and language structure at the same time one is teaching the planning and thought process that is involved in actually doing programming. Learning a second or third programming language is often a fairly trivial process for most people. The hard part is constant (mostly) while only the easy part (the syntax) changes. This is why tools like Alice, Squeak and Scratch are so popular - they allow teaching of programming concepts without the complexity of (the easy part) language syntax. Programming maybe the only discipline where we teach the hard part first and then come back to the easy part.

The hard part of programming is not programming languages but programming thinking. We may use other tools to avoid the more involved syntax of most programming languages at the beginning but there is real power in them so eventually people have to learn them. They really shouldn't find the languages all that difficult. It's not rocket science after all.  And oh by the way they taught rocket science in my high school 35 years ago.

I maintain that the real problem with learning programming is poor teaching and poor teaching tools. I do not exempt myself from that poor teaching either. I often think that a lot of my students succeeded in spite of my teaching rather than because of it. If I'd done things differently maybe programming would have "clicked" for more of them. Maybe more of them would be writing code to change the world. We should be spending some of the money we are spending on new programming languages and put it into finding new and better ways to teach what really should be a moderately difficult rather than extremely difficult course of study.

What do you think?