It’s been a while since I last looked at developing apps for mobile platforms. Some of you who looked through the technical section of my website are probably familiar by now with the convertor app (which even to my surprise proved very popular!), and probably noticed that haven’t done anything about it in ages. Well recently I decided up have a look again at what’s going on in the mobile apps arena.
My only experience so far has been with the J2ME libraries (mainly due to my Java background but also the fact that when I first started it was the only widely available technology for mobiles – the others relied on proprietary tools and libraries and quite often required falling back on C/C++) so it seemed natural to look again the this but also wanted to explore the likes of iPhone, android, BlackBerry etc.
I am disappointed to find out that despite all the new cool phones and features that came out recently there is still no unified platform for delivering apps across all mobile handsets and pretty much every vendor seeks methods to lock in the developers – and therefore the user. Trying to port an iPhone app to Android proves as possible as porting the Tomcat java source code onto a Sinclair spectrum which only understands a dialect of Basic. I can imagine that trying to port from Android to Symbian is just as bad. For sure, each platform offers its own unique services and facilities – as developers we are used to that from the early days of Unix, when Solaris needed conditional compiling for sections of code, and so did Ultrix, HP-UX, IBM AIX and so on. (In fact if you look at source code for various Linux platforms you will find that even various distros require different coding occasionally, all guarded by the famous
#ifdef.) however, as developers we have experienced various evolutions in terms of IT and computer science – there are lots of languages and platforms that promote platform independence, there are standards in place (in light of the UNIX experience quoted above, I’m sure we all at some point programmed for POSIX, ANSI and so on – saved us lots of time and ensured cross platform compatibility) – and in brief nowadays we don’t have to worry that much about “decorating” our code with the dreadful
#ifdef and end up writing code for every single platform we support in fact. What is the point in writing code in java if you are going to target it to a specific device – and as such use a particular API? I’m not discarding some of the niceties Java offers don’t get me wrong but it seems to me we are back in the old AWT era, which was basic and looked pretty awful from the start so companies who considered writing GUI layers from the start had to consider 3rd party code of writing their own. It wasn’t even the case of re-inventing the wheel, it was a case of in order to find out how does the chicken cross the road the poor chicken has to build the bloody road first! Of course Swing came out later on but by that time most companies were already locked into other toolkits and migrating was a matter of re-enginereing most of the code so a no go.
Getting back to the original subject it seems to me the same principle apply: the J2ME APIs offer very little really so developers have to rely on vendor specific libraries so if you’re gonna go with Motorola then you’ll find the Sony libraries to be different etc. Sure if you’re a Maven fan or whatever else you will have different build profiles per device and link your code with different libraries and ultimately generate different deployment jar for each platform. Maybe I’m being awkward but that does actually mean pushing out there multiple products at each release – cause arguably the Sony app is in fact a different product to the Nokia one! (Look at how much work we put in nowadays for ensuring cross browser compatibility – basically creating quite often different implementations of a function for each browser – which means the product gets tested on each browser, bugs get reported on each browser and in fact the IE version of the app gets treated as a different app from the Firefox version!)This also means from a development perspective ensuring more specific knowledge required by your developers which we know it ultimately means more money spent in recruiting (specific knowledge costs more, in case you didn’t know!). And all of this because Sun (ahem Oracle I mean) has created once more an API that is supposed to make it easy to write code for the mobile platform – and they did it by actually eliminating the mobile platform entirely! As for the vendors, the fuckers will never agree on anything among themselves as making your products close enough to someone elses means only that they will be able to “hijack” your apps, your developers and ultimately your chunk of the market.
Its ridiculous that when you think about it, if you have some web based service that you want to make available to the mobile market you have to think at least a client for iphone, android, blackberry, windows mobile and J2ME! Sure, industry wise this looks good as it allowed for a lot of small mobile development companies to appear – if you want to spread your application onto mobiles you hardly would consider developing the mobile clients in-house but instead would rely on these guys. It saves you the pain, resources and time needed for this, and it enables for the development of a specialised industry. For a certain cost any of your apps can become mobile without you having to acquire any knowledge for it! Isn’t this however a fake industry? I’m not arguing the need for mobile-specialised developers, don’t get me wrong, I think there is a clear need in the market for that – but is it really necessary to have this tie-ins? Isn’t it like saying “I’m specialised in Debian Linux only – I don’t do redhat or CentOS or god forbid solaris!” ? If any Unix / Linux sysadmin said that to me I’d laugh my arse off show him the door and ask him to not call us, we’ll call him 😀 In fact any Unix sysadmin would be very comfortable with Linux distro’s and viceversa – because of the standards these all adhere to. However it seems acceptable to have J2ME developers, whose knowledge won’t cover necessarily the Symbian platform, or RIM. I’m not even gonna mention Apple here (Objective C? What the fuck??). Or google. Or windows mobile. In fact it looks like we are heading to operating system per vendor and this can only mean waste of development time and talent – ultimately developers would spend more time learning how to do the same thing on different platforms rather than doing more of the actual core functionality of your app. Imagine how much more can be created with this wasted time if bloody vendors would see some sense – idiots!