Native Apps Are Dead, Long Live Native Apps
cardoni writes "Dan Yoder, CTO at Border Stylo, offers insights on the current state of simultaneous iPhone / Android development using PhoneGap and his thoughts on the debate over native apps versus Web apps. Quoting: 'One problem with the debate is that it’s a false dichotomy, since you can embed a Web browser within a native application. And, conversely, you can extend an embedded Web browser to provide access to native APIs. The two alternatives have not been mutually exclusive for years now. And, focusing on the strengths of native applications ignores the benefits of Web applications. For example, there’s the appeal of writing code that will run on a variety of different devices, ranging from mobile phones, to tablets, to laptops, even to gaming consoles. Virtually every major device platform now sports a Web browser, and it can often be discreetly embedded within a native application. To boot, much of this code can be tested using a Web browser, which enables more easily automated testing. It’s also easier to find Web developers than it is to find native developers.'"
Everything looks like a nail. Web apps are nice and play in a certain application space. Same with Native apps. Saying that one is "better" than another isn't fair since the apps themselves are different, with different constraints (how do I access a file on the users local filesystem seamlessly from a web app?). If I was going for "I'm going to write an application to conquer the world" approach, I would probably want it to run on iPhone and Android, so a web app is probably a good option. However, if I know my application is fixed to one piece of hardware (the newest iPhone for example) a native app is better since I can access more of the hardware with a native application.
"It’s also easier to find Web developers than it is to find native developers." A good programmer shouldn't really care what level he is working in, best practices etc. are fundamentally the same. Every decent programmer I know has dabbled in everything from assembler to javascript, at the very least. The good ones have written large applications in both or more. Making this a useless dichotomy, because whatever the application a poor programmer can drag an entire team or application down on his own.
Well... running on many platforms sounds nicer than it actually is.
You tend to end up with an app that is tailored to the lowest common denominator of the platforms.
If you want to shine, you will want to go native.
Bram Stolk http://stolk.org/tlctc/
Android and iOS have very different UI conventions. TFA mentions the problem but then ignores it. By using PhoneGap (or any of the other similar products) you still need to build two different apps if you want to get good results. Just look at PhoneGap's featured apps examples. Almost every single one of them is written for iOS. If you bring them to Android users wont accept them as native. They will feel wrong. I wrote a post about this very problem into my blog few weeks back: http://www.androiduipatterns.com/2011/06/differences-between-android-and-ios-ui.html Benefit of PhoneGap etc. is that you can use web technologies to write the apps. It is a false hope, though, if you expect to "write once, run everywhere". Juhani
If you're a native application developer, I suspect that you'd be absolutely miserable if you ever had to work on web apps full-time.
Web app development is challenging for all of the wrong reasons. Whether it's having to use horrid languages like JavaScript or PHP, or dealing with broken browsers like IE6, or dealing with shitty MySQL databases "designed" by people who didn't understand even basic relational theory, you won't find much enjoyable about it.
At least native applications are often built using real programming languages like C and C++. Even semi-native languages like Java, C# and, dare I say it, VB.NET, are much, much, much more enjoyable to use than JavaScript or PHP, or dealing with broken HTML, or fighting with stylesheets.
I'm glad I was able to retire without having to do too much web development. Everything about it was decades behind where native applications were at the time, and things still haven't changed.
It really does become the "Write once, debug everywhere," thing. Unless you are using very simple HTML and pretty much no interactivity, at which point you are a web site not a web app, you are going to have to have a shitload of "gotchas" and different cases. Not just for major different platforms like Android, Windows, etc but for different browsers.
Now if you want to do all that, well and good, but be serious about the amount of effort it takes and the amount of time savings, if any, over doing things native.
For complex applications, there isn't a "Just write it once," way of doing things.
and the reason is that with all the utility of HTML / CSS / JavaScript it is still brittle
DOM is getting even more bloated, inefficient and slow. CSS is out of control and when put to the extreme it is like reading RegEx that you didn't write that has 400 expressions in one string. That coupled with differences in even handling the box model between IE and everyone else is enough to drive a sane person over the edge, especialy with the kludges in CSS that were glued on to handle those problems.
JavaScript is supposed to be the language used to manipulate the Document Object but it was so poorly implemented that jQuery was required to make it reasonably useful.
For those reasons people keep writing native apps that work correctly the first time out of the gate.
Hey KID! Yeah you, get the fuck off my lawn!
Unfortunately, the more the big companies try to push everything into a web app, the worse it's going to be for those of us that want apps to make stuff instead of apps to consume stuff.
Web apps are to native apps what 1970s TV was to 1970s cinema.
And this comment is one that only a handful of people will understand because I haven't worked hard enough to make my point clear.
I don't mind the growth of web apps, but I've noticed a certain stagnation to native apps lately that I suspect is because of it. I hope it's just temporary.
You are welcome on my lawn.
Software people sometimes forget physical limitations. Web apps require more CPU cycles for the same work (even if just to run a JIT compiler), more CPU cycles will consume more of the user's battery life, and battery energy density isn't getting that much better over time.
... that Web access is going to continue to be cheap, fast, and always-on, then web apps and the whole cloud thing makes some sort of sense. Though there are still privacy and security issues.
But I don't assume that Web access is going to continue to be cheap, fast, and always-on. I sincerely hope that I'm wrong.
Dan Yoder
Who?
CTO at Border Stylo
Again, who?
Native Apps Are Dead
Oh, that again, whatever...
Remember when Steve Jobs stood on stage and told developers they did not need to code native apps, because the iOS would ship with an awesome web browser? Didn't go too well, and they were forced to release native app support. Then Rubenstien left Apple to help build WebOS at Palm, that also did not support native apps. They may die someday, but it will not be any time soon.
Whether it's having to use horrid languages like JavaScript or PHP,
JavaScript isn't a bad language. It's not a great language, but it's much better than it's given credit for.
PHP is, however, a pretty bad language. Maybe it's gotten better recently, but it's not a great choice -- especially when, on the server, you have options.
or dealing with broken browsers like IE6,
That does suck. Last time I did web development, it took something like an hour a week. But that's really not bad, in the scheme of things.
We also eventually decided to drop IE6 when we noticed how little of our traffic included it -- we targeted at least IE7, which was much better in that respect.
or dealing with shitty MySQL databases "designed" by people who didn't understand even basic relational theory,
In this case, you're in the same boat as with PHP -- that is, you're working with legacy code developed by shitty developers. You find the same shit everywhere.
Or you can use languages that are actually enjoyable on the server side, and work with designers who actually do understand databases.
At least native applications are often built using real programming languages like C and C++.
I'd prefer JavaScript to C++, but then, I hate static types. But I'm confused that anyone in their right mind would prefer C to JavaScript. C, really?
Even semi-native languages...
What do you mean "even"? I mean...
like Java, C# and, dare I say it, VB.NET,
Are you really saying C and C++ are more enjoyable than the above?
And people are taking you seriously?
I could see the argument that they are more "powerful", in some sense. More efficient, certainly, in the hands of someone who knows what they're doing. But more enjoyable?
I enjoy not having to debug segfaults anymore. Let's start with that.
or dealing with broken HTML,
How is this any worse than, say, dealing with a broken GUI widget?
or fighting with stylesheets.
This is probably the worst part of web development right now, so I do agree with you there.
But I'd still rather fight with stylesheets than fight with manual memory allocation in C and C++, or with making Java, C#, and VB.NET programs actually cross-platform -- or even be sure they work on everyone's machine. There are far fewer popular browsers than there are ways people will fuck up Windows.
Everything about it was decades behind where native applications were at the time, and things still haven't changed.
Oh, they have changed.
There are aspects which are decades ahead of native apps now, but there are also aspects which are decades behind.
Don't thank God, thank a doctor!