I’ve always had an interest in education and learning. This has naturally fit well with my profession as a software developer / programmer. These days most professions require some level of continual improvement and ongoing education, however with programming ongoing “professional development” is our bread and butter.

To some (and I would fit into this category), this is an attractive element of the job as it keeps things challenging and the work rarely gets boring. To others it is a wearying trend, knowing that what you learn this year will most likely be obselete by the next year, or at the very least, will have gone through significant evolutionary development. If that’s you, then you probably want to find another career because it’s not slowing down anything soon.

My interest in the field of education is not limited to my own self improvement, but rather it extends out into a passion of mine, which is to teach others about technology, and specifically programming. As such, I take a keen interest in various websites, courses and tools which have been created to teach programming. Throughout the years of using and interacting with various educational materials, I’ve found that I’ve always been left wanting, but I never felt I could express what exactly was missing. Thanks to Bret Victor’s incredible article Learnable Programming, that has now changed.

Bret’s article begins by asking a question:

How do we get people to understand programming?

He then utilizes the Khan Academy’s programming courses as an example of programming education gone wrong. I found it helpful for Bret to utilize a popular example like the Khan Academy since their approach is a very common one. Thus the critique isn’t specifically aimed at the Khan Academy, but rather upon the popular style of teaching programming that they epitomize. From there the article critiques various aspects of this teaching approach while showing how it could be done better, much better.

In Bret’s words:

  • Programming is a way of thinking, not a rote skill. Learning about “for” loops is not learning to program, any more than learning about pencils is learning to draw.
  • People understand what they can see. If a programmer cannot see what a program is doing, she can’t understand it.

Thus, the goals of a programming system should be:

  • to support and encourage powerful ways of thinking
  • to enable programmers to see and understand the execution of their programs

This is truly a brilliant article, one of the best I’ve ever read on how to teach programming. It should be mandatory reading for any educator in the field.

So please do yourself a favour, stop whatever you are doing and read Learnable Programming today.