Miguel de Icaza made a bold statement last month after Nokia announced they would be replacing Symbian with Windows Phone 7. He made the assertion that C# and .NET, via the ECMA CLI standard, is becoming the de facto language for cross-platform mobile development. As you can imagine, this resulted in some rather lively discussion in the open source and mobile development communities.
Politics and Religion aside, I think he makes a strong argument. Despite their recent troubles, and their virtually non-existent U.S. market share, Nokia still has more mobile devices in the market worldwide than any other manufacturer. The WP7 announcement advances the portability of C#/.NET code to these devices, and offers a world of possibilities across all of the major players in mobility today, as Miguel’s chart clearly shows:
Now I can already hear the arguments that HTML 5 provides the same portability, and is an open standard without all the excess baggage, (read: Microsoft), of C#/.NET. In fact, many clients I speak to today hail HTML 5 as the answer to their mobile prayers, but the reality is often not so rosy.
Don’t get me wrong, I love HTML 5. It brings incredible flexibility and power to mobile devices, and the apps you can write with frameworks like SenchaTouch, and JQuery Mobile are truly impressive. But there are just some things a web-based application cannot do. The HTML 5 Cache Manifest standard provides for disconnected capabilities, but it is still difficult to support full offline transactions without some intelligence to manage them outside the browser. Access to the device’s native features, (GPS, Camera, Accelerometer, File and Storage), all require native interaction via frameworks like PhoneGap; and despite the advances in the HTML 5 user experience it still cannot provide the same richness that the native platforms can.
HTML 5 can provide an elegant, cost-effective solution to many cross-platform problems, and I counsel my clients to take a long, hard look at it as a first step in any assessment of their mobile application strategy. Most enterprises already have an army of web developers who can be re-trained to develop mobile-optimized web applications, and this often provides a critical first-step for many of them into the mobile world. But as soon as the problem at hand requires disconnected transactions, or access to the device, or a rich user-experience that HTML cannot provide, native options have to be considered.
C#/.NET and Mono are my first suggestion for organizations who already have a significant investment in Microsoft technologies. They offer full access to the device, and all the native capabilities of Obj-C on iOS, and Java on Android — plus C# and Silverlight for WP7. What’s more, they can still deliver HTML 5 web applications via ASP.NET while leveraging existing investments in the .NET platform.
Time will tell if C#/.NET and Mono will become as Miguel puts it the “lingua franca of all major mobile operating systems”, but for most of my clients it is their best solution for their cross-platform mobile problems.