The next smartphone wave is about to hit. There are rumors that Android 3.1 (Ice Cream Sandwich) will drop in May, and iOS 5 in June. Greg already posted a pretty compelling user’s wish list for the latter, but what developers want is at least as important—because, as the lukewarm-to-appalled recent PlayBook reviews show, it hardly matters how great your hardware is. Nowadays success is all about the apps.
Most users probably don’t appreciate that while both platforms have come a long way from their inglorious beginnings, both still have some painful, glaring flaws from a developer’s perspective. I should know: within the last six months I’ve been paid to write Android, Blackberry, iPhone, and iPad apps. I’ve also released my own pet-project travel app on both the App Store and Android Market, so I’m all too familiar with those headaches too.
Why should you care? Because these are (often) the main reasons why your apps suck, or crash, or both.
A Letter To Steve Jobs and Scott Forstall
Steve Jobs (and Scott Forstall)
One Infinite Loop
Please give us garbage collection. Please please please give us garbage collection. I know it isn’t sexy, or shiny, or bezelled. I know users can’t see any difference (except when apps crash, or take twice as long to develop as they should.) But while almost everything else about the iOS SDK—the editor, the libraries, Objective-C itself—is pretty wonderful, its memory management is straight out of the 1980s. As a compatriot recently said with horror, when he first looked at iOS development, “Wait a minute, what decade is this?” It’s like driving a Ferrari with brakes built by Lada.
Memory management, for the uninitiated, refers to how a device shares its limited physical memory among its apps’ virtually unlimited desires. Every modern development environment has an automatic service—a “garbage collector”—which does most of this scutwork. You can still get into memory trouble, believe me, but at least you don’t have to painstakingly allocate and release every block of memory you might want to use beyond the current moment, lest you introduce a bug that is often devilishly difficult to find and fix.
…Unless you’re writing an iOS app. Still. After all these years. W. T. F.!? Some claim that garbage collection is for the weak, but not Apple: OS X has had it for years. Others say it doesn’t work on mobile devices with limited resources. Or at least they did until Android and WebOS emerged; both have been garbage collected from day one.
It’s a bit like the multitasking argument. Reasonable people, in 2009: “Why doesn’t the iPhone multitask, like Android?” Apple fanboys: “Because multitasking is bad, and evil!” Apple, in 2010: “Here’s iOS 4.0, with multitasking!” Apple fanboys: “We have always been at war with Oceania loved multitasking!” Of course, purists would point out that iOS doesn’t actually have real multitasking, like Android.
Please give us real multitasking, like Android.
Please make it possible to develop iOS apps on something other than a Mac. Not for me; I am very happy with my shiny new MacBook Pro. For you. Because three billion people in the developing world will be buying smartphones over the next decade; they’ll want apps relevant to their culture and lifestyle, ie built by people from their culture and lifestyle; and if you’re a developer in a poor-but-emerging market, would you rather spend $200 to start writing Android apps, or $1000 to start developing for iOS? Exactly. I’ve been saying this for years, Steve, but you haven’t been listening. Which is a shame, because I’d like for your (mostly) slick and elegant OS/SDK to succeed in the rest of the world, too.
That said, I do have my doubts about your general hegemonic approach.
I’m actually not going to complain about the App Store. Sure, it takes five days to release an app instead of Android’s five minutes, but that’s due to a philosophical difference which I can respect. (Though it’d be nice if you could cut it down to one day.) But could you please open up the parts of your system that are locked down so tightly that developers can barely touch them at all? Bluetooth, for instance. It’s nice that you let it be used under controlled circumstances for games. But how about letting us use it to send data to other devices? Which, you know, was kind of its whole idea in the first place?
Thanks in advance,
PS I’d really settle for just the garbage collection.
A Letter To Larry Page And Andy Rubin
Larry Page (and Andy Rubin)
1600 Amphitheatre Parkway
Mountain View, CA
We need to talk.
Don’t get me wrong. On the whole I like Android even more than iOS. True, we have to write your apps in Java, not my favorite language. Yes, some of the tools (eg the debugger) are awfully crude compared to the slick, seamless environment that Apple gives us. I can live with those quirks, though, and otherwise it’s mostly a developer’s dream: powerful, flexible and open(ish).
But we need to talk about fragmentation.
Device fragmentation is bad enough. The layout system you’ve built so that one Android app can work seamlessly on devices with different screen sizes and configurations is clever – but it’s painful. Android UI implementation has become a kind of messy and complex voodoo. That’s why very few Android apps are as slick as their iPhone counterparts. It’s hard to make art out of Lego bricks that never quite seem to fit together seamlessly. And this is apparently about to get even worse, if it’s true that Android 3.1 is meant for smartphones and tablets and televisions. So,
Please make it much easier to make attractive and responsive Android apps. Yes, it’s possible today, if you jump through a hundred hoops; but could you maybe cut that number down to ten?
…That’s a minor complaint compared to the real fragmentation problem, though. By which I mean the operating system. By which I mean the carriers.
When Apple releases a new OS, it’s immediately available for every Apple device that can support it. Why can’t Android work like that? Because carriers get in the way. They load devices with irritating, useless cruft, replace vital infrastructure with their own inferior versions (eg crippled Bluetooth stacks) and take forever to update their devices with new OSes.
Why do carriers do this? Because, like the Taliban, they hate our freedom. As a result, according to your own Platform Versions chart, 33% of Android devices are still running Android 2.1 (which came out fifteen months ago) or earlier; so we developers are still reluctant to write apps that take advantage of the new features in Android 2.2, never mind 2.3 or 3.1. That isn’t good for us, and it isn’t good for you.
Please set your people free.
Thanks in advance,
PS You totally should have gone with that unlocked $99 Nexus One plan.
Image credit: Niccolò Caranti, Flickr