Why I Choose Windows for Software Development
Software developers often use a Mac. Linux is used as a workstation much less frequently, while Windows seems to be frowned upon. It appears to be used only when working within the Microsoft ecosystem or when one is “forced” to do so. However, I use Windows out of conviction because, for me, it offers the best mix of everything.
Unless you’re developing specifically for macOS or iOS, you’re rarely tied to a particular operating system. Most development environments are available everywhere, but the tooling can vary significantly. A plain Windows installation can indeed be disappointing in this regard, which is why a few adjustments are worthwhile.
I also enjoy working on the command line. Not for actual programming, but for various utility tasks. After spending some time with PowerShell, my favorite is still the good old Command Prompt (CMD). In combination with Clink, it lacks almost nothing. To avoid missing the most common Unix tools, I’ve also installed uutils-coreutils.
When it comes to installing tools and programs, WinGet is now my go-to choice. It’s a powerful package manager for Windows that has become my favorite for its simplicity and efficiency. While tools like Scoop or Chocolatey could still be options, they’re no longer necessary for me. Scoop, for instance, is a great alternative and feels like a first-class replacement for package managers on macOS and Linux, but its search function can be quite slow. If you do use Scoop, I’d recommend pairing it with scoop-search for faster searches.
If I ever need a real Linux environment, there’s no need for a cumbersome dual-boot setup. WSL2 covers this requirement perfectly. Even the most common IDEs on Windows can directly use WSL2 as a development environment for tooling.
For build tools, make
is still often used, which is no fun on Windows. If you don’t want to rely on WSL2 for this
functionality, Task is a great alternative. I’ve been using it for a long time for various
tasks. It also resolves dependencies effortlessly and can determine whether a step is even necessary for the current
execution.
For classic Bash scripting, I either use small Go tools or, more recently, Bun. The latter retains the feel of scripting while offering all the relevant features across platforms. Bun even provides an abstraction for the most important shell functions.
For small adjustments—such as tweaking configs—I like to work directly in the shell. Helix provides an ideal environment for this, and it’s also usable across all systems. Out of the box, it functions as a full-fledged IDE. Only the relevant language servers need to be installed.
When it comes to backups, I don’t rely on operating system-specific solutions. The combination of rclone and restic allows me to easily create encrypted backups. A wide range of storage platforms is integrated, and where that’s not enough, rclone comes into play.
With these adjustments, I build an environment that can ultimately be transformed for use on various operating systems. This way, working under WSL2 or even on a Mac feels very similar to my Windows setup, requiring much less mental switching between tools. Above all, it creates consistency and fosters flexibility in my daily work.