Sunday, August 10, 2008

A while back one of my colleagues -- Charles Wiles -- asked me a very interesting question:

"What is an example of an application you build with the Android APIs that you couldn't build with browser Ajax?"

This is a deceptively simple question. There are easy answers to it, but it turns out that those lack a certain... je ne sais quoi. The easy answers just aren't satisfying, and I eventually realized that there's a deeper question that people are really asking, when they ask about Android "vs." some other platform, like J2ME or the iPhone or Symbian.

So I spent some time thinking about it. One problem is that there's a lot of grey area here. Many applications could be done using either technique, or on several of the other platforms out there, and still be great user experiences. In other words, it's not really about features, and it's not really about capabilities. It's not about having GPS where someone else doesn't, since the other guy will add it in his next release along with a feature you don't have.

I needed a deeper, better answer. I eventually realized that what developers are really getting at when they ask questions like this is:

"What is the difference is between all these damned platforms, and why I should care?"

Every developer has a different career, skill background, and set of interests. Everyone also tries to understand new things by applying knowledge they already have. So, developers who understand J2ME ask about Android vs. J2ME; developers who understand Macs or iPhone come from that direction; and so on. But they're really asking the same thing: how should I be thinking about Android?

Let's take the iPhone, for instance. With the iPhone Apple has a very solid, very successful platform -- no doubt about it. However, much has been made about the restrictions on applications, such as no background processing, no interpreted language runtimes, and so on. Opinions vary as to whether this is good, bad, user-friendly, developer-unfriendly, or what.

But that kind of scrutiny is like looking through a microscope: you can't see the big picture. What Apple has with the iPhone really just boils down (in concept, not in the details) to a gadgets platform, like OpenSocial, iGoogle, or Facebook.

Apple owns their platform and sees themselves as responsible for the user experience, period. They restrict what applications can do and what they can access accordingly, so as to maintain the quality of that user experience according to their standards. They acknowledge the benefit that third-party developers can bring and will let you build apps to plug in to their user experience, but make no mistake: this is a private party at Apple's house. They can be as picky as they want about who they let in, and they can ask you to leave at any time. But once you get in, as long as you behave yourself Apple wants you to have a good time.

Now, this isn't criticism, just an observation. As Google, Facebook, and the various sites that have deployed OpenSocial demonstrate, this is a perfectly legitimate platform model. Like those other services, Apple is providing the platform and a very clear, specific execution environment. Developers are expected to plug into that cleanly and respect the borders that Apple has laid out.

The benefit to developers is that they get to ride the coattails of iPhone's success. But the potential downsides are that you just can't break out of that sandbox. For instance, consider Facebook. Facebook has a really nice iPhone application, and I've even heard it said that it could "almost" physically replace the iPhone Contact book.

Well, why doesn't it? The answer is that Apple doesn't want it to, because that Contacts user experience is a key part of their platform. It would be like Facebook itself letting a third-party developer build an app to totally reskin the site and insert its own branding -- it's just not going to happen.

However, that kind of thing is exactly what Android aims to enable. If an end user buys a phone that comes with the standard Google look-&-feel and application suite on it, we see no reason why that user shouldn't be able to choose to replace it with Facebook. Android is intentionally designed to let third parties such as Facebook build an application that replaces the Contacts book, Home screen, and Dialer, or nearly anything else. It will quite literally be possible to completely reskin an Android device into a Facebook phone. (What would that be -- an fPhone?)

You might even say that Android and iPhone are sort of inverses of each other. iPhone is a Gadgets-style platform where the user experience is largely fixed and an execution context is carved out for each third-party application. Android provides a framework for managing the execution contexts of third-party applications, which are permitted (and expected) to augment the user experience in innovative ways.

Neither approach is inherently "better", and when it comes down to the daily business of writing code and building UIs, the experience probably isn't that different. But in terms of the big picture, that is the satisfying meaty answer that I've been looking for.

At least, for "Android vs. iPhone." There are quite a few other platforms out there, though, and each one has a slightly different answer. (Perhaps the subjects of future posts...) But now that I have the right angle to view this question from, it makes it a lot easier to talk about. At least with geeks -- I don't know that my family appreciated it that much last week, when I was home on vacation.

only rainwater and pure grain alcohol

You are who you are, and I am morrildl. It's a funny handle, to be sure, but it was my first login name. To a guy like me, your first login name is like your given name: you may not like it, but you are stuck with it.

This is my blog, which I use to say things that I think ought to be said. It's mostly technical, but I'm not going to lie to you; you might see some pictures of my cats. I hope that's not a problem for you.

Thanks for dropping by, but please remember that though I work for Google, this blog is my own. Anything I say here is my own work and represents my own opinion, and doesn't reflect the opinion or position of Google.