The turbo-charged way to becoming a mobile developer

So You Wanna be a Mobile Developer huh?

Who can blame you, it's an insanely fast evolving and opportunity rich market with tons of different career paths You can become a fully solo independant app developer by developing your idea and selling it to the masses. Or you could work as a freelance app developer helping others to bring their ideas to life. Perhaps you value complete financial stability and would prefer to work as an inhouse mobile developer. Well all these things are possible and I'll try to direct you in the right way. Wheather you are a complete novice to the world of programming or an experienced developer in another field already.

The First Step is the Most Important One

No matter what you do, the hard truth is reading is your friend. Yes books, articles, tutorials, flat out documentation, there is no escaping the fact that our job as developers is one where reading is of key importance. There is no way around it, I know this won't make me hugely popular but here are a few books you should look into. Take note that you by no means have to but it will speed up your learning path substantially.

You do not have to read all of these books, heck you don't have to read any. But I would recommend at least checking them out and seeing if you'd like any of them.

Your options

Lucky for you in 2019 we've got more options and choice in our tooling than ever before. You can take the easy way, the hard way, the medium way, the super easy way, the super hard way ... you get the idea. Anyhow the first question you should ask yourself is:

What kind of an app am I building and what exactly would my requirements for it be.

This means if you are building a simple read only app, you might not need the full power and extra development time of native. Similarly if you are building an extensive IO app, where you expect the user to interact with your application or with even with other users, most of the time you'll need that extra bit of performance and stability that comes with native applications.

Native vs Non Native

Before we continue we need to familiarize you with the concept of native applications and non native applications.

A native application is an application that uses the UI elements that the phone operating system itself provides and builds on top of that. This may cost more development time and might be harder than some alternatives but it comes with an added performance increase and stability.

Non native applications are the type of apps that do not require or use native UI elements provided by the phone's operating system. But instead provide their own. Usually these types of apps run inside of a stripped down web browser instance. This means that most web developers out there who know CSS, HTML and Javascript could build a non native application fast. But would have to sacrifice stability and most of all performance for it.

and then we have "the new native". This type of approach to mobile application development is getting the most popularity at the moment. Due to striking a good balance between ease and speed of development, performance and stability. Basically you can these days write fully native apps in non native languages. This means you do not have to use Java on Android, or Swift on iPhone and C# on Windows phones. But can instead in most cases target all 3 platforms with the same language and sometimes even same codebase.

Xamarin

We're gonna start right off the bat with one of these, my favorite framework Xamarin. Originally started out as Ximian their target was to bring .NET to linux in the form of mono. Later they moved onto building a framework that would take your C# code and translate it into java and objective-c respectively for each platform. This allowed developers to write fully native Android and iPhone applications with C#. A few years after Xamarin was purchased by Microsoft who made the previously payed framework free for the masses and it's been gaining in popularity ever since.

The current state of Xamarin in 2019 is that it's an official Microsoft product with which you can create cross platform native applications with the use of C#. Meaning you can write anything from Android, iPhone to windows apps all in the same codebase, optimally sharing as much of the code as possible.

React Native

If you're more of a Javascript developer than React Native might be more your style. The cool new kid on the block it boasts ease of development, speed of development resulting in fully native Applications writte in a familiar to many web developers javascript language and react framework. A key difference to take note of is that React native does NOT allow HTML and CSS elements. It does however have it's own DOM and Style that are similiar to html and css.

What I like the most about it is that you can debug directly on the device without having to hook it up to your computer or any of that stuff. Using Expo you can simply scan the QR code and have the entire thing build on your device effortlesly.

PWA's or Progressive Web Applications

Maybe native is not your style and you are looking for creating a simple app but only did web development work so far. Well progressive web apps are the best way to utilize your web skills and create an app that looks great and allows for a surprising amount of interactivity with the user, without sacrificing too much performance. It is

however important to keep in mind that PWA's are not native by any means, they are simply websites or webapps built and configured in a way that lets's Android and iPhone run and use them as applications. With this come a few limitations such as not being able to use and implement all the features that fully native applications might offer. While a lot of features have made it into PWA's such as push notifications there's still a lot of hardware features that as of 2019 have not and most likely will not due to security concerns.

Another downside of PWA's is that they naturally can not reach the same performance that their native counter parts can.

But they are a completely viable and sometimes even optimal solution to when you wanna develop mobile applications for your userbase without spending too much time developing or re-learning concepts. So if you have a fully interactive website or webapp that already runs in a browser you can turn it into a PWA today.

Fully Native

This is amongst the hardest and most time consuming options out there. Actually using native code and native UI elements to create fully native applications. With this you get by far the best performance and stability out of your apps with full official support. The downside however is that if you want to release your application on multiple phones you will have to maintian multiple codebases. Java for android and Swift for iPhone.

it's a worthwhile time investment but non the less you should consider carefully if your app requires a fully native approach. I'd argue that in 2019 you rarely need to relly on this approach especially since the difference in performance between react native, xamarin and fully native is miniscule at best.

Javascript Based Web Apps

These have fallen a bit out of favor due to PWA's pretty much doing everything they do but better. The concept behind them is very simple, you take HTML, CSS and Javascript you create a web application and have it run in a frameless mobile browser window. This of course limits your access to a ton of features on the users device plus hampers your performance and stability by a lot.

This may sound dismissive but I fully believe that in 2019 you're much better of just writing a PWA.

Even more native

The nativest of the native, the prime-native! These are the types of applications that use a very minimal layer of abstraction between the application and the hardware. For Android this would be the Android NDK, for iPhone objective-c. These types of applications allow you to access the hardware resources almost directly at times and really optimize your application for performance. With this power comes great development time, some say you're facing extra weeks of development time, some say months and some years and even decades.

All jokes aside the Android NDK and it's iPhone obj-c counterpart should be used sparingly and only in performance critical operations that you absolutely need to optimize. Usually you'd want to use this type of approach in tangent with the higher level SDK talking to the UI elements while the lower level NDK preforms critical operations.

Games?

Or perhaps you're looking to develop games for the mobile market. Well that's a whole nother article. But to not leave you hanging like this I'll make this nice and short. Most modern game dev engines allow you to release your product onto the mobile market. The most well known amongst them would be Unity 3D and Unreal engine.

There are a lot of differences between the two which I won't currently get into because it would take me too long. But the most basic one of them is Unity 3D allows you to use C# and Javascript while Unreal engine allows C++ and Blueprint.

This means Unreal Engine boasts more performance and less resource usage, thus allowing the developer to create more graphically complex games for the cost of addeded development time. While Unity 3D allows you faster development times with minimal sacrifices to performance that most devs starting out won't ever notice.