Why it's harder now for children to learn to program than 20 years ago -- by hackety hack

Short description (~1 to 3 sentences)

The creator of hackety hack says why it's harder for children to learn to program now than 20 years ago.


More details

This is a famous article
Originally published at
http://whytheluckystiff.net/articles/theLittleCodersPredicament.html

Tuesday, June 10, 2003
The Little Coder's Predicament

Okay, then, children of the modern age (where we live in a world so tied together with wires that Pangaea ain’t goin’ nowhere!), you tell me if this is a predicament or not.

In the 1980s, you could look up from your Commodore 64, hours after purchasing it, with a glossy feeling of empowerment, achieved by the pattern of notes spewing from the speaker grille in an endless loop. You were part of the movement to help machines sing! You were a programmer! The Atari 800 people had BASIC. They know what I’m talking about. And the TI-994A guys don’t need to say a word, because the TI could say it for them!

The old machines don’t compare to the desktops of today, or to the consoles of today. But, sadly, current versions of Windows have no immediately accessible programming languages. And what’s a kid going to do with Visual Basic? Build a modal dialog? Forget coding for XBox. Requires registration in the XBox Developer Program. Otherwise, you gotta crack the sucker open. GameCube? GameBoy? Playstation 2?
Coding Just Isn’t Accessible

Yes, there are burgeoning free SDKs for many of these platforms. But they are obscure and most children have no means of actually deploying or executing the code on their own hardware! This is obvious to us all and likely doesn’t seem such a big deal. But ask yourself what might have happened had you not had access to a programming language on an Atari 800 or a Commodore. You tell me if this is a predicament.

It turns out, most of the kids in my neighborhood are exposed to coding through the TI calculator. A handful of languages are available on the TI and its processor is interesting enough to evoke some curiousity. But this hasn’t spread to its PDA big brothers, where young people could have more exposure to programming. And undoubtedly the utility of a language on the Palm, Pocket PC and others would be useful to many.

So what’s the problem here? We have no shortage of new languages, but they become increasingly distanced from the populace. Are the companies behind these platforms weary of placing the power of a programming language in the hands of users? Is there not a demand any longer? It’s got to be some kind of greed, power, money thing, right?

Perhaps this is just another reason to push Linux and BSD on consumer systems. Still, are scripting languages easily accessible to beginners on those systems? OSX has made several scripting languages available (including Ruby and Python), but most users are unaware of their presence.

I should mention that Windows is equipped with its own scripting host for developing in JScript and VBScript. But the use of the scripting host is (I believe) under-documented and limited for beginners. Try doing something useful in a script without using Server.CreateObject. Let’s not let kids touch the COM objects, please!
The Christmas List

I’m thinking a toy language for consoles and desktops alike could be monumental. I’m ot saying it needs to be cross-platform. A language for GameCube that took advantage of platform-specific features could be more appealing to GameCube users than a language that used a reduced featureset, but could execute on a handheld. Really, we live in a world where both choices should be available.

As for essential features:

1. Transportable code.

On my TI-994A, I could make a little, animated Optimus Prime from pixels. Insert cassette. Record. Pass around to friends. Receive high fives from friends. Put on wraparound shades. Thank you, TI! Thank you, Optimus Prime!

A little language for the consoles could be wildly popular if combined with the good ature of sharing code. This could be done by trading memory cards, but would be more effective if code could be easily obtained and posted on the Web. Learning would accelerate and collaborative development could take place.

A suitable language should give coders access to I/O devices, to allow experimentation with network devices and the ability to enhance one’s connectivity with others. For the consoles, games could provide hooks for user mods. This has long proven a successful staple of the desktop gaming world.

2. Simplicity.

You’ve got to be able to write a single line of code and see a result. We need some instant results to give absolute beginners confidence. Simple methods for sending an e-mail, reading a web page, playing music. Demonstrable in a one-liner.

Admittedly, as our systems have grown complex, it is difficult to balance simplicity and capability. Most users will be unimpressed by code that emits beeps and bloops from a PlayStation 2. If Ruby were available on the PS2, then I would hope that I could hear rich symphonic sounds from a wee bit of code.

Orchestra.play( "A:2", "C:4", "E:1", "G:1" )

Access to the graphic engine might require more complex code. But simple drawing methods could be provided for beginners. Or images could be stored alongside code and accessed programmatically.

ImageLibrary.load( "GolfingOldMan" ).drawAt( 12, 10 )

The trick would be to uncover what small applications might entice novices and still provide the ability to write large applications that would drive developers to master the language and not limit their growth.

3. Sensible environment.

Considering that many won’t want to purchase a keyboard for their gaming unit, let’s make sure that a reasonable environment is provided for entry of text. Controllers could be worked like the Twiddler. Or code could be transferred via IR, TCP/IP. (Dare I say cassette? :D)

4. Give it away!

It used to be that programming was practically an inalienable right for users. Include a language with the system, situated in a friendly spot. Each of the game consoles I’ve mentioned has launchers. (With the exception of Game Boy and its successors.) Provide a development prompt from the launcher. From desktop software, provide shortcuts for both the command prompt and a development prompt.

Remember, we’re looking for a language that requires no system hacks. No obscure links. No warranty violation. We’ve become so used to these techniques that it seems to be an essential part of getting our way.

And in many ways it is essential. Tinkering with hardware is learning. Lobotomizing and renovating is meaningful, magical. On behalf of those who prefer to code, I make these wishes. Not to take away jobs from the Phillips screwdriver.
The Ultimatum

My challenge is to Sony, Nintendo, Microsoft, Apple, and to those who manufacture and develop our interactive technology. Let us interact with these machines more deeply. Provide us a channel for having a dialogue with the entertainment boxes we nurture and care for. I swear to you, the relationship between the public and your product will assuredly blossom. That box will become more of a chest for our personal works.

In addition, if your developers start putting out crap, then you have a whole world of people to pick up the slack.

My challenge is for you to bundle a useful programming language with your product. Ruby, Squeak, REBOL, Python. Take your pick. It will be inexpensive to add any of these languages to your systems. And people will seriously pray to you. You know how geeks get when they pledge allegiance to something. But, yes, Ruby is preferable.

01:00 AM


To see articles on the same topic, click the links below the name of the author at the top of this page.
Authored by guest on Jul 30, 2008.

This post has 22 thoughtful comments
http://www.rubyinside.com/opinion-taking-ruby-to-the-kids-233.html

I want to look at the history of the BASIC language, the uptake of novice programmers, and how Ruby could capitalize on them in the future.

My first programming experience was before my brain began recording stuff I can still remember today, but it was on either a Commodore Vic-20, Acorn Electron, or BBC Micro, as these were the computers my father used. All these machines had their own version of BASIC, like the majority of 1980s microcomputers.

BASIC did little to open my mind to the more interesting aspects of software development, but it certainly reinforced basic procedural logic and structure. Millions of people began coding this way in the 1980s. The keenest budding developers often moved on to discover C and Pascal although BASIC retained significant mindshare, best demonstrated by the popularity of QBasic (as bundled with DOS 5 and 6 and Windows 95) in the mid 1990s. BASIC was even taught in schools, often being the only option available (and LOGO's power being woefully underestimated - something I am only now just realizing).

From BASIC's popularity grew Microsoft's Visual Basic (geek trivia.. my first after-school job was to save up the £70 for Visual Basic for DOS - yes, there was a short-lived DOS version!) which continues to be popular and is used in an ungodly amount of commercial software, along with Visual Basic for Applications which is used in millions of business systems in conjunction with Microsoft Office. BASIC's ease of use, low barrier to entry, and overall flexibility of use (despite being an inflexible language) all helped it amass and retain significant mindshare even in the face of significantly better languages (C, Pascal, and now C# or Java). All those kids and teenagers who tapped in 10 PRINT "HELLO" 20 GOTO 10 and copied computer game source code from the back of flimsy magazines in the 1980s still feel a sense of warmth towards BASIC.

How can we bring the same experience to today's novice programmers? It's no longer trivial to begin programming. While downloading Ruby or Python themselves is relatively easy, the whole environment isn't exactly novice-friendly. irb is a superb 'immediate' tool, but more cryptic than a total programming novice would bear. Chris Pine's Learn To Program is incredibly well written, but, again, is perhaps a little too much for either a total novice (let's say, a 6 year old kid) to grasp.

The way I envision the solution, using Ruby, is by providing a browser based Ruby IDE and run-time environment along with a highly tailored version of Ruby that can use a number of special libraries and methods (that are built-in). Built-in classes would make placing and controlling graphics and sounds within the viewport easy. Tutorials could, potentially, be built into the IDE. Ruby is ideal for this, since Ruby can be used in a procedural, pure OO, or functional way merely with slightly different syntax, and by pre-loading different classes and methods at run-time!

But why a browser-based IDE? One of the problems we're seeing with schools nowadays (and this was even a problem 10 years ago when I was still in school) is that they want to maintain sanitary environments. Installing new software can be troublesome unless there's an official buy-in / policy from the school (although for one superb education-focused client-side IDE / run-time environment, check out Liberty Basic). Browser environments, however, are a lot easier to use, since all they require is Web access.

Is this all pie in the sky on my front? I sense that learning about algorithms and 'how computers work' was a part of significantly more kids' lives in the 1980s than it is now. Kids aren't typing in BASIC source code and wondering what a 'variable' is anymore, rather than working out how to game MySpace or play Flash games. Macromedia / Adobe have a massive potential in this sector as Flash makes an ideal scripting + fun environment to develop in, but they're seemingly uninterested.

Can we take Ruby to the kids and the novices and make Ruby the next BASIC? That is, of course, without the negative connotations ;-)

(Further thought: Why aren't there more efforts to get ordinary folk to write their own mashup scripts and Web tools using scripting languages over the Web? Ning is a start but still significantly more complex than it could be. This is something I'm digging into.)