History lesson

Most software engineers I know either use Mac or Linux. Sure there are some exceptions (especially in fields like game development or with technologies like .NET), but the trend is obvious — most people hate Windows for software development.

And I was exactly like that majority. Back in 2008 I switched from Windows to Linux and later that year switched to Mac without any regret.

Developing server applications (meant to run on Linux in production) was always a pain in the ass on Windows: you lacked powerful Unix console with the same tools you have on a Linux server, you needed to download and set up custom libraries and language runtimes in a manual way instead of using automated reliable tools like ‘apt-get’, ‘yum’ or ‘homebrew’. Using libraries with C-bindings was a nightmare: you were forced to either find compiled DLLs somewhere or build them yourself! There were always workarounds like using cygwin or developing in virtual machines (and later Vagrant), but it was still painful comparing to development on Linux or Mac.

Even from a power user standpoint Windows was quite inferior to Linux and Mac. Probably the biggest downside for me was lack of virtual desktops. It feels so natural to have separate desktops for different contexts, e.g. one with IDE, terminal and probably other development or testing-related tools, separate desktop for instant messengers, etc.

The pain is gone

But now we’re in 2018 and all those issues are not relevant anymore. There are few innovations hapened last couple of years, that made development on Windows enjoyable:

Release of Windows 10, which is a solid modern OS… and yeah — it supports virtual desktops; Windows Subsystem for Linux; Raise of containerization technologies, particularly Docker;

If you’re using Docker, development on Windows and Mac feels virtually the same. If not, Windows development experience is closer to Linux now.

Why is it worth using Windows and not Linux or Mac?

If you are completely happy with your Mac/Linux laptop or desktop workstation — good for you, probably you should stop reading this article right now.

Going forward let’s assume you’re less lucky fellow like me, who cannot use Linux (probably you need commercial software that is not availble on Linux or some hardware does not work properly on Linux) or not quite happy with Mac (products are not flexible enough for you as a power user, while the cost is sky-high).

For me the turning point was the release of 2016’s Macbook Pro, that lacks ports and functional keys I need every day, shows mediocre performance, but costs more than ever and isn’t upgradeable.

Nowadays premium laptops are not limited to Macbooks, there are Dell XPS, Asus Zenbook Pro and few others that are more powerful and flexible.

Practice time

Let’s set up basic development environment on Windows, so you’ll get similar experience to what you have in Mac or Linux.

Windows Subsystem for Linux

There was an old Joke: “The only time you are allowed to use Internet Explorer is when you’re downloading Chrome or Firefox”. Ironically, you’ll need Windows PowerShell just to set up Linux Subsystem for Windows and continue with bash, zsh or other unix shell of your choice.

I won’t get into WSL setup details, there is already Windows 10 Installation Guide for that.

Now you have Windows as a GUI and familiar Linux Server(Ubuntu in my case) in console.

The Console

Once you set the WSL, it is already available via “bash” console, which looks exactly like standard “cmd.exe” or PowerShell.