Developer Advocate @docker. Microsoft MVP. Pluralsight Author.
Posts my own.

  Docker on Windows Docker on Windows - the book
  My Pluralsight Courses
 Old blog 

Post //build - the 4 technologies .NET people should learn in 2016

//build 2016 is over and we had the great set of announcements we've come to expect. Now we know where Microsoft's heading in the near future, what technologies should .NET people be focusing on?

I think there are four which are going to be key to building and delivering better software on the Microsoft stack in the coming years, and here they are.


4 technologies .NET people should learn

1. git

.NET Core is open-source, Xamarin and Mono will be open-source, Azure documentation is open-source. Microsoft are putting their projects on GitHub, so if you want to explore the source code, build it yourself, or make changes, you need to know git.

git is easy to pick up, it's a distributed version control system - a more modern way of doing source control management compared to TFS or Perforce which have the notion of a single master repository with local workspaces.

With git you have your own local repository. You can make changes, commit them permanently, stash them temporarily, view the history of all your files and roll-back - all without being connected to a remote server. When you're done you push your changes to a remote, and your commits are available for anyone who pulls from that remote.

Distributed Version Control

*Image from Atlassian's git tutorial.

git is cross-platform, fast and easy, and it makes merging a breeze - which is essential for distributed teams or large projects.

Two great resources for learning git: the free official Git Book, and Pluralsight's Git Fundamentals by James Kovacs.

2. Docker

Obviously. Docker has grown so popular so quickly because it provides an elegant, consistent solution to lots of problems in software development and delivery. Devs love it and ops love it, and when they realise the advantages, management love it too.

How do you get new devs up to speed quickly on a project which has lots of dependencies? How can you build your software into a single package that's easy to deploy? How can you be sure you're about to deploy the same version in production that you've just signed off in test? How can you maximise your hardware investment (real or virtual), and run as many services as possible on one unit without them interfering with each other? Application containers are the answer.

Docker container structure

*Image from Docker Birthday 3 slides.

Docker lets you define the base OS, frameworks, libraries etc and your own software setup in a single document called a Dockerfile. You build a binary image from that file, and you can run that image on any machine that runs Docker (which will soon be every type of computer everywhere). Docker images are lightweight, portable and have minimal overhead, so you can condense a lot of services on your hardware.

Docker is simple to learn. I've got some five-minute videos on the Docker YouTube channel which will get you started with Docker on Windows, Docker on Mac, and Docker on Ubuntu. Then check out the Docker documentation.

3. Hadoop

Yes, Hadoop. In the Big Data space all the cool kids are running away with shiny new stuff (I'm looking at you, Spark and Nifi), but the new technology all embraces Hadoop, which is the central part of a large and thriving ecosystem. Big Data is becoming increasingly mainstream and a grounding in Hadoop will give you a head start when it lands near you, and that could be soon with the Hadoop integration in SQL Server 2016.

There are two parts to Hadoop - the Hadoop Distributed File System (HDFS), which is a scalable, reliable storage layer; and YARN which is a job scheduler. Between the two, you have the foundation for running Big Data on commodity hardware.

YARN jobs

*Image from Hortonwork's YARN Overview.

When you save data in HDFS it's copied across multiple servers. When you send a query to YARN, it splits it up into many jobs each reading just a small piece of data. Then it works with HDFS to try and schedule the processing of each job on a server which has a local copy of that data, so it can be read quickly from disk. A single query could be split into 1,000 jobs, and Hadoop will run as many of them concurrently as it can - which gives you the potential for Massively Parallel Processing (MPP).

The Syncfusion Big Data platform gives you Hadoop in a Windows package with a bunch of .NET sample code, and Hortonworks (whose Hadoop platform powers HDInsight in Azure) have some good getting started with Hadoop resources.

Hadoop isn't so easy to pick up as the others, especially from a Windows/.NET angle but it's worth the investment. If you think it'll be your thing then follow me on Twitter - I've got some content coming in that area later in the year.

4. Ubuntu

Yes, I know this is about the Microsoft stack, but with .NET Core you can run .NET apps on Linux, and we learned at //build that Windows 10 will soon be able to run Bash - using the real actual Ubuntu binaries, supplied by Canonical. So 2017 could finally be the year of Linux on the desktop (kind of).

I'm not on the in, so I don't know, but it seems to me that this has been driven by the upcoming Windows Server 2016 support for Docker. Since Mark Russonovich said Windows would offer full parity with native Linux features for Docker, I've been wondering how it would work. This is the answer.

Bash on Windows

*Image from //build, via Windows Central.

Why should you learn Ubuntu? All of the above is a good practical reason. The other technologies in this list were all developed on Linux and run natively on Linux. They all run on Windows too, but the Windows ports typically take a while and don't always give you the whole thing.

There's a softer reason too, in the name of personal development. If you've always used Windows then when you first log into a Linux box you will have no idea how to do anything. It will take you completely out of your comfort zone, force you to learn a lot, and open a whole new set of doors.

I could have said 'Linux' for number 4, but I think Ubuntu is the best version of Linux and it's one of the easiest to migrate to from Windows. Plus I can plug my Pluralsight course, Getting Started with Ubuntu along with the free Official Ubuntu Book (pdf).


Any technology pick is a personal one, and these are all technologies I've spent a lot of time with, so that investment obviously makes my choice partisan.

But I've made that investment because these are all great technologies, and when you start to learn them you'll be adding a whole set of powerful options to your toolkit.

Same time next year?

Share this article on
Author image
Written by Elton Stoneman
Developer Advocate @docker | Microsoft MVP | Pluralsight Author