Intelli-J makes Android Easy

On paper Android should have been a good fit for my previous experience in java and C#. I’m quite used to using the Eclipse development environment and, despite some of its more quirky configuration aspects, it has generally proven relatively painless. However, for much of the last couple of years, any involvement in Android has proven to be a bit of a heart-sink moment. Write the code…wait for the emulator…wait for the debugging to commence…wait…wait…wait. 

There is much to like about Android, as a developer, but somehow, compared to the slickness and immediacy of the iPhone emulator and debugging experience in Xcode, and the depth and sophistication of Microsoft’s Visual Studio, Eclipse has been the source of much heartache, cursing and premature ageing. Recently, however, I have moved from Eclipse to Intelli-J (IDEA 12 CE) - a free IDE from JetBrains that can be used for Android. This has revolutionised my Android experience – now I feel  like I can focus on the job at hand, and on the well-thought-out Android Framework – in short, I feel like a developer rather than a software trouble-shooter. Moreover, with sophisticated code-completion and all the other whistles and bells you’d expect from JetBrains, coding productivity shoots up.

Now we have the three major platforms with very pleasant and capable development environments, I am more convinced than ever that the advantages of quick-adoption offered by PhoneGap and other HTML-based cross-over frameworks are more than outweighed by the power of having direct access to the underlying frameworks and better performance. Indeed, my current experience of porting over a complex application framework from iOS to Android suggests to me that whilst code might not be shared directly, the platforms have enough in common to make the translation reasonably painless.

As the mobile development market matures further, we will no doubt continue to see steady advances in the ease and productivity of native code development – something no developer is going to be sorry about.

With XCode 4, Apple Start to Love Their Developers!

As I mentioned on a previous blog, compared with Microsoft’s Visual Studio and the vast array of good quality reference material and samples available, the Apple development experience could easily be found wanting. With the latest version of their Development Environment – XCode, Apple is beginning to show the kind of love that developers, and in particular new developers, need.

For developers from a non-Apple development background, with a lot of experience in Java and .Net, one of the most awkward things about the older version of XCode and Apple’s Objective-C programming language, was the need to basically tell the computer when it should remember or forget things. In other languages, this is usually taken care of automatically, although sometimes you would choose to interfere in order to keep system resource usage down. The upshot was that a whole extra pointless layer of testing was added for something that provided no benefit to the end user.

Now Apple have introduced something called Automatic Reference Counting (ARC), which does the job of working out when to remember and when to forget about things. This does not sound revolutionary, but it has gotten rid of one of the more dangerous and common pitfalls of developing for iOS. Now, instead of worrying about the internals of the platform infrastructure, developers can just focus on giving the end user a great experience.

Having used XCode 4 for a while now, I can say this is probably the biggest single time saver, but Apple have put other things in too – including a helper that will suggest fixes for small problems on the fly. There is also a storyboard that allows developers to layout transitions between views visually. Overall, the improvements make the whole development experience more slick and less painful.

Why does this matter for people who aren’t developers? I think one of the upshots of this is that it makes native app development faster, easier and hence more cost-effective. Despite having spent time going down the PhoneGap route, these new development enhancements have persuaded me, at least, that native iPhone development is now actually faster and more convenient than HTML5 based frameworks. Indeed, even if you want to combine web content with your app, it is still, I would suggest, easier to hybridise properly by going native.

Whilst XCode is still not up to the level of Microsoft’s Visual Studio, it is getting very much better, which can only be to the advantage of developers and end-users alike. I look forward to more of the love in their next release!

Why Google and Apple still have a lot to Learn from Microsoft

The Apple and Google brands dominate the modern digital communications landscape, between them seemingly shaping the future of mobile. Whilst they have shared a breathtaking run of success and growth, the two brands embody very different aspirations.  Despite their success, they still have a lot to learn from Microsoft.

Apple – Supporting Safe Early Adopting through Corporate Paranoia
For the would-be early adopters of technology who want to be sure that their early adoption will be a smooth experience that will signal both a forward-looking attitude, and a personal commitment to uncompromising design values, the latest and greatest gadgets from Apple are a perennial must-have. For the technologically savvy, not afraid to experiment, get their hands dirty, look under the bonnet and get fully involved in their technology, whilst seeing the latest developments even before they have been polished, the restless and even reckless genius of Google is source of ultimate satisfaction.

In order to make the end-to-end user-experience safe for consumers who want to be isolated from what’s under the bonnet, Apple have sought to control every aspect of their eco-system. There is the Apple way and no other if you want to get on board their band wagon – at no point can the experience of a user be allowed to bring the design judgements of Apple into question. At times this attitude of safeguarding the user from themselves has backfired – I challenge anyone to tell me honestly that moving files to your iPhone using iTunes is not a nightmarish process when you switch computers or just want to put a track on from a computer other than the one you are paired with. I know that Apple will be addressing this soon, but it is a clear example of where Apple’s paranoia about controlling user behaviour is made tangible.

Google – Trust the Users, Accept Rough Edge
At the other end of the spectrum, Google’s app market place trusts to user feedback and ratings – no review process except by users. It is undeniable that the overall quality of apps on iTunes is well above that on the Android Market. From Google’s perspective, everything should be driven by users, informed by users, open to users to use or not use, ignore or engage with. You have to be a bit braver to engage, but you can keep on digging with Android, or indeed any of Google’s web services, and finding new joys, excitements and, sometimes, rough edges. Google trusts its users more, and puts faith in the increasing technological savvy of younger generations, along with their cost consciousness, to gain long-term advantage over Apple.

Releasing Apps – Apple’s Big Brother v. Google’s Wild West
These divergent brand aspirations extend beyond the end-user facing aspects of their respective offerings and are even clearer when releasing an app. Want to put out an iPhone app – you won’t be able to guess exactly when your app will come out of the review process, or even exactly happens whilst its being inspected. If a major marketing campaign is slated to coincide with the launch of your company’s new app, then you better leave plenty of time for review, and don’t give a firm date for your campaign until your app is approved – you may even find that it isn’t permitted at all. By contrast, releasing an Android app is instant – no questions asked. At the same time, it’s a good bet that most of the users you really want – high spending, early adopters – will have an iPhone or iPad, so this is not even a choice.

Developing with Apple – Apple’s Way or the Highway
When developing code for these respective platforms, the divergence is even clearer. Apple’s XCode development tool is idiosyncratically Apple, using a language that only Apple cult members could really love – Objective C. At the same time, once you’ve paid for your Apple developer account, which you need to release apps, the development tools are free, and cover every aspect you need covering for developing and testing – even if the process is a little painful.

Want to use Apple’s standard design patterns – that’s fine, you will find more than adequate support, though it involves some fairly logic-defying steps to get things done. Want to do things your own way, or even in a way that is commonly established for lots of other platforms – well, you can do it, but you will find yourself on your own, fighting their tool all the way. Want to use another tool – well, there are permissible alternatives, but none deliver the same access to underlying behaviours and performance compared with Apple’s own tool – in part because Apple doesn’t want to open the development of its ecosystem up to interlopers.

Whatever the problems with developing apps for the iPhone or iPad, there is one thing that makes the idiosyncrasies of Apple easy to swallow – you know what kind of device your developing for, what it’s capabilities are and how you are going to test  your app to make sure it works properly on anything it’s going to be used on.

Developing with Android – Endless Possibilities, Endless Fragmentation
If you want to create apps for Android, there are a number of ways you can go, though the most standard is using the Eclipse IDE, which has been around quite a while as a java development tool. Unlike Apple’s XCode, in order to install the Android development tools, you require a number of downloads and a more involved set up. The fact that you create code for Android using a plugin for a tool not made by them speaks volumes about Google’s general approach – try to reuse the best of what’s already out there, add extra bits to make things easier, provide documentation and starting points and let everyone get on with it. Thankfully, Android is java based, which makes it easy for the majority of programmers – familiar with java or the very similar C# – to get stuck in.

The possibilities with Android are seemingly endless, there are no complete answers, but lots of starting points. The satisfaction of engaging in truly novel development is, however, tempered by the fact that you cannot be sure what kind of device you will be dealing with – screen resolution, memory, capabilities – vary massively. As has been acknowledged by many commentators, Android’s major problem is the fragmentation of the platform – so, you may test your app with a good many devices, but there is still the overarching, and realistic, worry that it won’t work on some device that is key to your target user market.

Indeed, fragmentation is the key phrase one would probably use for the whole Android experience – lots of different ways of doing things, lots of potential tools, lots of downloads to get you going, lots of reference sites and forums, lots of devices, formats and capabilities. No app can hope to work properly on every “Android” platform – and you may easily get caught out by phone features such as physical slide-out keyboards that require the phone to be used one way up rather than another.

Pining for Microsoft
In all honesty, I have no particular axe to grind here – there are many things that I like about developing for the iPhone / iPad, and there are many other things that I like about developing for Android. They are very distinct experiences with their own very well defined pro’s and con’s. However, the very fact that both have their clear drawbacks means that they have a long way to go in fully supporting their developer communities – regardless of what their fanatical partisan adherents would have you believe. Here, I think that both Apple and Google have a lot to learn from Microsoft, a company whose current, though likely temporary, absence as a significant figure in the mobile space is sorely missed by many developers.

Over the years, particularly while it’s dominance as the leader in software and technology was largely undisputed,  Microsoft received much criticism over its behaviour. Over the course of court cases on the bundling of Internet Explorer on Windows, amongst many others, it demonstrated a certain ruthlessness in pursuit of corporate advantage. Nevertheless, Microsoft’s heartland was always its development community – which it looked after in a way that no other company has been able to.

Take, for example, the current version of Visual Studio, and in particular its new scripting language for the web – RAZOR. It is, quite simply, a breathtakingly elegant and simple approach to creating highly interactive web applications, one that keeps coding and obscure development processes to a minimum. Microsoft really know how to make a developer’s life simple – and C#, in my opinion, is probably the best general purpose programming language, or certainly the most carefully elaborated – with well-structure libraries and tools, as well as a very active open-source community.

Over the course of a bumpy track record, Microsoft have got their development tools and frameworks just right – which is why it is such a shame that Microsoft largely missed the boat in mobile, at least until their Nokia deal pays dividends. Moreover, when developing for the B2B market, where the expertise and experience of corporate ICT, security and compliance departments is key, I sense that a lot of mobile and tablet developments are being held back for fear of using anything other than the familiar Microsoft platforms.

Apple, Google and Microsoft – a lot to learn from each other
This does not mean that I want Microsoft to suddenly steal a march on Apple and Google, to become dominant in mobile as they once were, and still largely are, in the desktop market. Far from it – but I think some healthy competition from Microsoft will not only free up forward-looking technological development in the corporate market – but it will also make Apple and Google alike up their game in supporting their developers.

I live in the vain hope that Apple will take a leaf out of Microsoft’s book and start loving their developers a little bit more, that Google will take a bit more care over polishing and integrating their disparate services and support, and that Microsoft learn what makes mobile devices tick. All three have massive amounts to offer by way of advancing mobile and other technology for corporates and consumers alike. All three have their distinct style and flavour – personally, I don’t think any one is better, at least in a general sense, than any of the others – but all of them are needed.

Don’t Write Off Microsoft – they Know How to Keep Developers Happy

Like many others, my team now feels liberated from platform specific ways of working, due in no small part to the flourishing of open source frameworks for just about anything you can think of, from user interface to middleware, security and beyond. We have just gone through a major explosion in it’s use of different platforms, in no small part due to mobile. We used to be exclusively Microsoft, but now we also use Java for Android, php on lamp for web and last, but not least, Objective C for iPhone development.

I remember the bad old days before the widespread use of the web, when a developer spent most of their time with their heads in their hand guessing the meaning of cryptic error messages and log entries. How much easier it is now than then to focus on the job in hand rather than the pure mechanics of getting it done. Despite all of this, it is still easier to use some platforms than others. Even though I constantly try out new things, have a secret geeky affection for things like regular expressions, and am an enthusiastic user of Linux, there is still something very definite to be said in favour of the much maligned Microsoft.

While some market analysts are busy writing Microsoft’s ultimate obituary, and comparing them unfavourably with Google or Apple, they often miss the unique capacity Microsoft has for looking after their developers: Visual Studio is unmatched as a development tool – everything fits together beautifully and works wonderfully. Unlike days gone by, Microsoft now have strong open source communities surrounding key technologies like MVC, which help move things in the right direction, whilst the MS teams keep it tidy. By comparison, Eclipse, for writing java, seems quite fragmented whilst XCode for Objective C feels quite awkward and basic.

I am in no way an ideologue or cheerleader for any given technology, they all have their pros and cons, they all have appropriate contexts for use. Nevertheless, if you want to make predictions about the future of mobile or other platforms, you would be wise to remember that application ecosystems require a development community – and that is one thing that Microsoft excels at supporting.

Follow

Get every new post delivered to your Inbox.

%d bloggers like this: