Welcome back to Windows, developers


I like Macs and iPhones as much as the next guy. With the exception of pregnant iPhone battery packs, the charging mechanisms for the Apple Pencil and second gen Magic Mouse, and, of course, all of iTunes, almost everything Apple produces is phenomenally well designed. In my opinion, no other company in the history of computing has made a better case for Alan Kay’s famous quote:

People who are really serious about software should make their own hardware.

But I have an equal amount of appreciation for the diversity one is more likely to encounter with Android and Windows platforms. I really like iPhones, Macs, and Apple Watches, but I also like mixing things up. I like my Asus monitor, Filco mechanical keyboard, Razer gaming mouse, GeForce video card, Intel RealSense webcam, and my Garmin Fenix watch. After room-scale VR commandeered four USB ports on the back of my PC, I ordered a five-port USB 3.0 expansion card for $15 which took me ten minutes to install. When I subsequently ran out of disk space downloading VR games, I ordered a new Samsung SSD from Amazon, had it delivered that day, cracked open my PC again, and doubled my storage capacity (and RAM, while I was at it). I grew up cobbling together and upgrading PCs, and it has only gotten more fun and more interesting as hardware has gotten more powerful and diverse.

Unfortunately, I haven’t been able to use Windows regularly for several years now. As a web developer, and then an Engineering and Product Manager, it was far easier for my team to standardize on Macs. Most of the command line tools, libraries, and utilities that web developers depend on are optimized for Mac and Linux, and while Windows has its version of the command prompt (and PowerShell), I have years of knowledge and experience invested in the Linux command line experience. (Cygwin was never a great alternative because most of the packages I needed were out of date.)

But with Windows Subsystem for Linux and Ubuntu on Windows, all that has changed. The combination of the two allows you to very easily run a full version of Ubuntu right alongside Windows, and even access the Windows file system.

I recently put Ubuntu on Windows to the ultimate test by trying to build and run a very complex web application my team has working on for the last couple of years. In the process, I installed Git, Node, npm, nvm, and, frankly, an embarrassing number of module dependencies (see How it feels to learn JavaScript in 2016). I also did other common Linux tasks like modifying the hosts file, creating symlinks, writing bash scrips, etc. The first time I tired was about two months ago with the Windows Anniversary Update, and I only got about halfway through before I ran into errors. But this week, I tried with the Windows Creators Update, and everything worked flawlessly.

Finally, for the first time in my nineteen-year software career, I can use the same computer for web development that I use for Microsoft Office and gaming (and more recently, VR). I can update it when I need to, fix it when I screw something up, and every few years, build an entirely new computer from scratch with exactly the components and capabilities I want.

That doesn’t mean I’m done with Apple. I still have a MacBook Pro and an iPhone sitting right here beside me, and I enjoy using them as much as I do my Windows machine and my Pixel XL. But now I can choose which platform I want to use for any given task, and when it comes to technology, choice is every bit as important to me as design.