The computers of the early 80s were a blank canvas. You plugged them in, switched them on and (hopefully) the input cursor blinked at you. There was no decoration, no clutter and it was something waiting for YOU to do something to it.

Not only this but with the manual which came with it a 13 year old could within 5 minutes print their name on the screen. Within 10 minutes, at least with the second generation, make a funny noise. And within half an hour he or she could have his or her name scrolling up the screen in different colours whilst making unmusical noises and annoying their parents… they were hooked!

Now, let’s look at today’s technology…

The desktop or laptop computer takes an age to start up (i.e. more than 5 seconds) and totally insulates the user from what it is.

Smartphones are usually on all the time so don’t have this problem. Similarly tablets.

They’re immediately brimming full of functionality all vying for your attention, but it’s also incredibly locked down. You can do absolutely anything… ANYTHING as long as it’s what the visionary who steered the programming teams thinks that you should want to do. Woe betide you if you want to do anything different. It’ll either ignore you or give you an unhelpful suggestion in a dialog box. You can be creative, but only in the ways you’re told you can be.

So, what about the art of programming?

Well, on tablets and smartphones forget any native fun. Apparently this is too subversive. On the desktop it’s only slightly better (and I’m not singling out any desktop OS here). What are your options?

Well, on MacOS and Linux you can open a shell window and all sorts of interpreters and compilers are available and all sorts of graphics libraries to use with them too. You would think that this would be the ideal playing ground. Sorry to burst that bubble. It’s a great playing ground if you’re already a programming expert. It’s like taking a 5 year old into an engineering workshop, sitting him down and then complaining when he doesn’t build a car as he had all the tools available to him to do it and hence it must be his fault.

No, these environments are hopeless to teach and enthuse. There’s so large an energy barrier that it’s too daunting to even try. Also, how many lines of code in one of these modern development environments would it take to do the equivalent of the following?:

I bet you’ll find that it’s quite a large number of line of code using all sorts of weird and wonderful libraries, possibly some non-standard ones to do the sound and a whole lot of code to manage the framework to create a window with the correct attributes and define the font etc. Hopeless!

Oh, and when it comes to drawing lines and circles etc. Oh dear.

Of course a great many people think that a computer with similar functionality to the old BBC Micro or ZX Spectrum would never be able to compete in the mind of a teen when they have all that touch-screen goodness and Angry Birds to play with. I beg to differ. It was most delightfully illustrated that this is profoundly not the case in the second episode of the BBC’s “Electric Dreams” series (unfortunately not available to watch on-line) where the family was given a BBC Micro to play with. The teenage son brought his best friend home from school to play with it and they thought it was awesome. They liked that it was a blank sheet that they could make do what they wanted and not be told what they should want to do by the device. And, of course, what they wanted it to do was make silly noises and write their names on the screen in different colours. It sparked enthusiasm!

So, what can be done?

First of all we need to ignore the idealists who think everyone should start their programming life learning something worthy and object orientated. Once the kids are hooked they can learn that later. Also, that’s not how peoples’ minds work. You don’t see object orientated recipe books for a reason. Also, however annoying to the seasoned programmer, line numbers help understand the sequential way that programs work. In other words, the early 80s micro BASICs got it mostly right. BASIC does stand for “Beginner’s All-purpose Symbolic Instruction Code” after all.

Firstly, any system which is going to enthuse also HAS to have as its core functionality the “5, 10, 30 minute” teen grabbing fun element outlined near the beginning of this post. Without it the whole thing’s lost. Any system would also have to allow growth. Just as BBC BASIC allowed the nascent programmer to grow into using procedures so should any new project, and possibly more, such as variable typing, scoping etc. Line number could be made optional in an advanced mode.

Secondly, the freedom of the code itself is far less important than the freedom to discover, so any project should not use a viral license such as the GNU Public License (GPL) but instead use something such as the BSD license.

Thirdly, and helped by the above, the core should be written in a platform neutral way with the platform specific interface on top. In this case, probably the best platform to use would be the GNU compilers and specifically that implementation of Objective C with the QT libraries to interface with most operating systems (except, notably, Apple systems, especially the iPhone/iPod/iPad).

The biggest fly in the ointment with this whole pipe dream is that I just don’t have the skills to develop such a system. (Another would be getting people such as Apple to allow the system to be made available via their App Store type portals.)

Hmm.. I was just wondering how cross-platform this might be. Can it be squeezed onto a tablet/smartphone or another portable device?

These days if it’s not ubiquitous it’s likely not to stand a chance. Similarly, if it can’t be published on some sort of very popular application portal, such as the Apple App Store, it’s invisible and hence practically useless.

Also there’s the problem with licensing. Are these extant interpreters licensed so that they could be distributed via a restrictive contract as that required by the Apple App Store?

Although I’d not said this in the post, another idea I’d had was to integrate into the application the ability to upload and share your programs with others on a central web site. Bragging rights and showing off are also things which enthuse teens (and older people as well), as is sharing and feeling as if you’re part of a community. Just look at the site Tanaqui’s posted above.

The reason you can’t get “Electric Dreams” on iPlayer at the moment is that it’s currently being re-run on BBC4. In fact it’s on this evening – husband and wife against each other across the BBC schedules – they aren’t happy about it 🙂

Maybe instead of having a keyboard interface, we should go with objects?

Scratch is excellent in this regard – it combines processes in a logical way, and allows multitasking in a way that people intuitively understand but that is difficult to write in a BASIC program. As someone who grew up with a ZX-81 and an Apple ][, having Scratch looks like just as much fun and a lot better result quicker.

@Steve – if you mean by Apple App Store the one for iPhones then I suspect you’re right, my understanding is that any interpreted languages are banned from them. So basically this is not going to get anywhere on those platforms.

Oh, and copyleft licenses like GPL, MPL, Eclipse, etc, are banned from the Microsoft phone store too – they are OK with permissive licenses like BSD though. Sigh.

Really interesting post and not something I’ve considered too much. Things aren’t too bleak though, and I offer two examples of why. One if LegoStorms and the other is Arduino. Both of these encourage tinkering and programming. Sure, neither is quite a blank canvas, but the principles on would learn in using and becoming proficient in those are the first steps towards programming competence.

I also think areas such as web development, data scraping, Yahoo pipes, and visualisations tools such as Protivis all develop the relevant skills. They may not be as blank a canvas as the old ZX81s were, but they could still encourage the young ‘uns.

Ah – Lego. My son was introduced to basic programming on the Sinclair QL. I was a QL trader. He soaked that up in literally weeks. His next main project (prior to PCs and lately Mac OS X) was using Lego RCX and MIndstorms. He rapidly abandoned the Lego object language. Not what you might think! There were images on screen one moved about and arranged. He used instead NQC (not quite C). It is tinkering like that with a blank canvas that should start *every* programmer off. He is about to graduate in computing and specializes in Django – now anyway!

Only skimmed thus far, will read fully later. However, there’re the OLPC Sugar environment, Squeak, StarLogo/OpenLogo and probably a fair few others. There’s also the book Invent Your Own Computer Games with Python

While I haven’t used it Quick: An Introduction to Racket with Pictures would seem to give a succinct follow the manual start. Racket is the new name for DrScheme (which I still haven’t used) which I think has had a decade of work or so as an introductory programming environment.

If you saw the Pyglet (?) lecture at LUV, they showed developing a Space Invaders implementation in their python env over the course of the lecture.

I believe the LUA C-like language is used as a game extension language in a number of games, so there could be incentives to learn it.