September 13, 2013

Teaching Programming and Defending the Middle Class

Tyler Cowen's new book Average is Over argues that around the world, the middle class will inevitably continue to hollow out, leaving a more fragile, poor, existence for most people, and elevating a small class of super-wealthy computer-literate computer designers:

“The obvious and direct beneficiaries [of ever-more powerful computers] will be the humans who are adept at working with computers. … That means humans with strong math and analytic skills, humans who are comfortable working with computers because they understand their operation.”

Why is it so out of reach for most people to "understand the operation" of computers? Here is where I think Cowen is wrong: he is unjustifiably pessimistic about the ability of most people to master the language and creation of automation....

Teachers Can Do It

The great educational experiment of 20th century America was a huge success, lifting our nation out of widespread illiteracy into near-universal literacy in just a few generations.

Compared to teaching written language, teaching computer programming should be a cinch! What makes Cowen think that most people are not capable of mastering it?

I think educators should see this as a fundamental and worthy challenge. It is obvious that computers are a powerful force driving change in our society, and it is also true that mastering the creation of automation is not a trivial skill. It is really not enough for kids to grow up to be able to use an iPad or write a tweet do a Google search. Kids must learn that we are all designers, not just consumers, of algorithms.

If we do not teach this lesson, then Cowen is right that computers will divide society into "creators" and "clickers."

We Are Not Taking This Topic Seriously Today

It is important for kids learn that a computer is a flexible tool that can be shaped and used like a pencil. But a pencil does not make an artist. Programming a computer it is a complex skill which you must practice for about ten years to develop expertise.

Just as layers of knowledge and technique and beauty go into writing English, there are layers of understanding and creativity and elegance in programming. There is a difference between a good, sound, cogent program, and a messy, fragile, buggy one.

Just as there is a zoo of important abstractions to learn in Mathematics, there is a bestiary of foundational concepts in programming. As kids are learning about similar triangles and divisibility and integrals in Math class, they should also learn about nesting, sorting, and concurrency in their programs.

That is why we need to begin understanding how a 10-year computer curriculum would look: how can we teach kids programming along with their spelling and arithmetic in Kindergarten? And how can we do it in a way that progressivly builds on this knowledge as they get into high school and beyond?

Untangling the Current Mess

The current state of computer education is a mess: whenever programming is taught as students grow up from elementary school to high school (if kids are lucky enough to be taught at all), kids are taught the same Kindergarten concepts again and again in a jumble of different notations.

How do we count and check and repeat things in Scratch? Now let's learn how to do the same things in NXT-G. Then the same in Javascript? Then in Java? And Python? And Robot-C? And Scheme? And C++? I find it odd to hear about high school kids who have won a world championship First Lego Robotics competition trying to get into an "intro to Java" class where they can learn to program yet again. They are going to begin at the very beginning again?

Why not move on to teaching them a real concept: teach them parsing, statistical computing, set-oriented computing, something different! But as an educator, if you stop to think about it, the problem is that the Robot competition did not teach them things in the right order. They spent years becoming world-class young thinkers in building robotic control systems, but they do not know what a local variable is. So they need to start again.

I do not agree with Peter Norvig that the solution is to just let kids learn half a dozen languages and let them sink or swim. Just because that is how we learned does not mean that is how it must be done.

I think the problem of teaching programming is important enough that a thoughtful ten-year curriculum should be designed. We should put some planning into what comes first, and what comes next.

Programming is important enough that it can and should be taught well.

Posted by David at September 13, 2013 12:31 PM

Not everybody is a Michelangelo or Boticeli but if taught correctly the chances are they are not missed on the way.

I wasn't like Peter, in the same time i was exposed to a few languages, I had, in high school, courses about concepts like sorting, backtracking, solution space, graphs that were taught without being linked to a language, using pseudo code or diagrams.

I believe simple can and should be taught before high school and languages and theory should be taught simultaneous but kept separate.

Posted by: Cezar at September 16, 2013 08:28 AM

Terran and I were discussing this blog post. I thought you might be interested in what people are doing in research based reading instruction currently. the Core Knowledge Language Arts (CKLA) program calls in "teaching the code" and explicitly sequences and teaches "270 bits of knowledge" plus "tricky words".

The curriculum is creative commons licensed and can be downloaded from the site. There is a good summary in the Grade 2 Teacher guide starting on Page 191.

You may also be interested in the tests developed to assess students ability to decode language.

Posted by: Caroline Meeks at September 18, 2013 09:08 AM

I've registerd with CKLA and established an account. Now I am waiting for them to email me a link to their materials.

If it's creative-commons licensed, I wonder why they make it so inconvenient to get the material on the internet?

Posted by: David at September 19, 2013 10:45 AM

Sigh, after getting approval to download the files it seems that I waited 8 days before downloading them, and my approval was revoked.

I am applying to get them again.

Why so inconvenient?

Posted by: David at September 28, 2013 12:22 PM
Post a comment

Remember personal info?