Soapbox: Native vs Web-Based Applications

As you’re probably aware, I develop mainly for the web. I love developing Web Applications – the technologies are great, it’s easy to use a blend of technologies, deployment is simple and they can provide a fantastic user experience. However, I also do quite a bit of native development in Objective-C and Cocoa, which I also love – the applications are quick, they fit in to your OS environment, and you can take advantage of really low-level APIs for threading etc. There are hundreds of debates on the web where web developers and native developers try and convince each other that their technique is best: this isn’t one of those debates.

This post was inspired by a talk at devnest this past Tuesday, where someone gave a presentation on developing mobile applications with jQuery Mobile. It was very interesting – I think jQuery Mobile is a fantastic framework, and it really simplifies the process of turning your web application into something that people can use on-the-go with their mobile devices. However, this person then introduced a piece of software called PhoneGap, which allows you to take an application you’ve developed in HTML/CSS/JS, offers you access to the low-level APIs, and lets you deploy it across multiple platforms as a native application.

Don’t get me wrong, jQuery Mobile looks great and works really well – but put it alongside a native application on an iPhone, for instance, and suddenly you see that the jQuery Mobile app actually is slow as a pig and looks out-of-place. That’s the sort of user experience I’d expect from a web app, but I’d expect a load more from a native application, especially if I’d paid money for it.

At work, I’ve been doing a load of research into different technologies and how we could utilise them in our roadmap. One thing I’m continually pushing for is using the best tool for the job. If it turns out that PHP is the best solution, great, but if it turns out that Python is the best solution, and you don’t know Python, you better get hold of some manuals and start learning. If you want to develop a mobile application, the device’s native language is the best solution. If you want to deploy across multiple platforms, and don’t need access to the device’s APIs, then develop a web app. If you do need access to the APIs, you’ve got a lot of work to do.