In, on and out of boxes

2007-07-21, , Comments

How do you google if you can’t spell?

Alex is five years old. He knows all the letters of the alphabet: he knows their names and recognises them in their upper- and lower- case forms. This doesn’t mean he can spell though.

Despite this handicap, his basic lexical skills allow him to find what he wants on the internet. And I’m not talking about Google’s spelling corrector, which is really only of use to people who are capable of reading and writing well enough to realise when they’ve spelled something wrong.

Here’s an example: Alex likes Scooby Doo. He watches Scooby Doo on TV, looks at Scooby Doo comics, owns a Scooby Doo DVD. He likes playing simple Flash-based games on the internet. How can he find a Scooby Doo web site which provides such games?

Before you try and solve that puzzle (and I do think it’s worth trying to solve it before I give away the answer) I’d like to pose another. As a software developer, how can you work on a system you don’t understand? Maybe you weren’t involved in designing it or writing it — or maybe you were and its operations have become opaque. Maybe it’s even written in a language you’ve never used.

Scooby-dooby-doo, where are you?

Perhaps the obvious way for Alex would be to call for adult assistance:

“Da-a-add, can you put me on the Scooby Doo web site!”

And if that doesn’t work:

“Mu-u-umm, can you put me on the Scooby Doo web site!”

Or even:

“Isobel, can you put me on the Scooby Doo web site!”

Like most children of his age, though, he prides himself on self-reliance and is happy enough to work a little harder to get where he wants if he can get there by himself. Besides, the chances are that mum and dad are busy, and there’s a danger that Isobel will take over and head for the Bratz web site instead.

So he goes to the drawer where the DVDs are kept, pulls out the Scooby Doo DVD, goes back to the computer, opens FireFox, clicks to set focus in the Google search box in the toolbar, then painstakingly types in the letters “S C O O B Y D O O”, copied one by one from the DVD case. From there it’s a simple matter of navigating through the search results until he finds something which appeals, or gets fed up and finds something better to do.

On the box

“A child of five could understand this. Someone fetch a child of five” — Groucho Marx

Here’s another modern dilemma. We have a television in our living room. It’s an old analogue set which we use to watch digital terrestrial TV by connecting it to a freeview receiver. We also watch DVDs using a DVD player which again attaches to the TV. That means managing three separate remote controls before you can watch anything.

Isobel and Alex haven’t read the manuals but they’re capable of turning on the TV and finding a cartoon channel or playing a DVD; yet adults who’ve supervised them in the past have almost invariably needed a cheat sheet.

Of course the children have the home advantage here. They’re also growing up in an age of multimedia and software (and, perhaps, in an age when electrical and electronic products don’t integrate very smoothly). The most important factor in their success, though, is their willingness to experiment, combined with persistence and patience. What happens if you press this button? That button? When you hold this button down? They’ve got the time to find out.

Playing with Software

There’s a misconception that software development is purely a logical activity: if we rational humans think long enough and hard enough, we can bend computers to our will. I was lucky to attend Derek M Jones’ superb presentation “When Stone Age Brain meets Programming” at the ACCU 2004 conference, when he debunked this myth. Humans aren’t rational. We’re communicators, we’re curious, we’re creatures of habit; but even the simplest logical puzzles quickly bewilder us.

Once a software system grows beyond a certain size it becomes impossible to reason exactly how it’s going to behave. Indeed, a complex system often appears more organic than mechanical. The Spirit in the Computer takes over.

In the face of such mischief, I think my children have demonstrated some viable and perhaps under-rated tactics. Experimentation and persistence are crucial supplements to reason: if you do this, then that, something happens, but if you do that then this, it doesn’t. Given time and patience, in this way we can build an understanding of how a system (mis-)behaves, and this is a first step towards working out why it behaves this way.

When we experiment with software we mustn’t just approach it as end users do — not if we really want to learn about it. We need to pull it apart, module by module, and then poke the modules one at a time and see how they react. (Yes, I’m talking about test harnesses, and yes, some systems are better suited to this sort of dissection than others.) Being software, we don’t have to disrupt our regular users to do this: we just clone the system, and if we’re concerned our inexperience might trash our machine, we use a virtual one.

Knowledge

The things children have less of, at this stage, are experience and knowledge, but experimentation soon builds both of these. I can hear when an algorithm is CPU-bound, or running out of memory for example. Sometimes I can even smell it!

Alex hesitates to ask for help, realising that ultimately he’ll be better off if he can sort out his own problems. Software developers shouldn’t be so hesitant, but we do need to make sure the help we get really is helpful: too often our assistants take over, and we remain dependent. And when the situation is reversed it’s too tempting to treat a request for help as an opportunity to show off.

In and out of boxes

The other quality we’ve seen is ingenuity: the ability to think outside the box. Alex knew he had to use the computer keyboard and mouse to locate the Scooby Doo website, but he also worked out he’d have to leave them, temporarily, in order to reach his destination. How can we train ourselves to think in this way — to think in a way we wouldn’t have thought we could think if we’d stopped to think about it?

The advice “think outside the box” has become a cliché, but in this case we should follow it literally. I’ve already described an ideal working environment, one which has clearly served my children well. My working environment is less ideal: I work on a box (a desktop computer) and in a box (an office). Thinking outside the box starts with logging off and going somewhere else.