Thursday, 24 May 2012

Coding vs Programming

As you may have noticed, there's currently something of a drive - by various organisations, scarily including some big governments - to introduce "coding" into national curricula.

As with all similar debates, there are loud promoters, as well as (equally?) loud detractors. The former are reminding us that we live in a high tech dominated world, one increasingly built on computers and computing power. The latter broadly point at weaknesses of teaching coding as opposed to problem solving.


Again, as with all similar debates, both sides tend to get a lot right, but also almost the same amount wrong, too.

Where do I sit on this particular question then, especially seeing as I come from a very heavy, and very deep (and very low level) "coding" background? Would I blindly support the "coding for all" drive? Or maybe I grew old and jaded and now think coding is not an end in itself?

Well, staying true to the colours I pinned to the mast of this blog, I am probably best described as inhabiting a grey area (deliberately?) overlooked by other vocal sides in this debate.

In the shortest form possible, I agree that some form of programming (NB, not necessarily, or not necessarily just, "coding" skills) should be one of key parts of any (high) school curriculum. The grey area here is the difference in what I consider to be "coding" and "programming". So, let's get these straightened out first.

"Coding" in my (not so) humble opinion, is a craft, maybe even an art, but it is not necessarily more educational than learning a new foreign language (and let's not even go into the foolishness of calling web design coding, and HTML/CSS programming languages). Yes, this is an essential skill. Yes, it is absolutely required to transform problem solutions into something that actually can be executed on a computer. But in and of itself it does not (usually) teach and train (young) minds in the key part of any branch of engineering, and that is the knowledge and the skills to actually solve a real world problem, almost regardless of the actual and eventual means of execution.

That's what I call "programming" comes into play. In this I'm partly guided by Knuth's titling his masterpiece "The Art of Computer Programming", not "The Art of Coding". If when you even just thumb through the volumes, you'll see precious little computer code there (if any).

So, "programming", for want of a better word, for me signifies all the knowledge and skills one needs to acquire in order to effectively and efficiently solve problems that can (should?) be solved using a computer. As anyone who ever undertook a programming task of any seriousness should know, in the part where a problem is defined and actual solution identified, there is little to none coding involved. There may (should) be discussions about what programming language might be best for final implementation, but the problem and solution are almost always "coding" independent. Of course, you eventually have to sit at the keyboard and craft an application that does what you identified needs doing, and yes how difficult or easy it turns out to be will depend on both the choice of programming language and your skill in using it, but ultimately, this is a less "skilled" part of the job.

With this is mind, my position in the debate is, hopefully, clearer or at least easier to explain. I am all for (re)introducing "programming", as described above, into as many school curricula as possible. However, I'd either steer clear of "coding" for coding's sake, or have it as a sort of "vocational" module that could be required in order to maximise the usefulness of "programming", or as a sub-part of "programming" so learned skills and problems can be put into practical solutions running on a computer. Probably the latter, since kids would probably loathe a course that involved only paper & blackboard problem "solving" when they know full well that any results are meant to be run on a computer. Not to mention that seeing your solution actually run and work and give results can be a huge boost to kids' confidence - and egos.

So, to sum up: "Coding" for everyone - no! "Programming" for everyone - GO!

Raspberry Pi - GO! GO! GO!