This is something I have been thinking for a while so here it goes. This is a list of platforms I know of and my choice of what makes sense for a hobbyist programmer like me. Let me first list down all the possible platforms and then list down the pros and cons that I feel are associated with each platform.
- Java ME (The platform formally known as J2ME)
- Windows Mobile
Let me start with iPhone the darling of the media and blogger's till about a fortnight. I had real expectations from iPhone as a platform but the way its been going so far I would never bother developing for it. Officially there is no SDK with which one can build applications. What ever tools the community had built have been rendered useless with the iPhone 1.1.1 software upgrade. The community might be able to hack a version for 1.1.1 but without any support from almighty apple its just a cat and mouse game. With every minor release the applications will break which makes little or no sense in developing for this platform.
The only official way of developing on this platform is if one makes widgets. But widgets can only do so much without support from the underlying platform.
Next comes the blackberry, I have no idea about this as a programming platform so cannot say much about the SDK support. But here is what Josh had to to add about it. Everything is pure, normal java. The APIs are clean, well documented, and capable. The free development IDE is good enough, and they give you command-line tools so you can use another IDE if you want.
The free simulators make it exceptionally quick and easy to test stuff out without needing a phone at all. You can also test things that would be hard to test on an actual phone in real life, like runing out of memory, or going into an area with different cell coverage.
To distribute your app, you do need a blackberry assigned key. This is actually a good thing because it helps keep viruses and malware mods of existing apps away. The last time I bought a key, it cost $100 and they got it back to me in less than 24 hours.
Blackberry also makes deployment easy. People can install the app straight from a webpage on the device, or use the PC-based syncing program to download it.
Overall, for me there is not much that could be better.
Brew as a platform is great but its not a platform for a hobbyist programmer. The tools are supposed to be good. I have never directly worked on a brew project so cannot say much about it. As far as
I know there are no free SDK's (it is free) which a hobbyist programmer can use to start programming for the Brew platform. All of them are paid and to top it all you cannot directly test your application on a real device till its certified by Qualcomm, all in all its not easy to get your program onto the device. Even if somehow you test you application there is no easy way to deploy it. Only your service provider (mobile company) can deploy the applications for you. Brew works in favor of the mobile companies as they can completely control what goes on your phone.
I got this mail from Ryan Mahoney at Alltel Wireless and this is what he had to add to what I had written about Brew as a platform. Once a developer has become registered with Qualcomm (the $400), the developer can test their applications directly on a device, without having to go through a carrier. Qualcomm gives registered developers the ability to generate test signatures, as well as a cable-loading tool. Now when it's time to deploy to others, yes, then the developer must go through the carrier(s).
Personally I liked the platform for development but I don't see any new products with the Palm OS. When Palm comes out with their new OS which is based on Linux things might change but till then I don't see any reason to develop for the palm. The best part about developing for the palm has to be the SDK's and it was almost like programming for windows. If you compile your program once you can directly run it on the device without bothering about signing and going though a 100 loops to see the final result.
I like the platform and I am eagerly waiting for the Linux based Palm OS. But till then I am not sure why one would bother developing for the palm, unless you have one.
When I bought my latest phone I made sure it was a Symbian 'cause I had heard so much about the support and the great development tools available. SDK's are available for the platform but if you plan to program for S60 3rd Edition, the whole experience is nothing short of a nightmare. Its almost impossible to test the application without signing it. If you want some good applications on your phone you have to sign them yourself as the signing process is a nightmare. If you plan to develop a shareware application then get ready to dole out cash for getting your application signed.
The whole experience is not very pleasant. They had to do it because of the "virus" problems on the earlier editions but this is just plain silly. Somehow the only sane way to develop for Symbian 3rd edition is using Java ME or python. Developing native applications is only for people who plan to develop free applications or for big organizations, getting a certificate for a free application can take weeks if not months. Its no longer seems like a platform for hobbyist programmers.
I've always had a love hate relationship with Linux. I love it 'cause its a great platform for learning but I hate the licensing. I like the BSD license any day but that is something personal. I had bought the Motorola A780 thinking that I would be able to tinker with Linux and develop some really cool things for this platform. The whole thing came crashing down as soon as I tried looking for tools to develop a native application. I realized that there was no SDK from Motorola to develop native applications, and since the whole community was tiny there were hardly any development frameworks. Motorola has a huge line up of phones including the latest Razr 2 which uses Linux but unfortunately there is no official SDK to develop native applications. The unoffical SDK is available but I am not sure its ready for prime time as yet. There is a ray of light in OpenMoko and the upcoming Palm OS but till then I really don't see any way of developing for Linux. Though Linux seems to be everywhere but without proper tools and SDK's its just one more platform where there is almost no support for the developers.
Java ME (The platform formally known as J2ME)
I've always had great expectations from Java but unfortunately the whole experience of developing applications never seemed right. Though they have some good tools and debugging is also great but the SDK's they seem to offer/highlight is beyond me. The libraries they provide are a few generations ahead of what is available in the market. I don't know of any device which has the Java ME libraries they seem to highlight on their site. Guess they want people to develop for the future but what about the present. As of today the they offer/highlight Sun Java Wireless Toolkit 2.5.1 for CLDC for download. But I have no idea about any device which offers support for it, I like the fact that I can use swing in Java ME applications but where am I supposed to test it. Unless they want a programmer to develop for a hypothetical platform which exists only as an emulator. They should offer/highlight Mobile Information Device Profile (MIDP) v2.0 which makes a lot more sense. It is also there on the download page but with half a dozen versions to download it can be really confusing for someone new.
But overall if you know your way out you can create an application in no time at all. Plus deployment is also easy. Overall its a great platform. But they really need to make things easier for an average developer. If they get the hobbyist crowd to start developing and make it fun for them to develop it can really work out. There are many good hobbyist Java ME programmers who are developing some good games and applications but if they market it right they can get many many more people interested in developing applications for this platform.
I never thought that Windows Mobile would take the pie, but for a hobbyist programmer they offer the best SDK's and you can make applications without worrying about certificates while testing and debugging. With a windows mobile one really feels in control, if you want to screw up your mobile device its really upto you. One rarely feels tied down the API's are clean and functional. Getting your first demo program onto the device takes a few seconds. It just makes sense to develop for windows mobile. There is almost no need to get your applications signed, at least for testing. You can develop you .net application on your desktop and if you use the compact framework you can run the same application on almost any windows mobile device. The application will look and feel native on most windows mobile. I was able to run the same EXE on my desktop and mobile phone. And that is something really cool, you can test the application on the desktop not just an emulator or simulator. I am sure not too many people would have seen it. But as a hobbyist I would like to program for a windows mobile device any day. Its really fun to develop and see your application running in no time.
For an average "John Doe" who just wants to dabble with programming there is no better platform than windows mobile. If nothing else it gives a chance for a programmer to develop for the mobile. There are many applications where its just about getting the information across to the user, and for those things windows mobile shines. You can use web services in you applications and it's pure bliss. Just the fact that you get to see your concept ready in no time is one pleasant experience.
The final verdict
As of today I would put my money on windows mobile. With the best development tools and ease of debugging no other platform can come close to it. But in terms of numbers Java ME takes the cake. So as of today if I wanted numbers I would develop my next hypothetical "killer application" in Java ME. But if I wanted to develop just for the joy of programming, I would prefer windows mobile. The conceptual part of the program can be developed/deployed in less than a few hours on windows mobile and no other platform can beat that. On most platforms most of the time would be wasted in getting the certificates and other stupid things which make no sense while developing and testing the application. And we better not talk about debugging which is a nightmare on most devices. This is just my personal opinion of whatever little I know.
If you were planning to develop you next killer mobile application which platform would you choose?