This week I got my Android G1 phone in the mail. I already have the iPhone 3G and a Nokia so it was not because I needed another phone; I got it because I had an urge to develop a custom application for the Android! This urge was sparked from looking at the wide variety of applications available for the Android and more importantly; Android promised a nice developer framework in JAVA where an app can take advantage of the multimedia build into a phone like wifi, GPS, camera and more uniquely to the G1 a compass (bringing in semi-augmented reality).
Things are changing: where only a few years ago websites – another form of an application a.k.a. app - were build by nerdy people in nightly hours, the current generation of nerds are at the core of building billion dollar businesses like Google and Microsoft. Nerds rose from unsocial creatures to Hollywood movie heroes (e.g. Harry Potter, Peter Parker). Today you’re cool if you know how to CSS hack your MySpace page. Nearly everybody has a online social network account. It has also become almost normal to talk about internet stuff on social occasions, something you shouldn’t have attempted only 5 years ago.
In my opinion these are signs of a trend that will continue due to a need to gain full control over computers – in specific by programming them – becomes mainstream. With computer devices from laptops to phones everywhere it make sense that an evolution will go from using available applications to creating your own applications adjusted to your specific demands. The basis of this is local and niche problems can bring local and niche solutions. For example I want to instantly share my French homework with my classmates by making picture of it with my camera phone, transform the image-to-text, spell check it online with an API, push it automatically over Bluetooth to my classmates and have them pay 10cents for the homework copy; a strange app that won’t be made by anyone any time soon, but why wouldn’t they create that app themselves? The boundaries that have prevented this from happening are disappearing fast:
- Knowledge: developing applications has been a very specific quality. But with computer devices all around us the ability to create a custom application for these devices makes programming a more common need. Schools started educating on computer usage and have already included basic programming courses (pun intended). And to be honest programming is no rocket science; it’s actually very logical but just like being good in math or not some people might be better in other stuff.
- Costs: with developing came high costs due to the highly trained personal. But quality guides on programming languages are freely available online and the numbers of books on any programming language are in the thousands. Next to that; where previously websites were made in notepad, WYSISYG website editors and SDK’s like Eclipse (free!) provide some very strong frameworks to work with and help novice developers to create whatever they have in mind.
- Publish & Spread: it is possible for anybody to develop a website and have it available online within seconds. There are no boundaries that prevent you from publishing an webapp online. The Apple app store (15.000 apps) and Google Android market (~1000 apps) provide a platform to publish and spread your app to the world. These apps are not made by big companies, but mostly by people who had an idea (bad or good), developed it, and released it for others to use.
- Money: previously it was hard to monetize your own developed app due to the lack of a (popular) platform that handled (micro) payments. For the web Adsense solved this for website developers by providing advertising on any webpage. The last year or so mobile app stores opened the possibilities to monetize on mobile application development. A thousand downloads of your 1$ application is a nice $1000 dollar, or if you want more you could’ve entered this competition that gave away over 10 million (25k to 225k each).
One major hurdle - in specific for mobile development - are the numerous development environments: JAVA, C++, Objective-C, .NET, J2ME. Don’t think you can make an iPhone app without having a Macintosh, and also don’t think a Nokia 6500 can have the same app code as a Nokia N95. The only solution right now is to create your app for every language there is since everybody still has different phones: if you pick ten random people you get ten different phones types with 6 different development environments.
There is so much more to say about development, but for this post I can summarize it to this: In the near future programming knowledge is widely educated, most current boundaries are resolved and only creativity with some excess time will limit people to make great custom apps for the world to use.