Tools for Developing Software on Windows

I use a Windows machine both at home and at work. I'm one of the few at my office who do; it often elicits some level of good-natured mockery from my coworkers. The joke's on them, in my view, because they are all using Mac OS X, but somehow they fail to see it that way.

At any rate one thing I have noticed while working on Windows is that despite there being a rich ecosystem of free developer tools, few seem to be aware of them. I aim to (feebly) attempt to rectify that with this list of tools that I use. Put together, I think they actually make development on Windows considerably nicer than on the POSIX/UNIX systems because of the benefits of having a nice GUI. So here they are:

1. Process Hacker

Process Hacker is an alternative to the built-in Windows Task Manager. Many Windows users already know about Process Explorer from Sysinternals but Process Hacker takes the great ideas from Process Explorer, makes the UI a bit more user-friendly, and adds one particularly invaluable feature: the ability to easily terminate applications even when blocked by group policy. I will leave the implications of this function, particularly on a corporate workstation, to your imagination. :)

2. Notepad++

Notepad++ is, in my opinion the best text editor available for Windows. Unlike Atom, it doesn't take a running Chromium instance and 100MB of RAM, it starts instantly and has great syntax highlighting support. I often use it for jotting down quick notes, since it persists unsaved files between sessions.

3. PuTTY

PuTTY is the de facto standard Windows SSH client. Some people prefer SSH Tectia but I find this difficult to understand. One annoying thing about PuTTY: It stores your user settings in the registry, so it can be annoying to move them between computers. Here's a trick: run the following command in PowerShell to export your settings:

reg export HKCU\Software\SimonTatham ([Environment]::GetFolderPath("Desktop") + "\putty.reg")

To reimport them simply run the registry file by double-clicking it. See this StackOverflow answer for more details.

4. WinSCP

WinSCP is an excellent SCP client with a Norton Commander-style interface. It also imports your PuTTY sessions and settings.

Here's my favorite WinSCP trick: you can actually use it to edit files on the remote computer, on your local computer, using your favorite text editor.

To do this, click Tools->Preferences in the startup dialog, and click Editors. Click Add..., select the "external editor" radio button and then navigate to the .exe of your favorite editor in the Browse... dialog. Click OK. Then select it in the list and click "Up" until it's at the top.

Now, when you right-click a file on the remote computer, you can select "edit" and it will open in your editor. WinSCP creates a temporary file on your local computer and watches the filesystem for "save" events. When they occur it automatically syncs it with the remote file, SCP'ing it over when changes are saved. Pretty cool! I use this a lot when I want to edit files on remote machines and don't want to deal with the round-trip latency of running a text editor in an SSH window, or if I just want to use Windows tools to edit files on a UNIX machine.

5. 7-Zip

7-Zip is a free and open source file archiver for Windows. Its GUI is not particularly great, but it supports an excellent range of compression algorithms, including gzip, bzip2, and its own 7z format, as well as archive formats such as tarballs. It's not brilliant but it gets the job done.

6. Paint.NET

Paint.NET is an absolutely brilliant image editor. It is nowhere close to being as powerful as Adobe Photoshop, but if you just need the basics, such as the lasso tool, magic wand, and layers, it's fantastic. Its UI is extremely user friendly, it has a great learning curve, and yet it's got some surprisingly powerful tools. It's a huge step up over the built-in Paint utility that comes with Windows.

7. TCPView

A crowd favorite from Sysinternals, TCPView provides a view of all of the open ports on your computer and which processes are responsible for them. You can perform basic process management tasks from its UI as well: right click on a process and you can tell it to close the connection or kill the process, among other things. This is extremely handy when you're trying to listen on a port that some other program is already using. Despite its name it will show you both UDP and TCP connections.

8. ConEMU

The built-in Windows terminal emulator (cmd.exe) has always been terrible. It got slightly better in Windows 10 when they made it possible to resize horizontally without going into a funky menu. Thanks Microsoft, it only took you multiple decades to puzzle that one out! Anyway despite this improvement it's still pretty bad, lacking tab support and other standard features. Luckily, ConEMU comes to the rescue by being one of the nicest terminal emulators on any platform, period. You can have any type of shell, too: It supports cmd, PowerShell, Bash on Windows, git bash, and Cygwin. I highly recommend it. It's one of the first things I install on a new Windows machine. It makes using the Windows command line actually fairly pleasant, instead of like pulling teeth.