why are we learning swift, objective-c, Java, Kitura, iOS, Android pushed by both Apple and Google and after that, all native devs havenāt any advantage over the cross devs in stores, after all, why are we learned all these technologies if any apps do it by any other technology like Xamarin is same in stores
what about our future as native developers? we are under pressure by all this talking about the cross.
Hi youssef,
This is a question that will have many answers as each individual will have an opinion on this topic. The views below are from my perspective which could vary or differ with other developers.
Firstly, if there is a single language or technology that works across all platforms and frameworks, then the debate of multiple languages could be valid. There is C and C++ which are in a sense cross platform, but they are not cross framework, they need libraries etc to adapt for each platform. This is the reason that are multiple languages as each vendor has their own preferred language for their own framework. There is no uniform framework.
From a gaming perspective, there is OpenGL that works across but then Apple has Metal, Microsoft has XNA, and so on.
Then we have languages like Swift, Objective-C, Java, Kotlin, Ruby, Lua, JavaScript, etc look at the number of javascript frameworks.
Personally I feel that native development is the best, I have been an advocate for cross platform (single framework) type packages including Corona, Gideros, Moai (all Lua based) in the past. However, native development with Swift is my preferred methodology as of now. Which also means that I am not a fan of React or RX which is a personal favorite of many developers and startups.
There is no right or wrong answer in my opinion, it is ultimately all dependent on your requirements and if that framework can help you achieve what you are after.
Hope my 2 cents worth are helpful, all are invited to chime in with their opinions.
cheers,
Jayant
@youssef Thanks very much for your question!
I come across this question a lot, and I will convey my thoughts here to hopefully address your legitimate concerns:
-
Native developers DO have an advantage over hybrid developers. WITHOUT DOUBT! Why do I say this? I say this because no technology from a third party company will ever be able to harness the full power of the hardware produced by a company like Apple, or Google, and definitely not be able to provide the same features that their software provides. They canāt because they are not privy to that knowledge until AFTER the latest SDKās are released to the general public. This is a fact.
-
The reason why hybrid technologies exist, and are utilized by some companies is honestly for two reasons: a. to avoid hiring two teams of developers to build two separate apps for two separate platforms b. to quickly get their product out to the general public.
I will let you in on a little secret here: many companies who use the hybrid approach end up having to make a full U-Turn and end up having to rebuild their app in the native language (either Swift or Java). I know this first hand from many testimonials. The problem is, the people making these decisions to go with hybrid technologies are NOT technology people, but business people. On paper, it would make sense to go with a hybrid technology. The reality is something different.
-
The resources to learn, and to get help in the native technology for a particular platform is FAR more than those offered in hybrid technologies. This is extremely important as a developer. If you go online and take a look at the number of books, videos, courses, tutorials that are available to learn mobile development in the native technology, youāll find PLENTY. If you do a similar search for a hybrid technology, nowhere near as much. So you actually hurt your product, and your career by limiting yourself by using a hybrid technology.
-
As an extension of #3, more companies do their development in native technologies, which means that by focusing on learning native technologies, you actually improve your chances of marketing yourself, and building your career by making yourself potentially available to more companies than learning hybrid technologies that are available to only a few.
In closing, I will say that your future as a developer in a native technology looks bright. Very bright. As an example, you cannot take a piece of work like Shakespeareās āHamletā, translate it into French, and still expect it to be the same masterpiece as the original. Itās not possible.
Technology moves very quickly so itās hard enough for us developers to keep up, let alone third party companies who make hybrid technologies BASED on the native technology!
I hope this helps!
All the best!
I totally agree! Xamarin only exists because C# developer seems not to comprehend they have been lured into an old fashioned language. Swift and even Kotlin are light years ahead. Take enums as an example!
Also I think it is healthy to learn more than one language to be able to evaluate which is best for what!
Further using native always gives you the best options available on the platform!
Iāve tried Xamarin, and I remain an advocate for native development (though, I hope abstract classes make their way into Swift one day, they were useful).
My concerns are simple: as a native developer, I know that if thereās a problem with my iOS app, itās either in my code or itās in Appleās. If I use Xamarin then Iāve added a new potential source of problems.
Furthermore, if Apple introduce anything new to iOS (as they do annually), then you have to wait until Xamarin figure out what their ānative C# approachā is and implement it before you can use it in your apps - which means you could be weeks or months behind the latest tech.
This is all before the fuss of running Xcode alongside Xamarin Studio, keeping xib/storyboard files in sync, running apps, submittingā¦ you need to know some of the native tools for each platform anyway. Iām not convinced the compromises you make in Xamarin to get a native behaviour out of each platform are less work than doing it natively in the first place.
Hi youssef,
I must admit that your are right about native developers being under pressure. But most types of apps only require a web service and some nice GUI screens. These requirements can be achieved by using cross platform frameworks (my favorite: MultiOS-Engine).
But if you have special requirements (hardware access, newest OS/device features, ā¦) native development is the way to go. Therefore as a native developer you have to stay on the bleeding edge of your favorite technology stack (get a new device as soon as possible, learn framework updates, learn new concepts, ā¦). But this is expensive and can be stressful if you have āto deliverā while you are learning.
I nearly convinced my boss returning to native development ! Problem solving can be far more expensive in cross platform development if the solution for one platform generates problems for one of the othersā¦ I think you can find more supportive resources for one native platform than on one framework which must integrate in many platforms.
I think you should place your question in other forums (Android, Xamarin, RX, MultiOS-Engine,ā¦) too, collect the answers and write a blog post about it.
cu
Niels
Iāve been working on a purely native iOS app all year. Iām the iOS team. Another developer is the Android team. We are basically building the same product twice. That bothers me. We did extensively evaluate Cordova-based hybrid frameworks, and a couple others less extensively. For us, the developer experience and end-result was very inadequate. So we rejected the notion of a cross-platform codebase for our app. Our apps work fine - great UX (and, DX, well I personally think XCode and native iOS needs a ton of improvement).
It still bothers me that we have to invest so much time & effort to support the two platforms with 2 separate codebases on an otherwise identical Android/iOS app. So I started looking at React Native. Iād always dismissed it as I assumed it was basically the React worldās answer to Ionic. Quite wrong - React Native apps are truly native. Iām very impressed with React Native so far, and am working on building parts of our app with it as a demo.
Maybe we will adopt React Native, as many other teams with some very popular apps have done. Even then, it is essential to have 1-2 developers skilled in the particular platforms youāre targeting.
I recommend you donāt view it as āusā vs āthemā. Be open to other ways of solving problems, add more tools to your belt, etcā¦ look into react native a bit.
As much as I prefer native development (compile-time type checking is awesome), Iām going to say something that might make native devs feel somewhat uncomfortable. The business world doesnāt care about technology. They care about results. If a cross-platform technology can get them most of the way, great! If it helps them rapidly iterate on an idea, great! If it helps them reduce costs, great!
As developers, we shouldnāt care what kind of code our customers want us to write. If they need react native, then go learn react native. Specialization is overrated. If youāve got a lot of practice programming, youāll be able to pick up new things quickly. The hard part is selling the client on it.
Lately, Iāve pitched ālearner projectsā at a somewhat lower rate, and guess what, clients have taken me up on it. If you already have some basis of trust, and you have demonstrated competence in some other technology, people will help you out. Usually, you will find that you can learn the new thing in a few weeks tops.
Just put your head down and use whatās needed. Software itself is a specialization. The sub-specializations within it are mostly trivial.
Hi @tedbendixson,
There is nothing shocking anymore and more so since you are right. Businesses these days do not care about quality and the entire new economy is based on āI want it ALL and I want it NOWā so there are many short cuts and what nots.
Having said that, it just means that I still prefer a printed book to read, I love my furniture made of solid Timber/Teak and my code native, but that just means it is my preference. Programming or writing code is about the total experience, solving a problem, abstracting the problem and the solution, writing the solution and implementation. In a similar paradigm, I love lego blocks to build my own, I am not a fan of pre-moulded pieces.
If you are happy and can get away with ālearner projectsā then good for you, because it keeps you happy and going. But if everyone stopped solving problems then you would not get newer easier pre-written or self-writing code IDEs.
Cheers,
Jayant