Introduction to app development

There is an app for that

The question that I’m asked more than any other with regard to being a programmer is “Hey bro, I want to learn to make apps, where do I begin?” or some variation of that. As soon as anyone starts to learn programming in a language, or wishes to begin, the first thing that probably comes up is how can I use the programming skills that I am gaining/will gain to create an app that I can show people. And the problem with this question is that it is too vague. It has been quite a few years, almost 10, since apple announced the first iPhone and brought along with it the concept of “apps”, applications that can be deployed over an “app store” that works on an operating system. Before the whole app revolution, anything that ran on an operating system was commonly reffered to as software, or an application. And it wasn’t as glamarous as app development.

With the crazy success of smartphones and their operating systems like Android and iOS, an app you develop is in the hands of billions of people worldwide who had smartphones and an internet connection with the click of a button. Monetizing these apps also became really easy with app stores that let you set a price for your app, or using in-app purchases or with advertisements that you could include in your app with just a few lines of code. This meant that becoming an “app developer” was actually a viable occupation and could provide you with a steady source of income. With so many new programmers joining into the growing pool of app developers, apps have grown from small applications that did a task well like a calculator or a weather app, into incredible complex pieces of software that do everything from calling you a taxi, to keeping you in touch with your friends to calling your family half the world away to even monitoring your health and helping find a cure for cancer. This meant that the whole app ecosystem also spurred on the need for other related businesses like server backends, data storage solutions and IDE’s to actually code the app.

This is apple’s ad for iPhone, where their large collection of apps is their main selling point

So getting back to the topic of how to make an app, at this point, there is a lot of decisions that you will need to make:

  • What kind of an app am I building? Will it be a game? Or a tool that helps people do their work more efficiently? Or will it be a communication platform for people?
  • On what platform am I gonna distribute it? Will it be for the web? Or will it be for mobile? If it is for mobile, which platform, android, iOS or windows phone? Will it be cross-platform?
  • What langauges am I good at and what languages will I need to learn?
  • Do I have the hardware and software necessary to program for the platforms I am trying to build for?

After you have the answers to the above questions, you will have a good base to begin actual work on the app. Now, all apps are not built the same way, and each category has a slightly different workflow. Let me go through a few of them.

I started programming by learning HTML, CSS and javascript. These languages are the building blocks of the modern web and are very good “gateway languages” to someone who is starting programming. This is because all these languages have a very low barrier to entry, are very forgiving to common mistakes that beginner programmers make and they are some of the most popular programming languages, so help is everywhere on the internet. Websites like stack overflow are filled with information about these languages and a problem you face has probably been solved by the really helpful community over at stack overflow, all you need to know is how to look.

Now no one in their conventional wisdom would consider any of these languages to be languages you would use for app development, but you would be surprised. Web app, or apps that run in your browser are written with just these languages, even a backend service can now be written in javascript with the help of Node.js. These apps can either be hosted on your server (like or or packaged and deployed using the Chrome web app store that lets users using the chrome browser use the app even when offline or for users of chrome books (I hear you snicker, but chromebooks just outsold macbooks and are growing pretty fast thanks to their extremely low price points) as their only source of apps. You can also use services like phonegap/Xamarin/Titanium mobile to distribute web based apps on mobile. This would definitely not work for all kinds of apps, as the performance of web apps are severely limited and so are their native functionality like proper access to the fingerprint reader, bluetooth and to other networking functionality. Here’s a little list of things you might need to get started here:

  • A good text editor:

A lot of people might be comfortable with just VIM or emacs on their terminal, or even notepad. But a lot of other text editors bring a lot to the table like code highlighting, code suggestions, auto-completions, brace completion and so on. A few really good ones that I would recommend are Notepad++, Adobe Brackets, Sublime and Github Atom. In the end, the choice of text editor is entirely upto you and you should choose the one youre most comfortable with.

This in an invaluable tool when it comes to downloading packages and their dependencies, will really help you when downloading tools and libraries for your projects.

  • Chrome Developer license:

This is a one time $5 payment that lets you distribute your web apps on the Chrome App Store.

  • A backend for your data and hosting your website:

This will let you put up your website for the world to see and will also have tools like analytics and storage and a database for your app to store data. I highly recommend Firebase that has a very generous free tier for pretty much everything you would need as a beginner. You could also use Amazon web services, Heroku or the Google Cloud Pltaform for this purpose.

  • A github account and a working knowledge of git:

Version control is a very important skill that you must learn and master, especially in a multi-person environment where you have a bunch of programmers working on the same project at once.

  • An attitude to keep learning:

This is probably the most important thing in the list, cause once you start with web, you will have to learn a lot really fast to keep going. The web is a rapidly expanding place and you have to stay on top of all the new devleopments to stay relevant.

Then you go on to native apps for the different platforms. The problem with native apps is that each platform has its own languages and set of tools that you must learn to use before you can get started. Unline web programming that only requires a text editor and a terminal to get started, native programming would require you to learn the language and framework attached to the platform, download and setup the Integrated Development Environment (IDE) and the Software Development Kit (SDK). This is varied across different platforms so it is hard to jump around a few of them. This means that you would need a small team if you want to get your app out on multiple platforms. Let me take you through a couple platforms you might consider building apps:

Both use the same XCode IDE and the Swift/Objective-C programming language to build apps. They also use very similar frameworks called Cocoa and Cocoa touch so switching from one to the other is a breeze. But the only problem is that XCode can only be installed on a mac, so you would need a Mac to begin programming for either platform. Also, Mac and iOS developers have to shell out a $100 every year to distribute their app and to keep it in the marketplace.

Android gives you a choice of Eclipse or Android Studio to make their apps and Android Studio would be the better of the two because it is much more updated and streamlined and in active development at the time of writing. You will also have to learn the Java Programming language and XML to create the UI.

You would need to download the Visual Studio IDE and get started with the Windows Developer Program. This is free if you’re a student and you have been able to enlist for Microsoft DreamSpark. Microsft thankfully give you a couple of languages you can use to make Windows Phone apps, mainly C# and javscript. You would also need knowledge of XML for UI.

Now I though I would also put in a section to all you aspiring game developers out there. If you’re building a game, you would be better off finding a game engine that would help you design your game regardless of the platform, be it PC, mobile, web, PlayStation, Xbox or VR. Two of the best 3D game engines would be Unreal Engine 4(UE 4) and Unity 5, both of which are free to try out. And for 2D, Cocos 2D is the industry leader and you could also use SpriteKit and SceneKit if youre only going to build for Apple products (Mac, iOS and Apple TV).

Enjoy building your first app!