Meditation In C#

In which I revisit C# for fun and end up going in deeper for… more fun?

I’ve been hacking at Unity 3D since Codebits – there were a number of interesting projects using it, we were all stoked from riding the Rift Cycles and the IDE has come a long way, so I was curious to see what could be done in terms of data visualization, wistfully imagining a future when I would have both the free time and the spare cash to grab an Oculus Rift development kit and take my big data/infoviz skills to the next level.

In short, Unity 3D has become a fairly well organized environment where JavaScript and C# enjoy nearly equal standing, and fairly quickly to get into in either language. But the JavaScript support is clearly geared towards bringing in relative newbies and there was no way I was going to tackle complex data structures in it.

I also happen to have a few, erm… Mono-theistic acquaintances, one of which is deeply into gaming and graphics (hi @sh4na!), so C# it was until work cut in and my free time went down the drain again – I had the makings of a 3D graph renderer in the works, but it’s hard to debug complex data structures in Unity and my code was a bit rough, so I suspect I’ll have to rewrite the whole thing from scratch.

Fast forward a few weeks, and I found myself on the eve of attending Microsoft’s local WebCamp event reading this post about vNext and browsing their core repo (forget the samples, this is where the meat is). I couldn’t run any of it on a Mac, but my curiosity was piqued enough for me to grab Xamarin Studio and toy with them a fair bit – with the rewarding result that I was able to drop in my Unity code (at least the data structures) and debug it.

WebCamp was interesting – rather surprising, honestly, and after sitting in on most of the sessions regarding solution architecture and Azure (which were crammed with demos and eerily aligned with a lot of the API/architecture stuff I’ve been involved in the past few years1), my early impression regarding Satya Nadella’s ascent and my thoughts on the new .NET build toolchain were confirmed – there’s a lot afoot.

It does feel like a whole new Microsoft, and I was very intrigued2.

Besides a bunch of Visual Studio enhancements, the shift in emphasis towards git integration, agile process workflows, providing scaffolding for unit testing, and little niceties like providing Kanban boards for projects managed on make the whole thing positively fascinating.

Having managed the SAPO intranet and (nearly) all its developer support infrastructure (from ticketing to source control) for over three years, I was hooked. So I decided to take another deep dive and spend some time getting reacquainted with Visual Studio (I set up the previous edition last year to have a go at building a Windows Phone app but lacked a device, so that fizzed out quickly).

For good measure, I also set up MonoDevelop on my ODROID – but it doesn’t seem to run properly on ARM, which is a shame since it would be interesting to compare raw performance between Java 8 and Mono on my little cluster of ARM machines.

Let’s see where this goes.

  1. In fact, I might as well be looking at some of our Java/Python stuff – same design patterns, very similar tooling, and the same shift towards a full-on REST API back-end + JavaScript/Mobile app front-end approach. ↩︎

  2. In case you’re wondering, I’ve always been carefully neutral where it comes to development platforms – for instance, both my favorite programming languages (Python and Clojure) are platform-agnostic, and both Python and Clojure can target both the JVM and the CLR – and, in fact, one of the reasons I chose Clojure over Scala was that the former isn’t hogtied to the Java ecosystem. Of course, it also helps that I used to be an MSDN subscriber. ↩︎