This post is about how I use Windows as a professional software engineer: which Windows settings I customize and which tools I use to make my daily work as pleasant and productive as possible.
Performance and usability enhancements
Some of these settings are particularly well suited to virtual machines; use common sense to judge whether it is safe (enough) to turn off these features on real machines. In the embedded development and hardware integration work that I do, I often find myself on networks that are already restricted enough by firewalls and anti-virus measures that having these options on only gets in the way.
Developer mode โ handle with care:
- turn off UAC (see the .reg file below)
- turn off Windows Defender (see the .reg file below)
- turn off the firewall: Win+S, Firewall, ‘Turn Windows Defender Firewall on or off’, private โ off, public โ off
After the firewall is turned off, you will get regular reminders about it; I have not found out how to turn these off yet. There is a DisableNotificationCenter key in the patch below, but it reportedly does not work in all cases. Alternatively, you can go to Control Panel\System and Security\Security and Maintenance, choose Change Security and Maintenance settings and uncheck the boxes there. This also doesn’t seem to work for everybody, but maybe you’ll get lucky ๐ For now I just dismiss the occasional message; I don’t even see it anymore, I just close it automatically.
Paranoid software engineers
As a software engineer, part of my job is to be paranoid: if something changed on my system, I have to assume I need to re-test ALL my assumptions. This means that if an update is installed during a debug session, I can basically start over. That is not acceptable to me, so I turn off updates during debug sessions. Win Update Stop is a handy tool to turn updates off and on again.
Windows 10 settings and preferences
The following settings are my personal defaults.
Responsiveness improvements / low-latency HMI:
- turn off UAC
- turn off Windows Defender
- lower the priority of
cl.exeto keep the machine responsive - allow all PowerShell scripts
- turn off sliding, animations and transparency
- show all tray icons
Pleasant to work with:
- keep shadows under windows
- keep font smoothing
Productivity:
- show all file extensions
- write minidumps to
c:\crashdumpswhen any program crashes - disable phoning home to Microsoft when any program crashes
And here is all of it packed into one registry patch.
Further optimization
There are also manual steps you can take to improve, for example, startup time or overall speed:
- If you are not using an SSD, getting one is by far the best investment you can make for productivity and general speed-up of your PC.
- Go to Settings โ Apps โ Startup and disable all programs you don’t use regularly.
- Set the power options to ‘High performance’: paste
Control Panel\Hardware and Sound\Power Optionsinto Explorer and select ‘High performance’. - If you are on a laptop, connect to a wired network if you have the option. With all the phoning home and update checking some applications do, this can really improve the response and startup times of applications.
- Turn off Windows Search. I don’t recommend this except on build servers; I have experienced bad side effects and malfunctions in Outlook and other Microsoft applications. Paste
Control Panel\System and Security\Administrative Tools\services.lnkinto Explorer, find ‘Windows Search’ and set it to ‘Disabled’.
Tools
Aside from Windows settings, there are tools that can make your developer life easier. Let’s start with installing them. I regularly reinstall my whole system, every few months or so, and manually installing and updating all tools to the latest version can be a hassle. Fortunately, Chocolatey can install lots of things completely unattended:
- First, run this script as administrator to install Chocolatey itself: 1_install_chocolatey_as_admin.bat
- Then open a new administrator command prompt and run update_packages.bat
The contents of the packages script are just an example; customize it to your wishes and save it for next time.
Tooling, roughly in order of awesome
- FileLocator Lite can replace Ctrl+F: it’s super fast, can search file contents and supports regular expressions.
- GNU on Windows: 100+ Unix tools for Windows. Indispensable: grep, wc, find, less, tail, tar, nano, etc. just work.
- PuTTY, my gateway to Linux systems, serial ports, raw sockets, you name it.
- DebugView++: collect, view and filter your application logs from HTTP, UDP/TCP sockets, files, you name it. Just drag, drop and filter.
- Chocolatey, so nice I had to mention it twice.
- LockHunter, a foolproof file unlocker.
More bread-and-butter tools
- CCleaner is really useful for removing lots of unused stuff, clearing caches, removing broken registrations, etc.
- Defraggler to defragment hard disks (yes, it’s still a thing, but only on large non-SSD disks with lots of smallish, ~1โ2 MB files).
- Notepad++ (Settings โ Preferences โ Backup โ Remember current session โ disable)
- Free Hex Editor Neo
- UltraEdit (paid; I’ve been a user for 20 years and it’s simply the best, but admittedly Notepad++ and Free Hex Editor Neo cover most use cases)
- Git, need I say more?
- TortoiseGit (set Settings โ Icon Overlays โ Status cache โ None, otherwise it slows down Explorer)
C++-specific tools
- Very Sleepy, a free C/C++ CPU profiler
- Deleaker, a resource profiler for C++, C#, .NET and Delphi
Did I forget anything?
Some external references are in order:
- Scott Hanselman has an extensive tool list (dated 2014); many of the tools still exist and are still awesome.
- NirSoft has so many useful tools, it’s just ridiculous ๐
- Rainmeter: if you really want to customize the look of your desktop, check out this tool.
Do you have a good tweak or tool that is missing from this post? Please let me know, preferably on Twitter, and I will add it (if I like it too ๐
Leave a Reply