Any sufficiently advanced technology is indistinguishable from magic.
- Arthur C. Clarke (1961)
When Clarke, the famous science fiction author, wrote Profiles of The Future he made a lasting observation, though interestingly one that necessitates a society to have developed a concept of false magic before progressing to develop suitably advanced technologies. Nevertheless he's completely correct; turn up in the Roman forum with an iPhone and people would barely believe it possible - maybe to the extent that they would outright refuse, destroy the item and feed you to the lions. We deal with each new technology as it makes a sensible progression from the last.
Whilst we remain amazed at each new thing that scientists and engineers come up with, this gradual feel means we rarely get this magic moment. Sure the internet is amazing, but we've watched it grow over decades, and for the majority of them it was a bit crap and disappointing to the average person. However one area where I think we still see magic on a regular basis is in the world of programming.
This entire article was sparked by the reaction of a man called Ian, who works in our office. He's used to computers and is involved in search marketing, but when he came over a few weeks ago and looked at what I was working on he declared "what wizardry is this!" as he viewed my code. No doubt it can seem like wizardry to many; whilst the motorcar is a hugely impressive invention we can take it apart, see bits moving and roughly work out where things go. Even a circuit board makes some sort of visual sense - you'll see wires, batteries, pins, things you associate with electronics.
In code, however, we turn words, characters, tortured examples of the human (usually English) language into working things. Things which can save lives, replace jobs or let you send a small drawing to a friend. Obviously a lot goes in to making this magic happen; we have our circuit boards, our gears and wheels and they've been developed over many decades as well. However the immediacy of coding is where the beauty lies. With a computer already present, the correct compilers or interpreters installed, we can write a few sentences and tell someone how many leap years they've lived through, or discover the number of people with pallindromic surnames living in East London. Coding lets us drill down from the top level, our ideas and understanding of simple logical steps, to a complex electronic system capable of extraordinary things.
It really is magic, more than many other technologies, and the most important part is that anyone can do it. This isn't the Magic Circle, or some arcane sect of shadowy figures hiding behind society. The magic of yesteryear was confined to select practitioners, but in the western world today nearly everyone has access to this. Sadly most of them aren't aware.
There's been a lot of talk lately about teaching programming to kids. A fellow PHP developer (and someone I'm proud to say I had lunch with once) Andy Young made a brilliant case for this in the Kernel Magazine earlier this year. So fortunately I don't need to. But I will develop my thoughts round to that angle.
If coding is like magic and kids love Harry Potter, isn't it pretty much a no brainer that we should introduce the two to each other? Put more simply, having an understanding of programming should be as fundamental as basic science, and only marginally less so than basic literacy and numeracy. Being able to program isn't only the realm of computer geeks, in the same way that drawing a picture of a dog isn't only the realm of artists in the Tate.
The ability to program not only provides a decent future career path, but provides essential skills for further learning, skills that are really hard to teach in any other sort of quantitative way. Skills like system analysis, logical progression, thinking efficiency - things that probably don't appear in a Primary Teaching PGCE, but the kids that somehow acquire those skills anyway are bound to be the top achievers when they move on to high school. When the teacher comes to explain algebra to kids he should be saying "so, these are like the variables in your code", as opposed to a Computing teacher explaining variables as "like algebra but you're storing stuff instead of solving equations".
Furthermore, if you are going to introduce kids to program, for goodness sake don't give them a reason to dislike it. Whilst coding has that magic aspect the flip side of this is when things go wrong. Compiler errors, dependency issues, libraries crashing. Abandon C and Java and get them writing Python or Ruby (or even CoffeeScript), with a relaxed syntax and convenience built in. Let them enjoy how easily they can do things with these languages, and those that really get into programming can move on to the hard stuff in due course.
If possible don't take too long to add in Test Driven Development and Version Control either. The former, especially, isn't a barrier if introduced early enough, and even gets that instant gold star effect that so helps in encouraging learning. Version Control should be part of any computer workflow, coding or not, but might be best left until the first time they've overwritten an important file - lessons learned and all that.
Not Just Kids
Remember when I mentioned Harry Potter? Well, who loved Harry Potter just as much as kids? That's right, adults. Aduts currently have a higher level of technophobia (a word I really hate actually, people throw it around when I'd hazard it's almost a more serious impedment than many of the other common phobias these days) than kids, but to that I say get them programming; just like with kids, that experience of magic, of creating something could do more wonders for an adult nervous about technology than any series of courses on how to use Microsoft Office down at the local library.
Once again setup is the hurdle to get past; if we want to progress with adult education in code we need ways to get the right tools onto their computers as painlessly as possible. Some websites are sidestepping this entirely, offering interpreted code right inside the browser. An excellent method, and currently the simplest we have. However people should never be able to miss the point that this is real, not just another game on a website.
So if you are an adult reading this and aren't a programmer, what are you waiting for? Don't you want to experience some wizardry? That moment when a few keystrokes can tell you just exactly how many times the phrase "red light" is used in Roxanne? Because if lexographical analysis of New Wave hits from the 70s isn't magic enough for you, I don't know what is.