I’ve been developing long enough to rememeber when developing on Windows was really the only option. Pre-OS X Macs were pretty useless as dev machines and Linux was still in it’s infancy. My first professional dev workstation was actually a Sun SPARC running OpenSolaris which (believe it or not) had a pretty solid version of Internet Explorer. Writing portable code was a big deal because it needed to work on Windows and be deployable onto Unix which is why Java came along at the exact right time to rescue us. By now you are hopefully convinced that I am kinda old and rambling.
Once OSX came along with BSD Unix under the hood, the game changed. Now we had a real POSIX-compliant system with a really slick desktop experience. In less than 10 years, Apple went from pariah of the serious tech world to the de facto standard developer machine. A really great accomplishment that put Windows on the defensive. I’ve seen a trend, particularly in the node world, to just assume developers can run bash and it’s been a big roadblock for using any hipster technology. It’s gotten to the point that even Microsoft is assuming developers are using Macs.
Sweetening the Deal
Powershell has been around for quite a while and has been getting better and better. It tried to outdo bash by being a complete programming environment from the command line. You can use a lot of POSIX-equivalent commands like
Get-Command instead of
Test-NetConnection instead of using that
telnet hack to see if a remote port is reachable. There’s even Powershell remoting as a substitute for ssh that is much less cumbersome than RDP. It’s super powerful and even command flags are discoverable by tab completion. Unfortunately it hasn’t seen a ton of adoption and that’s probably because it’s a beast to learn and totally incompatible with anything outside Windows. Great product, bad fit.
The greatest power tool for Powershell is definitely chocolatey. Chocolately is the command-line package manager that is Windows answer to homebrew or apt. Just run
choco install maven jdk9 intellij-community -y and you’re off an running. Or maybe
choco install nvm visualstudiocode mongodb -y. And upgrades work in one line as well.
A New Hope
If you’ve seen all that since Windows 7 and you’re not impressed, don’t give up. Microsoft under Satya Nadella have not been sitting on their asses. In fact, they have arguably one-upped Apple with something fantastic for Windows 10 called Windows Subsystem for Linux or WSL for short.
WSL will let you run a shell without a VM that is near fully compatible with multiple flavors of Linux all available from the Windows store. I’m running Ubuntu which I’m sure is the top choice. Now you’ve got real Linux bash ready to roll with access to your Windows file system. You can run
apt or whatever other Linux power tools. You can even cross the Linux/Powershell boundary. Run
notepad.exe from bash to open notepad. Run
wsl curl localhost:8080 from CMD or Powershell to run curl. You can even go back and forth with something like
wsl time ipconfig.exe to see how long it take Windows to show you network adapters. It’s real Nirvana for productivity. Even Micorosoft’s Visual Studio Code supports bash as a default integrated terminal so you can write your isomorphic ESNext component reducers for LTS node and still flip back over to Steam every time you get stuck.
The only thing you really can’t do with Windows is develop for iOS because Apple is still sitting on their throne and aren’t worried. Yet. The tables have turned on who is being open and seeking broad compatibility and who is building a moat of proprietary systems. Apple products are great and all, but I hope the dev community see the value Microsoft is bringing these days and it’s enough to at least nudge Apple toward opening up.