The other week, I was dismissive of an attempt at creating a “non-programming” sort of programming. I’d like to explain myself a bit more.
The trouble, I think, is that many people confuse the problem. Programming is pretty terrible, but I don’t think that’s because we write programs in a programming language. I think it’s because we write poor programs in poor languages, with poor tools, using poor libraries, that are all poor mostly because we’ve built everything on shaky foundations we can’t fix and basically because we still don’t know what we’re doing as an industry. So we’re quite fond of metaphors like “it’s held together with duct tape and bailing wire.”
When people try to create “non-programming” sorts of programming, they generally fix none of those issues. And they remove the successes we do have with languages. And they mistakenly believe that “ordinary” people are incapable of programming. And then they make a truly, horribly fundamental mistake: they try to make things graphical and clicky.
You see, I think there’s three basic levels of communication from humans to computers. There’s the “point and click” level, the expert “real-time” level, and then there’s the language level.
You’re probably familiar with all of these, but let me make sure I’m clear. We browse the web almost entirely at the “point and click” level. It’s essentially how we interact with tablets and smart phones.
For the expert “real-time” (for lack of a better term) level, we can look to the kinds of sound boards that audio engineers use. Or to vim used by programmers, and it’s myriad of commands. Or even to games, like World of Warcraft, once players bind every ability to a key on their keyboard (and aren’t clicking on icons anymore.)
Or even just a keyboard when you need to type a lot of text. Doing that on a phone or tablet is awful!
Already with just these two levels, I think people generally appreciate the difference. I’ve heard many people parrot the comment on how tablets are only good for consuming content, not creating it. And I hope nobody tries to write papers or essays on a tablet without a keyboard.
But once we get to the next level, linguistic communication, I think people seem to forget that lesson, or somehow think it doesn’t apply. Then we get Lab View and Excel, and all manner of other mistakes in trying to program by pointing and clicking. Somewhere along the line, I heard someone joke that you can’t do anything truly useful without language, as a caveman, solely by pointing and grunting. Well, you can (see above: surf the web! “useful”…), but I think when you need language, it is really and truly irreplaceable. When humans need to communicate with humans, we sure haven’t figured out anything better yet.
The trouble, of course, is that these things (like Lab View and Excel) have actually succeeded pretty well, and so I can’t be totally right that these are useless. But the trouble is not that they’re useless, it’s that they inevitably lead to horrible messes as a result. Multi-million dollar businesses relying on incredibly error-prone piles of crap no one wants to touch, and no one understands, is extremely common. We have entire research programs dedicated to trying to figure out how to mitigate this mess. And they have a “horror stories” link on their front page.
So I’m extremely skeptical of this sort of thing.
But let me point out one bright side: Scratch. It’s point and click programming. But there are two amazingly important differences between Scratch and other kinds of point and click programming I’ve seen. One: it’s still quite linguistic. Look at the front-page example. An event hook, a loop, and a series of commands. No you didn’t type all that in letter by letter, but you’re still pretty much writing in a language and kids get it. And two: it’s a stepping stone for learning, not an attempt to “make programming easier” or make programing “not programming.” This makes all the difference in the world. Nobody is going to try to build anything but toys for their own education with Scratch.
So here’s my tl;dr bit of advice for anyone trying to replace Excel, or whatever: you can have a Scratch-like learning mode for using your software, to make it easy to use for non-programmers. But the point of this shouldn’t be to “make programming easier” or wave your hands and claim it’s “not programming”, it’s to teach those users programming. Confront the hard problem straight on, and solve it. One day, they can turn that mode off, and then write their programs.
Oh and also, don’t make up a programming language that ignores everything we’ve learned about programming languages for the past 60 years. It’d certainly help us avoid a big mess if they’re not then writing programs in yet another poorly thought out undesigned language.