Okay, don’t get me wrong. I use Adobe AIR applications, notably the almost-excellent TweetDeck (more of the “almost” in a second.) I also use Java applications. But I only use them when there’s no native alternative that does what I want.
The reason is mostly in the user interface. The minor irritations that come with non-native applications often end up being the death of a thousand cuts for the user experience.
Hands up those of you who have read the description of an application, and thought, “ooh, that’s just what I want!” then been utterly disappointed when you’ve found it’s written in Java. Because — and it shouldn’t still work like this, but it so often does:
- the thing looks like arse when you finally get it running (normally after installing yet another version of the JVM on your machine)
- it works nothing like the other applications you use — even the Java ones
- it’s slow as a dog with a broken leg
Cross-platform development is hard, and it’s still being done badly by almost everyone.
Including Adobe, with their AIR. Now, this is a promising platform, it fundamentally works, it’s fairly lightweight, and I’m sure it will get better with time.
But it’s the little irritations that come with cross-platform applications — basically, where they’ve had to reinvent the wheel — that can drive you up the wall.
Let’s take TweetDeck as an example. It’s an AIR-platform Twitter client that has lots of nice features.
It’s also slightly annoying in lots of little ways.
The first version was good. But I had problems editing my Tweets. Because the standard Mac keyboard keys didn’t work with it. Option+← didn’t take me back a word. Option+→ didn’t take me forward a word. The standard Emacs bindings, that I grew up with and still, happily, work everywhere on a Mac, didn’t work.
That’s been partly fixed. And I was delighted to note that in the latest version, a spelling checker had been added — a feature I’d been wanting for ages (I’m good at spelling, but I like catching typos before they go out for the world to see.)
Except, when I started up the new version, and typed out my first new Tweet, I found out that it was an American spelling checker.
This, you see, wouldn’t happen with native applications.
In fact, if If you fire up Apple’s XCode, drag a standard NSTextView onto your shiny new application, and run it, you get spell checking right from the start, all using the native OS X spell checking facility, and paying attention to your regional settings.
This is the advantage of native applications, especially compared to new starters like AIR. Developers can stand on the shoulders of giants very easily. I don’t have to do anything to get a powerful spell-checker that supports a hundred different languages and pays attention to my regional settings. I just drag a text box onto my application and it works, using code that’s been written, tested and refined by hundreds of people over the course of decades.
It’s not just the native bits. I use Growl for my notifications. Except in TweetDeck, which has its own notification system. A notification system that’s almost, but not quite, like Growl, and pops itself over the top of my Growl notifications instead of joining in nicely with the other children.
It’s all about wheels, you see. And the reinvention thereof. The developer of TweetDeck, and the Adobe AIR development team, are all reinventing wheels, because that’s what you mostly have to do when you want to go cross-platform.
And when you reinvent a wheel, you often end up with one that’s a different colour, or a different size, or with a different coefficient of friction. In many cases, in fact, you end up with one that’s not even circular.
Sure, things will get better. At some point Adobe will figure out how to get spell-checking to work across different platforms. They may even figure out how to use the existing spell checker on those nice operating systems that come with them out of the box. So that particular wheel will be round.
But looking at all the Java apps out there — the ones where all the buttons look different, where keyboard shortcuts don’t work how you’d expect, where something fouls up because you’ve got an unexpected version of the Java Virtual Machine installed, or your PATH is set wrong, the ones where opening a file brings up something that looks like it’s running under X in 1993, the ones where hitting the usual shortcut key deletes all your text rather than saving it — I think it’ll be a long time before AIR’s young upstart wheels are the same colour as your native application’s wheels.
Now, I’m still going to be using TweetDeck, because it’s excellent for doing complicated things with Twitter. But I’m mostly going to be using the native Echofon, or Twitterific, because I’d like a spell checker that works in my language, and the ability to type international characters, and an editor where holding down the shift key accidentally when you hit the spacebar still actually types a space.
And this isn’t because Echofon or Twitterific’s developers are geniuses (although they’re clearly very smart cookies.) It’s because they’re developing native applications, so they didn’t have to think too hard about this stuff. They just stood on Apple’s shoulders and Everything Just Worked.
One day, we’ll have cross-platform applications where Everything Just Works. But I won’t hold my breath. And until then, I’m afraid that Everything Nearly Just Works is going to be the standard cross-platform irritation. And it’s enough of an irritation that I’m always happy to use two completely different applications on different platforms to do the same thing, rather than a single Java or Air app.