When is Windows better for developers?

Over the years I've maintained that Apple & OSX/macOS are Best for Business Users & Software Developers. However, there is a way to use a powerful Windows machine in an uber-productive manner.

It's probably best that you understand the logic first. Let the following facts sink in...

OSX Is Leading with Developers
My opinion aside, studies are proving OSX is the preferred OS of developers. In fact, in the 2016 StackOverflow Developer Survey, OSX was the clear winner over Windows and Linux worldwide.

Hackintosh Alure: Bang, Buck, etc.
Last month I helped a colleague spec out a high-end Hackintosh. For less than $2,000 we were able to cherry-pick components from the TonyMacX86 site and build a great high-end machine that far surpassed anything Apple is offering. In fact, with the high-end GTX 980 video card and multiple 27" 4k displays, I'm sure there are gamers and VR junkies out there that would love it.

Hackintosh Reality: Time is Money
Although digital crowbars exist to help wedge OSX onto non-Apple hardware (UniBeast, the Clover Bootloader, the iATKOS distribution, etc.) it is still not plug-n-play. Regardless of the tools you choose, or the hardware you purchase, you will undoubtedly have to spend hours or days tweaking your install. And, even after days of work, there are seasoned Hackintosh pros that basically give up on certain abilities (not having volume control with audio, no physical ethernet, etc.). So, while your high-end rig will run OSX, it will not be perfect... period.

Windows: Where High End is Not High Enough
We already know that you're gonna need a powerhouse machine if you might want to run Windows and actually enjoy the experience... 32-64GB RAM, 1TB+ SSD, 4GHz i7, etc.. Windows is so open, and has been around for so long, that it's disgustingly bloated. Even Visual Studio and the various dev tools from Microsoft are resource intensive. So Windows equals high-end specs. Remember that.

Linux: The Geek's Wishing Well
For me, Linux has been a bittersweet temptation for decades. I've always wanted to run Linux on my desktop. I've wanted to enjoy the experience. And, when I have installed it successfully, I love the thought of running a lean n' mean OS that absolutely screams on a beefed-up Windows box. However, as a former active duty Marine and developer who has prided himself on truly polishing his apps over the years... really focusing on the attention to detail... in the end, Linux is overwhelmingly lackluster. All of the "common sense" features I build into my apps are gone. The closed-system OSX "it just works" mentality is missing. In fact, aside from Bash, the Ext file sytem, and the simple text-based configurable world, there's nothing really in Linux that Windows and OSX can't do.

Windows Just Works... With the Hardware
Remember all of that high-end components we cherry-picked for the Hackintosh? Well, every single component's most polished driver is for Windows. So, regardless of what OS we might want to use, the reality is that Windows will be the most supported OS for the hardware we've purchased. As much as that fact sucks for us geeks, it's just the cold hard truth.

VMWare Runs OSX & macOS Guests on Windows Hosts
Yeah, you read that right. You can absolutely run the latest version of OSX (currently macOS Sierra) as a guest on a Windows host using either VMWare Workstation or VMWare Player. This is somewhat of a game-changer.

How To Video
There's a great video on YouTube showing how to quickly install macOS within VMWare. The author even provides links to all of the files:
How to Install macOS 10.12 Sierra on VMWare on Windows PC

Did the light bulb start to buzz? You see where I'm going. Don't you?

My iMac was King
For years I've preferred to use my 27" i7 iMac because I could do native iOS development with Xcode and then jump into a Windows VM for work with Visual Studio and .NET. And, with 32GB of memory and terabytes of SSD space, my Windows experience was enjoyable. This machine gave me the ability develop for any platform where native iOS was off limits to Windows developers. However, now that VMWare's Windows products can run macOS, I can pretty much do the same thing but in reverse.

Maintaining a Pristine Environment
Next month will mark 35 years (yes, thirty-five years) that I've been making money from programming. During that time, I have rebuilt my desktop computers thousands of times... literally. Any developer who has ever installed an SDK, or has had to register a component (DLL, OCX, COM+ component, etc.) has absolutely been burned by either mistakingly relying upon something they weren't aware of, by deploying an app without its required resources, or (even better) deploying the wrong set of resources. By rebuilding my computer after every major project, and only installing or registering what is absolutely necessary to my current efforts, I am certain I have prevented the vast majority of these problems.

VMs... not just for breakfast anymore
In my opinion, even with the advent of containers, using virtual machines for development is still quite handy. Cloning a standard "dev VM" onto a new team member's laptop or workstation can quickly get them up to speed with all of the tools, tweaks, and settings in use by the rest of the team. And, if we focus on the idea of maintaining a pristine dev environment (above), this also provides a way to quickly return to a virgin state upon the completion of a dev cycle.

Large Scale Projects Love VMs
Let's face it. Adding multiple projects or project folders to an IDE is disgusting. Opening multiple editors, one for each project, kills resources and clutters your environment. And, many technologies (Node, Express, Mongoose, etc.) just do better as a single citizen. This is where VMs shine. Assuming your workstation has enough horsepower to support the idea, having one project / framework / module running within a VM can be absolutely wonderful. With the swipe of your fingers on the trackpad (or CTRL+CMD+ARROW on Windows) you are able to bounce between full-screen virtual desktops where, sitting in front of you, is a completely sandboxed VM running that one chunk of your large scale solution. You are able to set breakpoints individually, run traces in different projects, and debug random projects all in real time and without impacting the other portions of your overall solution.

Okay, you've gotta know where I'm going with this by now!

Sooo... when is Windows better for developers?
The simple answer: it's not. It's only better for your machine... if your machine is not made by Apple.

Save Time by Selecting the Right OS for the Hardware
If your pockets are deep, and you can afford it, buy a high-end Apple computer (32-64GB RAM, 1TB+ SSD, etc.). The overall experience of macOS on Apple hardware is second to none. Your second best option will be a custom (aka "clone") Windows machine with the same specs. Either way, aim for the hardware. Apple software is designed to work with Apple hardware so that's a no-brainer if you can afford it. If your box is a clone, use the latest copy of Windows. Every high-end component available today is primarily built for Windows. By sticking with Windows, and using the native drivers for the component, you ensure the components will work as expected without you having to waste time, effort, or energy jumping through hoops.

What if I only develop for Windows?
As a dedicated Microsoft developer for several decades, I can confidently say, developing on a Mac, with a Windows guest VM, is far superior to using Windows directly. Sure, you might have more raw memory or CPU power working directly on the machine, but what you will gain in productivity, by using a Windows VM, will easily make up for it. Plus, you're never going to use all of your processor cores or RAM with any compiler. Heck, even if your host OS is Windows I'd still recommend using a Windows VM for Windows or .NET development. That last scenario works well because VMWare Workstation will let you prioritize the guest VM over the host OS.

Speed Trick:
Years ago I had a Toshiba Satellite laptop that I loved. I had it for years and it slowed down considerably. By using a clean install of Windows, VMWare Workstation, and a Windows VM, I was able to push that little machine faster than working directly in the OS... by setting the priority of the "grabbed" VM to a "high" priority on the processor. This trick is still useful today for making your guest VM fly!

When to Use VMs
Use a VM in the following scenarios:

  1. Always develop in a VM whenever your host is Windows; or,

  2. When developing large solutions, develop each of your individual projects in a clean VM. This allows toggling between projects while keeping each in its own pristine environment.

Summary
Forget Hackintosh. Your hardware was built with either OSX or Windows in mind. If your machine was made by Apple, then go with OSX. If not, then go with Windows to ensure your hardware works as flawlessly as possible with the least amount of effort. You can run the other OS in a virtual machine when needed. Also, whenever working on a large solution (multiple projects), keep your environment pristine by leveraging a VM.

You'll thank me in the end. =)

Multiple OSX virtual machines on one host