John Gruber, well known and highly successful opinionista, is perhaps the highest profile carrier of the “native” apps are intrinsically better than web apps meme (let’s call it Native is better Syndrome, or NIBS). I think it’s time for some vaccination.
Let’s take a look at the most recent outbreak of NIBS.
In response to Jim Balsillie’s (co-CEO of Research In Motion) observation
Why do you need a YouTube app if you play YouTube? Why do you need an app to follow the Tour de France if you can just follow the Tour de France?”
Gruber’s essentially states that this is flat out wrong. He asserts (among many other spurious things)
The logic here is simple. If you write an app with Objective-C/CocoaTouch (does the same logic hold for JavaME (Android), C++ (various other platforms) and so on?) the user experience created is by that very fact better.
Now, in order for this assertion to be true, there must be not a single web app better than a single native iPhone app. This is trivially false. For any crap web app, I can show you a crap native app. Many of the most successful and lauded native apps, particularly games, are built with development environments that don’t use CocaTouch. So, the difference is logically not the development environment.
So, can we all please STFU about how native apps are intrinsically better than web apps?
At present, on various platforms, it’s true that the full capabilities of the platform are not exposed to web technology based applications, particularly via the browser. However, with solutions like phoneGap and Appcelerator, for iOS and Android, as well as “native” web platforms such as webOS, and RIM’s WebWorks means this is less of an issue than it was when iOS apps debuted.
But, I will argue, in the contrary, there are things intrinsic to web apps that “native” apps can’t, and will likely never be able to do.
The heart and soul of the web is linking. Right now, very few people see the power of app to app linking. But try these two links
Yes it is a reasonably simple example, but it demonstrates how web apps can share state trivially via URLs, without the need for server side intervention, in (effectively) any browser.
Native apps don’t do linking. They push stuff to and from a server. Sorry Mr Gruber they aren’t web clients, they’re simply client server apps running over http.
Want to write a “native” :
- iOS app? – use Objective-C
- Android App? – use Java
- webOS app? – use HTML/CSS/JS
- BlackBerry app – use Java
And of course, underlying each of these platforms is its own API – so even if your app does identical things on each platform, you need to learn and write to different APIs.
The implication for developers is they need to maintain different code bases for each platform, in perpetuity. And, perhaps with the exception of the very largest development shops, you are going to have to pick winners, because it is not feasible to target more than a couple of platforms.
This is never going away.
But, apps built with web technologies can already access many of the underlying device APIs, either directly as in the case of Geolocation, or via phoneGap, or similar harnesses.
Additionally, the W3C is working on standardizing Device APIs, through the Device APIs working Group.
So, already, and increasingly into the future, you’ll be able to develop with a single code base, and deploy to (ultimately) any platform. The web. So why wait?
As a developer, here’s a simple question – who do you want to control your business or the distribution of your application? You, or a third party (any third party)? With “native” apps, you must go through a third party, who owns the platform, and also potentially competes with you. You cede them arbitrary authority to shut down your business, or the reach of your application, with no notice, and no right of recourse, for almost any reason.
This is the opposite of the web. The core principles of the web include
- Decentralization (We have no kings or presidents. We believe in rough consensus and running code)
- Tolerance (good luck getting Dalai Lama related Apps on your iPhone in China)
In a way, native apps are parasitic – consuming the resources of the web/internet, resources like HTTP, TCP/IP that would never be there to be built on, taking advantage of the network effect of hundreds of millions of users, who would not be there were it not for the web, all the while subverting the guiding principles of the web.
The argument that apps built with Java on Android, or Objective-C on iOS (and so on) are intrinsically better (particularly because their UX is better) is simply BS.
While applications running in browsers do continue to have less access to underlying device APIs than “native apps” there are technologies for minimizing this, and in time (and not a great deal of it) this will be less and less of an issue. It’s frankly not a technical issue, it’s IMO a control issue by platform developers. Is it any wonder newer platforms make web technologies first class citizens?
Despite this, web based apps do have intrinsic benfits – they are intrinsically more connected, and connectable, and are intrinsically freer. You may or may not care about such things, but this is simply not in dispute.
So, you want to bet big? Invest in web technologies – learn them, develop with them, build tools for them, immerse yourself in them. We aint seen nothing yet.