The Absolute State of Development on Windows: 2020 is Hindsight Edition

Hello gorgeous! Yes, you, I’m talking to you :wink:

This thread is to track the state of development on Windows in the year 2020. This isn’t a “developments within Windows” thread, although some of that will be included here. No, this is a “what’s it like to develop software in a Windows environment?” type thread. If you’ve ever asked yourself:

  • Can I use Windows for programming?
  • I want to use Windows for webdev, can I?
  • Is it possible to build an OS on Windows?
  • Should I buy a Mac or use my Windows computer for programming?
  • Will Windows get me through my Computer Science degree?

Well, then, this thread is for you!

Some of this is going to be rehashed from the old thread: Developing on Windows in 2019. There is also a deeper discussion into the Windows Terminal (not PowerShell, not Command Prompt), that is available at Man do i love the new Windows Terminal!. Now, let’s dig in.

Despite the abundance of Linux tools available on Windows, it’s entirely possible to do your software development 100% native on Windows. Something like Golang and Node.js is infinitely easier than something like C or C++, but it is possible.

Visual Studio: Community editions are free for individual and small team use. You are given an entire suite of tools, including a top notch debugger, compiler, text editor, and linter. There are also tools for container support, version control, release management, and much more. Compared to something like Code::Blocks or even CLion, Visual Studio Community is hard to beat.

If Visual Studio Community is too much for you to handle, then definitely consider Visual Studio Code. VS Code is a lightweight text editor that is highly extensible. I have PowerShell, SSH, Golang, Angular, Node.js, C#, C++, Python, Ruby, Puppet, Chef, Docker, and Terraform extensions that make working with those tools a dream. From simple intellisense to a full range of support (right click to create a new Angular component, for example) is available with these extensions. I use the September Steel color scheme :wink: Finally found something to replace Nord.

Windows Terminal has been an incredible experience. I’ve used a lot of terminals across a lot of operating systems, and this one is damn near flawless. It’s still in preview mode, by the way. iTerm2, Terminator, Termite, Gnome-Terminal, Konsole… Windows Terminal stands the test of time. It’s GPU powered and has emoji (:stuck_out_tongue_winking_eye: :smiley: :yay:) support!!! OMG :exploding_head:. Out of the box it supports PowerShell, PowerShell Core, WSL (all versions), and Azure Shell. Minimal editing of the settings had CMDer working. While I’m here, I may as well give a shoutout to PowerShell. Native ssh (LibreSSL, btw), and full integration with development tools in your environment PATH: go, node, npm, git, aws, make – Really only limited by your imagination at this point.

Docker is all the RAGE these days. It is receiving updates constantly to the Windows platform. Largely, these contributions come from Microsoft, but Docker development itself is targeted towards the cross platform. Their releases from January 2020 include a significant update, including experimental WSL version 2 backends and a Kubernetes update. If your development efforts are going to be released to different architectures, you might want to look into Docker for development. Rather than set up and configure a build server or a database, there is likely a container readily available for you to develop and test against. Deploying containers for production environments is outside the scope of this writing. Always use caution when deploying to production.

If you are a developer that uses Windows as more of a terminal or console, then there are still a range of tools that suit your needs. I mentioned earlier the SSH extension for VS Code. This allows authentication via SSH with the editor, and you can access and edit files or source code within VS Code. All of your extensions intact as well!

MobaXTerm is hands down my favorite multi-environment management system. I can’t tell you how often I’ve laughed maniacally at my co-workers when I see them arranging RDP windows around their PuTTY sessions. I’ve had ten to twenty RDP tabs open, WSL open on two tabs, and a few remote SSH sessions going without missing a beat. Note, to get that many sessions to SAVE you’ll need a pro license. You can maintain the active connections, but the free license will only remember up to 10 or so (can’t recall).

All right, all right, calm down. I hear the cries of help. “My job is forcing me to use Windows, but I NEEEEED Linux!!!” – Enter WSL. The Windows Subsystem for Linux brings a live Linux kernel into your Windows desktop. You have all of the range of commands at your disposal. Every plugin I’ve installed from Vim Awesome has worked as intended. The annoying Windows bell can be disabled via /etc/inputrc and editing your ~/.vimrc file for no bell settings. WSL version two, which has a significant performance upgrade with filesystem I/O is going to be released this Summer, likely June or July. Right now you can install it if you’re on the Windows Insider image. However, I’ve compiled C++ and ran some of their more recent functions (C++17 execution and parallelism algorithms) and the difference between WSL and raw Ubuntu or raw Arch was negligible. A few seconds, maybe, at most.

WSLtty is often touted as a better console for WSL than WSL itself lol. I admit, I find myself using it more than I use WSL in the Windows Terminal. Might be out of habit vs benefits, I don’t know. It is nice though.

Brief list of some of the features WSLtty offers

Terminal display features

Xterm-compatible terminal emulation, coverage of DEC VT300 series terminal features and more.
256 colours and True-Colour support.
Comprehensive character encoding support, including UTF-8 and wide character display.
Rich character attributes support, including italic, doubly underline, overline, strikeout, rapid blinking.
Alternative fonts: simultaneous display of multiple fonts.
SIXEL graphics display support.
Emoji support.

Terminal input and interaction features

Character composition with full Unicode support, using dead keys and Compose key.
Windows IME support.
Support for all relevant mouse modes, including pixel-grained DEC locator mode.
Easy copy & paste.
Drag & drop of text, files and folders.
Ability to open files and URLs with Ctrl+click.
Small program size and quick scrolling.

Window handling features and desktop integration

Colour schemes / Theme file support.
Virtual Tabs / session switcher and launcher.
Taskbar tasks (“jump list”) configuration.
Flexible fullscreen, fullsize and border options.
Screen and scrollback buffer search.
User interface language localization support.
Window transparency, including glass effect.
Multiple monitor support, changing DPI support.

You also have your choice of hypervisors on Windows: Hyper-V, VMware Workstation, and VirtualBox. Any other version of Windows you want to run or if you need other operating systems, I get it. I have a virtual lab that emulates one of the production stacks at work: Proxies, app servers, web servers, databases, Elasticsearch, and caching servers. It’s hard to do that with just one OS or Docker.

If you’re looking to start programming and have no idea what to do with the tools in this thread, but don’t mind Windows, you have your pick with that too. C# is cross platform these days, but you can have a grand old time developing with it on Windows. PowerShell is native, and is a phenomenal language for automating tasks or interfacing with Windows. Java, Python, Ruby, and Node.js are just a click away. You can use chocolatey as a package manager, too. No clicks necessary to install software. They have a huge package repository that has pretty much everything. It’s updated and tested regularly.

I plan on updating this thread as I come across new things, experiment with other or updated technology, encounter gotchas and bad releases, as well as share some projects over time. Feel free to share your workflow, favorite tools, projects, and experiments as well.

13 Likes

Shieet I need to dig through all this. Nice one :+1:

6 Likes

oh, stop it you (blushes)

If you just typed “Yes to all of them” would also be a valid post.

Best IDE I’ve come across so far.

Comes in the bundle if you choose the .msi installer for nodejs

3 Likes

Oh no way, I had no idea. I usually do chocolatey first and then choco install nodejs golang python3 ... -y lol

2 Likes

I work Windows shop that just so happens to have anything critical on a RHEL server… I had gotten into PowerShell but this piques my interest. If I can interact with all of my *nix machines through this terminal with SSH… that would leaps and bound better than having to use jump boxes.

2 Likes

Similar situation to you. The new Windows Terminal offers customizations where you can split the screens in a tmux/i3wm fashion. Alt + Vim navigation keys to change shell. You can also move the mouse to another window in i3 fashion

Multiple ssh sessions in the same window. Pretty handy.

5 Likes

Don’t be so quick to bin jump boxes. They should really be used as Bastion hosts to control access to servers on a subnet. You would of course be able to use SSH on your device to route through the Bastion host.

I’ve dealt with two nasty cyber attacks now that could have had a much reduced blast radius if Bastion hosts had been used by the admins instead of allowing inbound ports 22 and 3389 to any device on the network :slight_smile:

1 Like

We have a few of these for our DBs that don’t have internet. The bastion NATs/forwards traffic to the database servers.

10/10 would struggle through network config again

1 Like

I agree with you. We just have too many and we are on a completely isolated (the different networks exist only in the building) networks. We are air gapped from the outside world.

2 Likes

Fucking 1337 my man

2 Likes

This topic deserves a bookmark. Great work!

3 Likes

This is a good post most people dont realize how versitil Windows is because of all the hate. But theirs a reason it is still around. Their shouldn’t be much if anything that can’t be done in Windows. And Microsoft has worked surprisingly hard at making development tools integrated and available on windows I mean they are a software company after all.

Im not a developer but I have taken some classes and personally I prefer C++. I haven’t played with C# but I hate Java…

I have used Windows since 95 and even played with the older versions and even I am surprised what developers get with Windows now days.

2 Likes

Honestly, Satya Nadela was the best thing that could have ever happened to Microsoft. I swore off MS Windows in 2001 but have always had to work with it. My last job and my current job are with predominantly Windows shops. Our critical stuff still works with *nix, but our software from the vendor is all MS Windows .NET/C# stuff.

MS Windows will probably never be my main development environment but you use the right tools for the job. If they can provide me the power tools I use in the GNU/*BSD/Linux/Systemd world, then I ain’t mad at it, but I will also never forget :face_with_raised_eyebrow:.

2 Likes

Anecdotally, I am hearing and reading this sentiment a lot. There are blogs all over the place about people returning to Windows. Either giving them an nth chance or due to frustrations with MacOS or Linux platforms.

This is the best. Argument. Slash. Stance. Ever.

I know of two hardcore full on *BSD guys that rely on Windows due to communication, editing, and publishing software.

Tons of Linux folks are on MacOS because they need enterprise/mainstream/proprietary tools for their jobs. It happens. We deal with it and move on.

I would much rather have coworkers proficient and productive in several workflows than sit and bitch about how awful Windows/MacOS is.

1 Like

Praise be to <insert deity, non-deity, idol, and etc here>!

1 Like

Oh snap, sorry, I actually bumped this to show Cmder in Windows Terminal lol

image

image

I like Cmder but I also like GPU powered terminals :wink: Best of both worlds, yeah?

Settings for Windows Terminal:

            {
                "guid": "{5b4ef9a8-4506-4ac9-930a-5eb1fd0ebf20}",
                "name": "Cmder",
		"colorScheme": "One Half Dark",
                "commandline": "cmd.exe /k C:\\tools\\Cmder\\vendor\\init.bat",
		"startingDirectory": "%USERPROFILE%",
                "icon" : " C:\\tools\\Cmder\\icons\\cmder.ico",
                "hidden": false
            },
1 Like

interesting stuff i did not know for WSL2 and VScode.
3 Likes

Does anyone have resource(s) with a good overview of logging and/or error handling in Powershell?

1 Like

Try,Catch,Finally is :ok_hand:

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_try_catch_finally?view=powershell-7

You’ll have to get more specific with logging, though. Do you mean like Get-EventLog -LogName Security -Newest 100 or do you mean logging applications with PowerShell scripts? Or how to cat and tail with PS?

1 Like

Thanks, that blog is a bit more digestible than the docs.

As for logging, I mean logging in terms of writing logs from a script, supporting -verbose, best practices for what/how to report.

1 Like