Azure, Xamarin, and ... a Ubiquitous .NET?

A New Era

AzureDevA week ago last Wednesday, a stunning and well-embraced announcement was made by Scott Guthrie welcoming the Xamarin family into the Microsoft ecosystem.

And much rejoicing in the Microsoft developer nation was had.

I know I was one of those celebrating developers.  In fact, I still am.  In this article, I am going to try to "curb my enthusiasm" as it were and talk about my thoughts over the new emerging landscape -- dare I call it a new era? -- I feel is upon us as loyal, committed, and bold Microsoft developers.  I will do this starting with my impressions of Azure (heads up: I'm the "new guy" here), my impressions of Xamarin, and finally my thoughts of "the missing link" in a truly dominant Microsoft/.NET development force in the marketplace: a ubiquitous .NET client application development model.

Azure

Those of you who may or may not know, I'm actually the Azure newbie of the crew here and am giving my perspective on all the awesome new capabilities that I am finding with Azure.  I am in about a few weeks now with its new portal and I have to say that it has been an absolute dream!   The experience I am having now with Azure is very much like what I had back in the early-to-mid 2000's when I started to explore all of Microsoft's server products: Windows Server, SharePoint, Exchange, Sql Server.  You name it, I had the server and a machine dedicated to it on which it was installed.  This is even back in the day before Hyper-V and virtual machines; everything was on the metal, baby!  Ahhhh... very formative and instilling years, and that same feeling of learning all these new servers and how they work together is exactly what I am feeling now with Azure.

A nice side-lesson in my learning and investigation with all of those servers, is that I also learned very quickly that I am much more of an application developer than a network administrator.  It takes a lot of knowledge and energy to keep all of those servers running smoothly and synchronously in addition to building an application to run on top of them!

Well, now with Azure and its PaaS (Platform as a Service) and IaaS (Infrastructure as a Service) offerings, I can focus on being that application developer while still having enough knowledge of a domain and its infrastructure to be (a little) dangerous.  That is, Microsoft Azure takes care of all the dirty work (read: maintenance) while I can focus on the tasks that are important to me as an application developer via its portal.

Speaking of which, have I said yet just how awesome the Azure portal is?!  Well, the Azure portal is awesome!  I can manage my Azure Active Directory and all the applications that I run on it all from a single, well, portal, and I found that it is easy to use and not much -- really nothing to date, knock on wood! -- has gone wrong like I experienced while trying to run these servers on my own metal.  Most if not all the administrative hassle of running a network has been removed and I am free to focus on the essentials and what matters to me (building applications).

It truly feels to me that the "old times" are back, but they are done in the new times, bringing a lot of quality and great developer experience with it.  Very exciting (new) times, indeed!

Xamarin

Now, this is an Azure blog, but I feel the Xamarin story affects all of Microsoft and especially Azure.  Why?  Well, Azure has done an incredibly commendable job of opening up their services to non-Microsoft technologies, such as NodeJS (this is sort of the big technology stack that everyone seems to be gravitating towards at the moment).  This is very smart and the right thing to do, and really shows the "new Microsoft" mentality.  NodeJS is a great technology and has a burgeoning ecosystem much like what .NET has.  What's more, NodeJS allows development in the following scenarios:

  1. Web/Browser-hosted scenarios (that work in tandem with HTML5).
  2. Server-hosted scenarios when using its web server and/or with Express.
  3. Native-hosted (or store-hosted) application scenarios when paired with Cordova (another technology that Microsoft smartly supports in Visual Studio).

I emphasize that last point because that brings us back to Xamarin, which can be considered the .NET equivalent of NodeJS's Cordova.  In addition to supporting non-Microsoft technologies like NodeJS, Azure also (of course) supports Microsoft-created technologies like .NET.  Xamarin allows us now to take our .NET code and compile it into the target platforms of iOS (approximately 1 billion devices) and Android (approximately 1.7 billion devices).  While these applications are written in .NET and deployed to their respective "native"-hosted stores (Window Store, Apple Store, and Google Play), these applications will require services which are also written in .NET and hosted on Azure.

This is a great boon for .NET developers and the organizations that employ them, as this capability allows us to preserve and leverage the years (and dollars!) of investments in .NET and bring them to these new platforms.  In fact, developers are already speculating that Microsoft might even make a cross-platform Universal Windows Platform to utilize this new partnership.  I say go for it, but let's not forget to improve the Xaml while we are at it!

The Web

Now, you might have noticed something about my train of thought here in regards to describing (and comparing) both NodeJS and .NET.  Both can be used on the server-hosted scenarios with Azure, and both can be used in native/store-hosted scenarios using Cordova (for NodeJS development) and now Xamarin (for .NET development).

The one area that NodeJS does differ from .NET at present (and can be said it has a considerable advantage) is that it can reach the web with ease whereas .NET is still confined to native and server scenarios.  With NodeJS, Azure, and Cordova, you enjoy total development synchronicity with NodeJS.  Or, to put it in my attempt at pretty pictures (remember, I'm a developer, not a designer!):

 

[caption id="attachment_541" align="aligncenter" width="667"]Hosted Scenarios Using NodeJS Development Model Hosted Scenarios (and Code Reuse) Using NodeJS Development Model[/caption]

(NOTE: In the above picture I've denoted shared code between all known scenarios in money colors, as shared code (and code reuse) yields less code and correspondingly more cost-effective solutions.)

On the .NET side, by contrast, you are still left with only Xamarin and Azure, and at present have to actually use NodeJS to reach the web scenarios:

[caption id="attachment_551" align="aligncenter" width="936"]Hosted Scenarios Using .NET Development Model Hosted Scenarios (and Code Reuse) Using .NET Development Model[/caption]

Turning Question Marks into Exclamation Marks

All is not lost, however.  It does feel that Microsoft is starting to turn the corner under the direction of its new CEO and is turning some serious question marks into some pretty serious exclamation marks.  To be honest, I feel better now about Microsoft than I have in years (I am a former Silverlight developer so perhaps you feel my pain!).

We now have outstanding server-hosted scenario support in Azure (one of the best groups and technologies in all of Microsoft -- if not the best), and we now have great cross-platform native/store-hosted scenario support with the new Xamarin acquisition.  That makes two of the three major scenarios that put it on par and competitive with the NodeJS development model.

The only area left to complete the "trifecta of awesome" is the web -- a .NET web, as it were.  If you are a .NET developer and are interested in seeing this, then you are not alone.  There is currently an open vote on Visual Studio's UserVoice that is asking for exactly this capability.  In fact, just last week it surpassed 2,000 votes and was marked as Under Review by the Visual Studio team -- a day before the Xamarin announcement.  Talk about a busy week!

Again, see: exclamation marks!

The Path Forward

In case you are wondering how a .NET web could be accomplished with an HTML5-compliant browser, there is a new initiative underway known as WebAssembly that could very well be the answer this very challenging problem space.  There are also other projects underway that are transpiling JavaScript to .NET, such as Duoco.de, JSIL, and the latest up-and-comer, Bridge.NET.

If you are anything like me, you were looking forward to both //build and Evolve with great interest. But now with these latest developments, you are drooling with rabid anticipation (or wait, is that just ME?!).  Could a web-enabled .NET be on the horizon to further pair with Azure and Xamarin offerings?  Doing so would not only make .NET very competitive with NodeJS but would most certainly usher in a new, accomplished, and cherished era of Microsoft, Azure, and .NET development.

Let's keep our eyes peeled and see if this dreamy possibility is indeed realized.  Until then, please feel free to add your voice to the growing chorus of developers who wish to see this happen.  Also feel free to leave your comments below and let me know what you think of all of this, and how you think Azure can and will benefit from the Xamarin deal.  I look forward to hearing from you!