Apps are cool, right?

We've all seen the commercials. An armless hand holds a shiny touchscreen mobile device up against an empty background while another hand's fingers quickly navigate rows of tiny application icons until finding just the right one. There are mobile applications (or "apps" as they're called on the street) for booking a flight, checking your bank balance, watching streaming movies, tracking jogging routes, identifying songs playing on the radio, analyzing glucose levels and pretty much anything else you could ever dream of doing from a device the size of your hand that's a million times more powerful and a thousand times cheaper than the first mainframe computers. Where did all these apps come from? How long did it take to make them? How many people were involved? Are they really made with leprechaun magic and unicorn spit? If these questions and others about the process of creating mobile apps have ever crossed your mind, let's see if by the end of this blog post we can answer some of them.  We'll talk about the different app platforms, the languages they're written in, the benefits/drawbacks of certain platforms, ways non-programmers can get apps built, different creation methodologies and much more all the while maintaining as non-technical a tone as possible. We'll also view the process from the perspective of the everyday person on the street who doesn't have to worry about project kick-off meetings, software design specification templates, validation or any of the other formalities we wish we could avoid in the working world.

(Side note: My intention for this post is not for it to be a precise how-to DIY guide for app creation, but to simply shed light on the creation process as a whole so that the next time you see one of those commercials of a hand tapping away on a screen, you can have at worst a vague idea of how the app that hand is manipulating got there. However, if you're interested in game creation, I will not being covering this. Most game apps (think Angry Birds, Scrabble, etc.) require advanced animation techniques beyond the scope of what we're trying to accomplish here. 

First off, let's be clear: I'm an iOS programmer, meaning I create apps for Apple's iPhone and iPad. While I don't hold any animosity towards other mobile platforms like Android, Windows Mobile, Blackberry, etc., I program Apple stuff because an Apple device is what I had when I decided to learn how to create apps originally (read: I'm an Apple fanboy and everything else is inferior to anything Apple does simply because it's not from Apple and you'll change my mind when you pry my iPhone from my cold, dead hand.). That being said, I do have a teeny bit of knowledge about some of the other platforms and will sprinkle that in where I can while trying to remain as device agnostic as possible because this is supposed to be a non-technical post, right? Right. Well, as that great 21st-century American lyricist Fergie once said, "let's get it started."

What is an App?
You may think you know exactly what an app is but just to be on the safe side, let's define a little more clearly what we'll be considering "apps" in this article. There are essentially three different approaches to creating an app-like experience on a mobile device: web sites optimized for mobile devices, web apps and native apps. All three of these app types run on what are called "smart devices" (I call them "smart devices" instead of "smart phones" now that we have tablets like the iPad and BB Playbook).  Smart devices are called such because they have much more computing power and connectivity than regular, less feature-rich devices. Usually, if it has a web browser or GPS enabled, it's considered "smart." Zach Morris would be proud.

Our first type of app, web sites optimized for mobile devices, are just that--web sites. For the most part, they're no different than visiting the regular web site on your laptop other than they've had formatting added to them to make them fit the mobile device's screen better.  You visit the web site from your device's web browser, the web site detects you're viewing it from a mobile device and then it renders itself to fit your device's screen. An example of this would be visiting Facebook's website from your phone ( Facebook chooses to display only the most important information (say, the news feed) on the mobile version of its site as mobile screen real estate is at a premium. All things being equal, web sites optimized for mobile devices are usually the quickest to develop of the three app types though they're also the least responsive to user input.

Next, we have web apps. Web apps are essentially the same as web sites optimized for mobile devices but we'll group them separately as most sites that are considered "web apps" utilize internet technologies that haven't been made completely standard across the web's spectrum yet.

Think of web apps as super-advanced web sites that can have access to some of the mobile device's hardware functions (e.g. camera, GPS, etc.). Web apps are often built using a combination of javascript, cascading style sheets and the emerging HTML5 technology. All things being equal again, web apps would usually be the second fastest to develop of the app types and the second most responsive to user input.

Finally, we come to native apps. When you think of a native app, think of the apps you might download directly from the iTunes app store or the Android app store. They run completely within the mobile device's operating system often times not even requiring an internet connection to function like mobile web sites and web apps do (HTML5's offline capability notwithstanding). Because they run entirely within a device's OS, native apps which are built well, are sure to provide the greatest user experience as they are more responsive and intuitive. This is because user actions are processed by the operating system right there on the device as opposed to the user action having to be transmitted via the internet to a server to be processed and a subsequent command sent back to the web site/web app to tell it what to do next.  Native apps also have access to much more of the device's hardware and operating system capabilities allowing them to be more flexible, powerful and creative in functionality. However, there is a price to pay for the added user experience, responsiveness and customization ability; native apps are much, much more labor-intensive to produce and manage than their web counterparts.

My subsequent writings regarding app development will be based on native apps, as those are the ones that require the most development and deployment effort.