Jamar Parris asks:
I’ve really been contemplating whether to focus my efforts on one versus the other as I’m still new to both technologies. What impact do you think will HTML5, CSS3, WebGL, etc have on Objective-C iOS developers?
The question web versus native is one that makes waves every once in a while when there is support for a new formerly native technology in browsers or when Apple rejects an app. Let me expand my answer a bit, as there were a couple of recent experiences that serve well to underline my opinion on this question.
When I went full steam ahead with being a full-time iOS developer I made the conscious decision to only focus on a single platform. The main reason for doing so is that I feel that only when focussing like this you have a chance to become great at it. As a general rule of thumb you need to spend about 10,000 hours on any subject matter to be world class. Be it art or science, you need to put in the hours to grow the skills you need to excel at the topic you have chosen.
Of course you can be a Jack of all Trades, but those typically never make much money. There are two career paths that are possible in IT: you can either strive to become an expert at programming, some large corporations call these “programmer/analyst”. Or you can develop into a management role. It is only on rare occasions that you will find great managers that are also great and active developers. Pure development (i.e. coding) is only a part of what does into making an app. Lots of it is overhead that good management tries to keep from hindering the developers.
Having said that you can look into becoming a manager/leader even without committing to a single platform. As a manager your platform is people and the OS of these – if you will – are their needs, wishes and social interactions between them.
Now, that’s more like a comment on the “focussing my efforts” part of your question. Yes, I think you should definitely focus. But first the question is Management versus Expert path.
Now for the expert path, there is only one answer that I can give you and that is from my own autobiography. I am putting all my eggs in the “native” basket. Off the top of my head, here are my primary reasons:
- I love Cocoa and Objective-C for their elegance and power
- There are orders of magnitude more web developers on Earth than iOS developers, so it is rather more likely that I can be at the top in iOS than in web tech.
- Experts generally earn more than Generalists and iOS Experts are currently the most sought after bunch.
- I have yet to see a business model on the web that would work for solo-developers like myself. I can make and sell apps at virtually no cost. For monetization on the web you only have SOAS (Software as a Service) and Ads, both of which are only feasable if you build a business around them, not for doing an app here or there.
- I love Apple and by working within their eco system I cast my vote for their awesomeness
- I hate JavaScript, frown at Java and .NET and actively dislike Microsoft.
Granted, those are mostly emotional reasons, but I think all reasons you can have are such. It boils down to my core belief that I think that native development is more fun and has better rewards than web tech.
Let me also properly answer the second part, which is not really asking about my opinion what is better. Sorry for going overboard here. The second question is actually about what I think the impact will be. And there I can give you a less emotional answer, again from my perspective.
With more and more apps pushing onto the stage that is the app store Apple has set forth some guidelines for app reviewers that we can also consider when making design decisions, long before touching any code on any platform. The clear message is: we want no more fart apps and an app should be way more than a web page to be approved. Apps that would look the same if you did them in HTML/CSS face a high likelihood of being rejected these days.
The example I can quote is this: iCatalog. This is a white label app I own and that my partner ICS in the USA is selling as a catalog on iPad solution to their clients. With some smart technology we take the PDFs and make them interactive. Now there are some customers who are able to provide full lists of products in XML, for these we can do a nice solution where you can select size and color options and get price information. For other clients we only have product names and URLs. There we would display a webview with the product page in it. With the problem that these would obviously only work if you are connected to the internet.
One of these web-catalogs recently got rejected by Apple, citing:
We’ve completed the review of your app, but cannot post this version to the App Store because it did not comply with the App Store Review Guidelines, as detailed below:
- 12.3: Apps that are simply web clippings, content aggregators, or a collection of links, may be rejected
For me as a developer it is hard to get such a rejection. Fortunately we were able to argue the plethora of additional native features that iCatalog boasts in our favor. Also we just had completed a new offline feature that went into the app to sweeten the deal for Apple. So it went through and got approved on the second go.
What does this tell us? For one thing, Apple is tightening the noose around apps that are bordering on being repackaged web apps. So if you start making an app, make sure that you use native device features (like, sensors, CoreAnimation, location, camera, etc) that make clear the value proposition of your work.
If something works just as well as a web app, then by all means have it as web app! Most of the time these would be free services that just have a viewing component for which you need Internet anyway. In some rare examples like Readability the problem there was a disagreement over sharing 30% of subscription revenues with Apple that prompted them to go the web-based route.
New HTML technologies make inroads into former native app territories. Like you can get position data now in mobile browsers. So the number of reasons for doing native apps might be seen decreasing over time. Apple’s Nitro JavaScript engine is only present in mobile Safari for the very same reason: they don’t want developers to do fancy JS tricks in UIWebViews like so many are doing it these days to get rich text editing or HTML rendering. Apple established a developer program of its own right on the developer center, on par with the iOS and Mac ones. This also hints at what they are trying to achieve.
Apple wants native apps to make use of all what their devices are offering. Apple wants web apps to work and platform-independent as possible. And you know, WebKit is Open Source and the de facto standard for rendering web pages.
On the other side, while technologies like WebGL are nice in theory, native platforms will always stay ahead in performance due to the native interfaces available to talk more or less directly with the GPU and hardware. We have seen several apps recently that are showing off some really cool ideas of what you can do with this power, like the one that tracks your face to adjust a 3D rendering.
If you are interested in local mobile computing power and the interesting things that you can do with shaky or no internet connection then native is the way to go. If you can outsource the computing power to the cloud and internet connection is satisfactorily then you can also be web-based. But frankly the first option gets me way more excited. Even though there is a promise of an always available internet connection, the reality proves that internet has varying degrees of connectivity. While you might be ok in big cities, everybody knows a great deal of places that continue to have spotty or no service at all.
While many internet-based startups blissfully ignore this fact when building their service, this is a reality where web apps don’t have a good answer for. Native apps can detect what level of connectivity exists and dynamically modify their behavior. Like being able to fully play a game on an airplane and upload your achievements later when you are back online. Web apps try to solve the connection problem in two ways: by keeping session state on the server and identifying your session by cookie or URL. Or by the new HTML offline features. This might be a solution for some light-weight scenarios, but I don’t lots of iPhone users installing HTML web apps on their springboards. It just feels weird to me.
But I may be surprised if somebody comes up with some new and innovative use for all the new web technologies. But so far I have not seen a single web app that I would prefer over a native app on my Mac or iPhone. I have the distinct feeling that too much brainpower is used on web platforms to work around inherent limitations. The same brainpower is put to better use on an established native platform which gives you GPU-accelerated UI paradigms, multi-touch handling and other hardware features neatly packaged in APIs that – for the most part – are a pleasure to work with.
There one other trap in treating this as a either/or question. The mobile market as a wholes is growing exponentially. So it does not mean that moving from the native to the web or vice versa takes something away from either platform. For each such decision there are dozens of competitors only to willing to step into the supposed hole you left. So on the grand scale it does not matter what you as a single person decide to go into. If you don’t become the next shooting star iOS developer, then somebody else will.
To summarize I would say, you should go for the platform or role that inspires you the most. For me it is Apple, native and cool uses of the hardware.
Categories: Q&A
Good post. And especially I could have signed all the first part 🙂