Development on Windows is... Good?
Not that long ago, most people would laugh if you told them you did any serious software or web development on Windows. All the serious coders used Macs, except for the handful who ran Linux. I was in the latter camp; as someone who’s never liked Apple products, I installed Debian on a clunky Compaq laptop in 2003 and was immediately hooked by the idea of running an open source operating system. I don’t really run Linux much any more, though, because in the past few years, Windows has become a functional, even good, development platform.
A couple of folks have observed the leaps and bounds that development on Windows has taken. But most of them use the Windows Subsystem for Linux (WSL), an (admittedly quite well-done) virtual machine that allows you to run Linux software almost seamlessly inside Windows. That’s certainly less of a hassle than dual-booting Windows and Linux, which is what I always used to do. But virtual machines suck up resources and can have serious performance issues. So I decided to try doing everything natively on Windows, and, to my surprise, it was pretty great.
The Command Line
Developers use the command line all the time, but Windows never had a great terminal application. Mac OS and Linux both had plenty. But the advent of PowerShell brought a powerful command line shell with a robust scripting language. And terminals like Windows Terminal and Hyper provide customizable environments in which to use it.
If you’ve spent any time working with the command line, you know that it’s worth setting it up exactly the way you like. Using a tool like Oh My Posh creates a themeable and powerful command line environment on Windows. Add a Nerd Font like Caskaydia Cove or Meslo and the Terminal-Icons PowerShell Module, and you have a great-looking, feature-filled terminal.
A few additional tips. First, you’ll probably want to add an exception to your antivirus scanner for the Oh My Posh executable. I noticed that it would sometimes take a really long time—upwards of 20 seconds—for my terminal to intiate. That was because Bitdefender was running a scan on the executable every time the shell launched. Adding an exception lowered that to under a second. Next, PowerShell typically displays the PowerShell version when it launches and then lets you know how long it took to load your profile. I didn’t like that spamming my terminal. Fortunately, adding the -nologo flag to the PowerShell command for your terminal will quiet those lines. Since I"m using Hyper, I just added ’-nologo’ to the shellArgs variable in my Hyper settings file.
Next you need to install the development stacks needed for your project. I primarily use the LAMP and JAM stacks. Installing them and keeping them updated on Windows used to be pain, if it was possible at all. Now, tools like Chocolatey and Scoop allow for easy installation and updating of Windows software, and most development environments and platforms provide the ability to install and update software on Windows easily. For starters, Chocolatey makes it easy to install and update Git and the GitHub command line.
For Node, I use Node Version Switcher, installed via Chocolatey. The frameworks I use are also easy to install: Gatsby’s command line interface is a Node module, while Hugo is also provided via Chocolatey. Finally, there’s a convenient LAMP package for Windows.
Then you’ll need somewhere to actually write your code. It’s straightforward enough to install Vim through Chocolatey so you’ll have access to a command line text editor. But for a true development environment, it’s hard to beat Visual Studio Code. It’s powerful, extremely customizable, and offers a huge library of extensions that makes coding in almost any programming language a great experience.
Everything I need for software and web development is available on Windows. It’s easy to install, use, and maintain. As much as I’ve loved using Linux, the convenience of developing on Windows has made the hassle of dual-booting or running a virtual machine totally unnecessary. I was impressed with WSL when I started using it, but when I ran into performance issues, I decided to give native Windows a shot. So far, I haven’t looked back.