Developers, it’s time to take a second look at Microsoft

For those of us in the open source, trendy, node, rails, iOS, Android lands it’s easy to forget that there is a whole developer ecosystem out there centred around C#, .Net, Azure and much more.


We, and I include myself in this group, have forgotten about the MS ecosystem. Maybe we were burnt by VB or by Windows Vista being... Whatever it was, we moved away to other, newer tools and didn’t really look back.

But I think now, 2016, is the time to take a second look. In case you missed it, there’s a new guy in charge, and he appears to have his head screwed on properly. In just a few years he and his team has lead the charge on some super cool stuff. Let’s take a look at these.


C# is like Java, but fixed. It’s got similar syntax but has got so much more. It’s a superset of C, with classes, inheritance, interfaces (protocols) and much more. If you’re thinking that’s a bit dull now, and you’re a functional programmer now, then F# is also just as cool. If you’re somewhere in between, the LINQ framework will do that for you. It’s also not new either, so it’s pretty stable and theres no week long migration to the next version. (👀 Swift)

.Net Core

.Net Core is a cross platform, open source, free, cut down version of .Net for on Linux, Mac, Windows and even IoT embedded devices. It’s got all the fun of C# and a sensible collection of foundation classes for building whatever you’re building. Oh, and it’s super fast. Not like Node or Ruby fast, actual fast. After talking to a local company, they were able to replace a node.js server doing 800 requests per second with a .Net server doing 20,000+requests per second. Nice.

VS Code and VS for Mac

In case you haven’t seen it, Microsoft released VS Code and it’s pretty darn cool. Once again, open source, cross platform and free. You can think of it like Atom or Sublime, and like those two, they have many extensions for things like Git or other languages. And then we got a preview version of Visual Studio for Mac in the last couple of weeks too. The awesome IDE on Windows is starting to make it’s way over to us now which is pretty neat. It’ll only get better, too.

Azure Machine Learning

Azure, which is pretty much Microsoft’s AWS, now has a bunch of cool AI tools. All tied in with other services, it’d be a trivial add on to your application. A lot of AI algorithms and bayesian math is implemented for you and wizards to help you choose the right one for your application.

Bot Framework

The same goes for the MS Bot Framework. You can create interfaces to Skype, Facebook, Slack and More. It even can run serverless, where you pay for only the resources you consume.


The hololens is freakin’ amazing. Read my thoughts here. Also, if your app works on Windows 10 Desktop or Phone, it’ll probably just work on Hololens.

Microsoft Surface Studio

This is one for the designers, the Surface Studio is basically a what happens if you turn a drafting table into a computer. It’s something that I think will actually work super well for designers.


These are just some of the cool things Microsoft has to offer. There’s so much more to look at. Universal Windows Apps for write once(ish) run everywhere, Microsoft Surface Hub for meetings, Azure DevTest Labs, Xamarin, Azure IoT Hub, Power BI and much more!

In conclusion, it’s time to take a second look. No solution is perfect, and to suggest tech from “the other side” won’t be the best solution is pure stubbornness and arrogance. Take a second look. Have an open mind. They’ve come a long way, and for your future applications and endeavors, it could be the right way.

So go do it, go to a .Net meetup, or check our your local Ignite conference. Heck, go to Build!

Thanks for reading. I’m also @samjarman on Twitter if you wanna chat — I’d love to see you there.

Hands on with Microsoft HoloLens

At the recent Microsoft Ignite conference, I got the opportunity to try the Microsoft HoloLens. CvpEnq4VUAA-4sc

All I'd seen up to that point were videos like these:


Sure, marketing videos will always look better than the real thing. I'd been bitten once before - by Google Glass. Google Glass had great marketing but really just sucked once on your face.

But once I put on the HoloLens it was completely different. It was totally legit.

First, a bit of knowledge. Back at university, during my honours year, I did a great course on Augmented Reality. It was taken by well respected researcher Dr Mark Billinghurst. He taught us the concepts required to understand AR. To sum it up, for an AR system, a computer must recognize points of interest in an image (corners, edges, etc) and then place the object, scale it, and orientate it correctly. This is quite computationally complex, and expensive. Oh, and it must be done every frame, roughly 25 times a second.

With that in mind, I expected HoloLens to suck at that, but to my sheer and utter delight, it freaking nailed it.  We later learned that the HoloLens has a dedicated processing chip for the above process, and that's what allows it to be so fast.

That being said I did have some gripes. Firstly, the field of view (eg how much of your field of view that could possibly contain holograms was small. I suspect this is just a V1 thing, and the ability to expand that is coming. However, this might be easier said than done, due to the above process. But for now, for example, you'll not see a floating space ship in your peripheral vision.

Secondly the unit was a bit heavy. I'd say after an hour of playing/watching/using the HoloLens your neck might be a bit sore. Once again, V1, once again, probably fixable.

The gestures worked well, but took a couple of gos to get used to them. Watching the Microsoft employees (who had been using it for a while) use it, they were able to have their hand movements recognised first time. Right now it supports just a few, but I'd really like to see some gesture inference going on, and then it could get really cool.

Overall, a great first start. I'm looking forward to see where they take it next.

Developers: If you're keen to start writing apps for this (hey, it's just Windows 10 Apps or Unity), then go here. Developers can buy up to five devices with shipping to the US, UK, Canada, France, Ireland, Germany and New Zealand (woo!).


On Tooling

I started coding in two ways. When I was 13, I tried a little bit of C. I didn’t get very far, in fact I wrote something like this before I got confused and bored:

Basic C program — Hello World.

The other way I tried was using iWeb  — A visual WYSIWYG editor for making websites. I of course hacked around with the CSS and HTML it spat out. But I ask you — can you guess which one I enjoyed more?

Tools + language, not just the language itself, makes a developer productive. And somewhere, I feel we lost that. Tools can make up for flaws in languages, but can also enhance productivity for languages that are just fine.

Yesterday as I went to write some Swift 3 code in Xcode 8.1, the editor crashed. A restart of Xcode didn’t fix it and I was unable to even use autocomplete to fill out some nontrivial block syntax.


Adding insult to injury, I certainly can’t refactor my stuff either! In fact, try use anything from Xcode 8’s (7, or 6!) ‘Refactor’ menu and you’ll get this depressing dialog box.

Error message stating Xcode can’t refactor Swift

We’re on year three of Swift. Version 3. And the tooling still sucks. 

I was just at Microsoft Ignite here in New Zealand, and I have to hold Microsoft up as the company that does Tooling so well. I spent a few years doing .Net as a student, and quite frankly, I loved it. C# is a solid language to work in, with lovely OO and Functional (LINQ) capabilities and around it, a bunch of awesome tools such as Visual Studio, intellisense, ReSharper and more!

I spent the week quite frankly being quite jealous of the tooling. From VS you can publish directly to Azure and all sorts of other things. And then even Azure is a brilliant collection of tools that intertwine and integrate better than a plate of linguini.

Typescript, Microsoft’s new is actually leading the way with something they call a language server protocol, meaning as long as your editor speaks the protocol, you get all the features like intellisense and autocomplete. Even Rust is following. Such innovation. Wow.

In the other camp, our frenemies in Android land have Android Studio which is superb, and they love to bemoan Eclipse, which is still better than Xcode. Sure, they have to put up with Java, but since Java 7 it’s been quite nice and 8 just came out and it looks great too. Heck, even PHP has been good since v5.

You might say “Oh I’m too good for IDEs, I just use Vim”. Sure.. but wanna try tell me you have no vim plugins? Exactly. Tools.

Look, I’m not trying to have a go at language innovation (it’s great!), but this obsession we have with building new languages such as Swift and it’s features just has to be be matched with the innovation of tooling as well. Refactoring, renaming, style checking, unit testing and more must come with a new release. Rust is doing well with errors. Elm is following suit. And one could argue Go has had notable influence in its focus on really fast compile times and standardised syntax formatting (by way of the gofmt tool). Why is Swift lagging?

Sure, the official line seems to be “it’s on the list”, but I’d argue we could have at least got class renaming before several versions of Swift. It’s great they’re adding new features from other languages — but it’s not great that it is at the expense of the surrounding developer experience. With that said, do Apple really expect us to commit to Swift? How about for the Server and other places?

Still not getting it? How about this: since we like to call ourselves engineers, let’s take a more direct metaphor from our Civil Engineering friends. Swift is a new type of material, but we have nothing to mold or shape it with. Tools and materials go hand in hand, and we’ve forgotten that. It’s no different with Software Engineering.

Hey Chris Lattner. Love your work, but how about next year we don’t get a week-long migration process and instead get some better Swift tooling?

Don’t forget, Tools + language, not just the language itself, makes a developer productive.


/rant So that’s my current thinking on this topic. What are your thoughts? Leave a comment or ping me on Twitter — I’m @samjarman.