Apple's Mistake (2009)
paulgraham.com
paulgraham.com
I feel that Apple is generally not all that friendly to developers: they make it hard to just start hacking on your device, with lots of bureaucratic hoops, app signings, developer accounts you need; you can't do any development without a Mac; they make little or no effort to ease the transition to their platform for developers new to Apple development -- there's only one programming language that's credible to develop in, and it's one that no one else in the industry uses; documentation is spotty and there don't seem to be a lot of good books out there. They obviously have a lot invested in ObjectiveC, and it goes way back to before they had a platform that stood to attract lots of new developers, so I get that it would be impractical to just drop ObjectiveC as the core language. But they could definitely do more to support standard scripting languages as viable alternatives to ObjC. I gather that they flirted with Python (or was it Ruby?) for a while, but then they dropped it. Google clearly did developers a favor by using Java and Linux as the platform. I'm not that personally fond of Java, but it's way better than some language that's totally bizarre and used by only one company (I'd make only one exception, if that company happened to be Microsoft, because MS has been big enough for long enough to create their own language, and I don't think they'd ever force something like ObjC on you anyway).
I'm reminded of something I do like about Apple development -- I like that it's fully POSIX and BSD compatible, even on the phone. And they integrate and encourage popular open source libraries. But I'm not sure if they did that to cut developers a break, or just to save themselves time by using stuff that was already available.
The most impressive aspect of the App Store is that a human ensures a certain level of quality of every single app in the store. While a few clauses in Apple's guidelines get the most attention in the blogosphere (like ability to access adult content), the bulk if it is actually mundane stuff like: The app doesn't crash if there's no Internet connection, or if the connection drops. The app doesn't have other glaring bugs or usability issues. It's compatible with some range of OS versions and devices. And so on. It was ambitious of Apple to try to scale a curated store to hundreds of thousands of apps, but they hired lots of people and they did it.
The store is also a much better experience than any previous way of buying, or even discovering, software. You can easily pay with one click; the download begins instantly; and the installation happens invisibly. Remember filling out credit card forms online just to buy a $5 app? Imagine that process on a tiny screen. Remember installers? Uninstallers? When shopping, you can browse titles easily, and you can get an idea what you're buying. The organization and user interface, while often criticized, are better than anything comparable that I know of (game console stores; old shareware sites), and of course the selection is much larger.
One final point to note is that most hackers, as much as they love hacking around with technology, don't have the desire, experience, or attention span to produce a polished app with a decent user experience, and for those that do, it necessarily takes many many hours. So some of the hurdles Apple puts up (like registering for the developer program) should be put in perspective. On the other hand, I absolutely think the iPhone could stand to be more hacker-friendly and easy to mess around with.
In summary, I think of the App Store as an Apple innovation and a very daring one. Like many Apple innovations, many parts of it seem obvious (and maybe are/were) and yet are hard to do and weren't done previously, or weren't integrated. Apple's always trying to integrate stuff, which tends to reduce choice at a technical level but vastly improve the experience of using the product (...if only it weren't the trade-off it was). The canonical example is making both the hardware and the software for a computer, but there's an endless list of smaller ones (like deciding the sound card is part of the computer).