When I was first getting into software development, I heavily used Windows and Microsoft technologies. I insisted upon it when working with people, telling them that Microsoft’s stack was always the best choice. Windows, to me, was the superior operating system. Zune was superior to the iPod. C# was the right programming language for all things.
Despite my strong belief in the Microsoft platform, many people around me were starting to use Macs, Ruby was becoming popular, and I was more and more reluctant to consider these things as unnecessary. In 2011 I bought my first MacBook, and decided I was going to learn every thing I possibly could about the Unix and Linux world. In 2015, I’d say the *nix ecosystem makes a hell of a lot of sense to me. My view of technology today can be summed up as “Use the right tool for the right job”. This doesn’t seem like a very profound statement, but it took a while for it to really click with me. This meant that my current knowledge was not future proof, at all. It meant I probably shoehorned a few things here and there in the past. It meant I had a crapton more to learn.
I got comfortable developing in C/Objective-C (and as passé as it is, I still like the language quite a bit) at least for OS X, never quite as much for iOS. I know enough of Swift to be dangerous, and I know the BSD toolchain to make it through a day of work using it. A lot of that knowledge translated over the Linux, so I used Ubuntu and Fedora for a while to learn the ins and outs of Linux (tip: OS X is not Linux).
Learning these tools and technologies has done more to make me a better Microsoft Stack developer than anything else I ever did.
I would encourage those that are firmly in the Microsoft world to step back and see what else is there. I know many self proclaimed “Microsoft stack developers” that own MacBook Pros, run Bootcamp, and never touch OS X. Even more interesting are those that use Parallels, but just use OS X as a thin virtual machine host and run pure-Windows there, too.
Part of what frustrates me is people that use inferior Microsoft tools just because they come from Microsoft. They don’t want to get their hands dirty and learn some basic technology outside of Microsoft. An example that I recently came across is someone that wanted a Content Management System. Many people said, “WordPress”, and indeed, as he described his requirements more, it sounded more and more like WordPress was the right choice. Interestingly, one of that persons requirements was “It needs to run on Windows.”
The usual response is “Because we are a Windows shop”. That needs to stop. Sure, you can run WordPress on Windows. The Web Platform Installer can install it for you, it can run on a Microsoft SQL Server database… but why? People have gone through tremendous pains to get platforms running on Windows that don’t need to run on Windows. Meanwhile on a Linux distro, those platforms are easy to install and maintain, manage, and run. WordPress with MySQL is very simple. Why does IIS need ARR when there are much more proven, and scalable proxies able to run on Linux? (HAProxy, Squid, NGINX, just to name a few).
I know some people will never be comfortable or want to endeavor into Linux – that’s fine, just know there is a ton of things you are missing out on.
For those that are willing, take the time to learn it. Try building sources form scratch on your MacBook, if you have one. Go install a Linux distobution. The wonderful thing about Linux is if there is something you don’t like about it, you can fix it. Either someone has already done the work for you by packaging it up and putting it on Homebrew or Macports, or you can build it yourself. Don’t like the version of Git that OS X ships with? Easy:
#Install Xcode and the CLI tools before doing this so you have compilers.
#Choose a more suitable branch or tag if you aren't feeling adventurous to build trunk.
curl -L https://github.com/git/git/archive/master.zip > git-master.zip
sudo make prefix=/usr/local install
I’m not trying to slam Microsoft and say Linux is The Path of the Beam. The two coexist with each other quite well. When used together, you can do some really great things.