So You Want To Build An App?
April 06, 2020
If we ever have a day where we don’t open some sort of app, we must be physically unable to do so. There are so many different apps out there that serve so many different niches, but no matter how simple they look on the outside, us developers know that there is a lot of work that goes into each app. A lot of that work also depends on how the developer codes this application, and that’s what I’m going to dive into today.
Mobile or Desktop?
When most people hear the word “app” they typically think of mobile apps, but the reality of it is that there are many different types of apps from mobile apps, desktop apps, etc.
So which direction do we choose after we have our amazing app idea? Well, as it may come as no surprise, it will depend on what your idea is and who your audience is.
For example, if I have this great app idea that will help improve the lives of software developers as they code, I probably want to make this a desktop app or maybe even a web app. Why? Simply put, there are not many people who code on their phones.
On the contrary, if you have this amazing app idea that greatly improves the messaging of developer teams (i.e. Slack), then that is a situation where you might want to develop an app for both desktop and mobile. Of course, that’s because people want to be able to contact their team both on the go and while they are sitting at their laptop.
How do I start coding?
This is where things get a bit more interesting. Not only that, but it is also crucial that you get this right.
When I first started to develop apps, I did what probably software developers do: Googled it. I typed in something along the lines of “how to code an app for iPhone.” While there may not appear to be anything wrong with my Google Search, it can lead a novice developer down a narrow path.
When it comes to developing mobile or desktop apps, you more or less have two directions to go: native or framework. When I write native I mean developing for a single operating system using said operating system’s programming language in doing so. When I state framework, I mean using abstracted out functionality using a specified programming language.
This is why the Google search I mentioned above could be misleading to a novice developer. The search limits myself to native development because I specify “iPhone.” So rather than discovering a framework like React Native (more on this later), I will likely find resources for Apple’s programming language for iPhones: Swift.
Native Development
When it comes to native development, you have your advantages. For one, you have much more control over your application. The reason for this is because you are working directly with the components/widgets in native development while a framework provides a level of abstraction.
Let’s dive into a few of these programming languages.
Swift
If you want to develop an iOS or macOS application, Swift (or its predecessor, objective-c) is likely the first language you will come across. This is a language that Apple developed, and many developers like it.
Swift is not super old, but it’s also not brand new. You can feel confident that there will be support whenever you need to debug some code. There is one catch to this: If you want to develop a native iOS or macOS app, you need a mac.
Kotlin
What if you want to develop a native android app? Then you would likely use Kotlin (or its predecessor java). Many people still use java, but it seems that Kotlin is the future.
Remember how you felt when you first went from a Cish language like java and switched to python? Everything is more simple, and it requires significantly less code. Well, that’s what it’s like with Kotlin. They made things simple.
Developing with a Framework
As you read the above sections, you might have thought to yourself: “wait so I need to develop two separate applications if I want my app to be on android and iOS?” With native development, this is sadly the truth. However, that’s where a framework comes into play.
Though we lose the advantage of more intricate control over our applications, a framework allows us to manage only one code repository for our app instead of two.
Let’s dive into the different frameworks.
React Native
React Native was developed by Facebook, and for those of you who are familiar with ReactJS, it is quite similar. I think a big advantage of react native is the small learning curve, especially if you already know ReactJS.
That being said, I have found that this framework can be a bit buggy at times. In turn, it can sometimes require more work to do something that could have been quite simple in swift or Kotlin. However, I believe that is the exception and not the norm.
Additionally, this framework is for mobile development only.
Flutter
Flutter is a newer framework from Google for mobile app development. This is a pretty interesting framework that is, in my experience, less buggy than React Native; however, it is also tougher to learn.
Though it might be tougher to learn initially, it is a powerful tool nonetheless. In my experience, once you learn it and become comfortable with it, you can throw together a pretty good-looking application quickly.
Electron
Electron is an interesting framework developed by Github. For those of you who know of the text editor Atom, it was the project that led Github to create this framework. They wanted to develop a desktop app for Windows, macOS, and Linux, and out of this came Electron.
This desktop app framework has a lot of flexibility in that you can use other frameworks like Angular and ReactJS paired with it. All in all, when you develop with this framework, you might find that it is quite similar to developing a web app.
Native or Framework
As you might have implied through my writing above, I am biased toward an app framework. The simplicity of a framework, and managing one code repository as opposed to two is hard to beat.
However, I believe the reason I am biased toward this because I usually work on my projects either alone or with one or two other people. If I were developing an app on a larger team, native development might be the way to go due to the greater control the developer gets over the app.
So what do I recommend for building mobile and desktop apps?
For mobile, I believe that Flutter is the way to go. I find that it is very powerful and it is not as finicky as React Native.
For desktop, I believe it depends on what you are attempting to accomplish. Sometimes there are gaps in one of the operating systems. For example, git is a hassle on Windows’ command prompt. That’s why creating an app like Git Bash works perfect to develop natively for Windows.
However, if you want to do something like creating an IDE or text editor (i.e. Atom), then it makes more sense to develop it on a framework like Electron.
I hope you all find this information useful. It would have saved me a lot of time and hassle when I first started developing mobile apps.