One thing that has people up in arms about the iPad is how it limits people's freedom to tinker, and how if devices like the iPad are successful, the net effect will be to mean that a whole generation of people will grow up without ever knowing the joy and power of programming. A good example is this one by Alex Payne, where he says:

The thing that bothers me most about the iPad is this: if I had an iPad rather than a real computer as a kid, I'd never be a programmer today. I'd never have had the ability to run whatever stupid, potentially harmful, hugely educational programs I could download or write.

The idea that you can't write cool, fun or interesting programs on your iPad (or even iPhone) does sound like something to worry about; there is just one problem with the idea—it isn't true: you absolutely can start writing programs on an iPad moments after taking it out of the box. Any child or adult can spend hours exploring the joys of programming on an iPad. Potentially, they could even write sophisticated programs that feel like they belong on the platform.

True, without access to a Mac and Apple's developer tools, you can't write native UIKit applications in Objective-C, and without paying $99 and agreeing to Apple's onerous terms (or having a friend who will build executables for you), you can't run those apps on a real iPad. But that doesn't mean you can't program on your iPad, nor does it mean that you can't write programs that feel native.

People mocked Steve Jobs when he said he had a “very sweet solution” for non-native programming the iPhone:

We've got an innovative new way to create applications for mobile devices. Really innovative.…The full Safari engine is inside of iPhone. It gives us tremendous capability.…You can write amazing Web 2.0 and AJAX apps that look exactly and behave exactly like apps on the iPhone. And these apps can integrate perfectly with iPhone services.

When Jobs announced this approach, John Gruber called it a “shit sandwich”, but later on he realized just how powerful that environment could be when he discovered mobile web apps written with PastryKit really could feel almost identical to native iPhone apps.

And it shouldn't be a surprise. Today's JavaScript is fast and powerful. You only have to look at 280 North's 280 Slides application to realize that today's web can create applications that feel full-featured. (Apple's MobileMe provides a similarly rich experience.) Yet, despite its power, people often forget JavaScript entirely when they think about environments for doing interesting computation.

A lot of the hacker types commenting on the iPad remember the days of having a machine they could understand in its entirety, and lament how that experience is being denied to a new generation of programmers—you can certainly argue that no matter how powerful JavaScript is, it is hardly the same kind of experience. I certainly remember the Sinclair ZX Spectrum, and the fun of knowing exactly how it worked from books like Ian Logan and Frank O'Hara's The Complete Spectrum ROM Disassembly. Other people had similar experiences with the Commodore 64 or the Apple //e. If a child today would like to have that experience, they can, because there are web-based emulators like jsspeccy (ZX Spectrum) and jsc64 (Commodore 64) that recreate these platforms entirely in JavaScript. A simple Google search can find many more emulators and programming environments implemented entirely within the browser.

Those same hacker types might say that the playing with virtual hardware inside a web browser is not the same as hacking on the actual device as they did on the computers of their youth. That's true, but it's also the case that an iPad or MacBook is not like a Commodore-64 or ZX Spectrum. You really can't understand the whole thing. The complexity is higher, and eventually you are going to get to a boundary that says “don't go beyond this point” (e.g., you don't need to know how we render a PDF image, just make the call and we'll do it for you).

It's nostalgic to remember the days of the Apple //e, Commodore-64, and ZX Spectrum, but those days were gone long before the iPad was conceived. Kids were already mostly uninterested in programming because there are so many other more interesting distractions on today's powerful Internet-connected machines. Games and social networking do more to keep people away from programming than not being able to build native apps for nothing on an iPad does.

Times change. There was a time when anyone could maintain everything in their car. There was a time when everyone knew where their food came from. That's rare today. If commodity computers become less open for tinkering because most people don't care about tinkering, I'll be sorry to see it happen, because I enjoy that kind of tinkering. I'll do my best to lobby to stop it from happening, but if it happens, it happens—it'll be just another trade-off we make as part of the process we call progress.

But as things stand, although the iPad isn't as tinkering-friendly as some people might like, it's erroneous to paint a picture that says it prevents people from learning about programming. Even if Apple doesn't allow any other programming environments on the iPad (something that strikes me as unjustifiable in the long term), for as long as it has a web browser, and as long as the web itself provides a powerful environment for tinkerers, one that is itself a universal machine, there will still be a lot of ways for little Sally to learn all about programming on her iPad.