In the mobile world, programming for an smartphone is divided in native or non-native (i.e. hybrid). But … what is it?
Each OS manufacturer (i.e. Google’s Android & Apple’s iOS) develops their platform to be programmed in a certain way with a certain language using a defined set of instructions, known as APIs (application programming interface). For Android that language is Java, for iOS is Objective-C and Swift. As with the web case, only people who know how to program in these languages are able to understand and develop for these mobile platforms. Java is quite a popular language, Android is very flexible on how to program it. This means the pool of developers for Android is fairly large.
iOS is strict on only allowing Apple’s APIs to program it, and Objective-C isn’t that simple to understand (thus Swift was born). These challenges make developing for iOS tougher, as it demands an specific knowledge, which -in turn- allow developers to charge more for their time, due to the fact they’re in hot demand.
The same as with web, a developer needs only to know one or two languages to make a living. For the mobile world is even more narrow, normally a mobile native developer specializes in either iOS or Android. Why? Because they can afford to! There are developers who program for both platforms, but this is an exception rather than the rule.
One big factor in all this is that when Apple and Google introduce new features to their respective OSs, those features are meant to be programmed/exploited by using their native code. More on that, later.
On the web world there is a big resource pool of capable people who doesn’t know neither Java nor Objective-C, because they make their living programming for the Web, which uses other types of languages. So, how can the humanity benefit from this enormous pool of programming knowledge in the web world?
There are many hybrid IDEs: TiTanium, PhoneGap, Meteor (eww!!!), Xamarin, etc, etc. etc. Each one with its advantages and disadvantages. All aiming to provide web developers the opportunity to deploy their work on the mobile world. These platforms work! The devil is in the details.
The previous is really good under an scenario of building an MVP, simple app, or needing to quickly deploy the first version of the app. Also, developing with a certain IDE forces the project to be married with that IDE, in case of changing the IDE, complete redoing of the app on the new IDE is mandatory (i.e. any possible cost savings are lost).
Nothing is set in stone, for certain things is easier to go hybrid, for other, native is the only way.
With all this said, if you can, start from the beginning in native. Yes, it is harder, slower and costlier to do it native. On the long run is better. The app will be easier to update and adapt to new version of the OS. Putting new features on the app will also be easier on native than with hybrid. Yes, all the previous can also be made with hybrid environments, however it is not as straightforward as it is with native.
Best of lucks! 🙂
Image source: Audiovisual.ie