> But I'm going to spend the entire time trying to trick Windows into doing Linux things. Mintty for terminal stuff, VMs or the new Ubuntu mode for Linux software, etc.
Windows is not UNIX and that's its strength. Don't try to coerce it into doing Linux things; learn Powershell and Windows concepts instead. I've recently switched development from Linux to Windows and couldn't be happier.
Let me guess... You don't like the path completion?
The only credible complaint I've heard against PowerShell terminal is path completion. I call it credible, because it's an actual behavioral difference with meaningful impact. Myself, I actually prefer the Windows path completion, where it fills the entire path and hitting tab again will cycle through the available options. Nothing drives me crazier than going into a directory generally knowing what I want, typing in a few letters, hit tab, get a subset of the path completed, think about what's there and where I want to go, figure out the next letter I need to type, hit tab again and hope for the best. When in reality there's only a few options that match my original text, and just hitting tab to cycle between them is pretty ergonomic. And shift-tab even cycles in the other direction, for those rare times when there actually is a huge list and you hit tab a little too quickly.
But for those who prefer the other way for some reason, there are projects like PSReadLine:
The PowerShell terminal is also incredibly aesthetically grating. They decided to take the old aliased bitmap font and fixed width window from cmd.exe and layer on a white/yellow/red on blue color scheme.
It sucks out of the box though, which is true of so many things in the Dev experience on Windows. It takes so long to tweak every little thing and download every missing utility.
True, but terrible defaults are terrible defaults. And when I find myself using someone else's machine, rather than the comforting glow of a familiar terminal I'm thrust back into the harsh reality of Microsoft's poor design decisions :/.
The best approach I've seen isn't to change defaults, but rather to make porting customization painless. And that's definitely something that can almost always be improved. I've actually been recently impressed by Samsung in this regard with their "Smart Switch" phone app. Super simple to transfer a lot of the stuff you care about from one phone to another, including sourcing from iOS and even Windows Mobile!
There are many other options available with 'compinstall', but I set this up years ago and don't remember what I needed to choose. It's probably also available in Bash nowadays.
> To me Powershell is OK but if you go in expecting it to behave like bash you will be in for a lot of pain.
Completely agree. PowerShell is an object pipeline, which means that its axioms are different than a text pipeline. If you come in trying to treat it like a text pipeline, you're not going to find the tools you expect.
> The most annoying issue I have run into - try to delete a node_modules folder with powershell. It's painful.
I was curious, so I just did the following in PowerShell v5:
And does the existence of Wine prove that Linux is inferior? It's just nice to have a way to run software written for other systems. Doesn't mean you think that system is superior.
I don't think they imply that windows is Unix (of which is most definitely is not), but rather that one of its original design goals still works. People forget that the original NT was designed to be agnostic to the user-space API.
And how does one exactly do that? Because I once tried to learn what a "home group" was and to my surprise it wasn't defined in precise terms anywhere. Not to mention lower-level stuff such as the init system.
> Not to mention lower-level stuff such as the init system.
The init system on Windows is robust enough that 99.999% of users never have to consider it. There is a UI to control what runs at startup, and that suffices for most things.
Windows has services of course, and there is a dependency graph built up of how they initialize, and for a huge % of people developing services, this also doesn't matter. Set what dependencies you have, if your service can be loaded on demand or if it has to be always on, and have at it.
More complicated services do require work, at which point documentation can be dug into.
> Because I once tried to learn what a "home group" was
Bing actually provides a great answer box on this. (search term: windows home group) tl;dr a group of PCs on a LAN that share out file folders (video, music, etc) and printers. Each computer can choose what to share. A PW is requested upon joining a home group. The first non-ad result on Google also explains it pretty well. :)
Here's the first Google result for "Windows homegroup" https://support.microsoft.com/en-us/help/17145/windows-homeg... . Microsoft is famous for its meticulous documentation compared to other closed sourced systems and is often even better than open source systems where developers will not document and instead tell you to just read the code.
Well, I was careful to write cross-platform C++ code from the start, meticulously isolating the few platform-specific parts.
Yes, it's a lot to learn at start, but Powershell is rather user-friendly, so it helps. Yes, I work slower now than in Linux, but I'm quickly picking up the pace and it's paying off. Plus, there are many hands-on howtos for specific tasks I need to accomplish.
Windows is not UNIX and that's its strength. Don't try to coerce it into doing Linux things; learn Powershell and Windows concepts instead. I've recently switched development from Linux to Windows and couldn't be happier.