It's my go to machine, I also own a MBP m1 and an m3 max with 48 GBs, but my Windows desktop is by far the most capable machine of the three (a notebook cpu and ram, even the m3 max are still notebook hardware) and the OS I like the most for programming.
I program mostly in WSL2, so essentially in Ubuntu, but the terminal lives as a Windows executable.
MacOS is really a subpar development experience to me and it's plagued with issues, from very subpar docker support and performance to it's far from flawless experience on many languages I use regularly (e.g. Haskell) that are far from the Linux standard.
I love it as a notebook though, great hardware and battery life, but I'm at home most of the days.
> MacOS is really a subpar development experience to me and it's plagued with issues, from very subpar docker support and performance to it's far from flawless experience on many languages I use regularly (e.g. Haskell) that are far from the Linux standard.
Aside from that, the window management in macOS leaves a lot to be desired still without third party tools, and even with them it's not fantastic.
Don't get me wrong, I love my macbook pro, but bugs & privacy issues aside with Windows, I'd prefer to just use it on my macbook's hardware. I've been full time on macOS since the M1 air and I still can't grok the app v. window model macOS uses. I'm sure it made sense when workflows were centered around documents, but they aren't anymore, and over half the apps are just browsers. I prefer each instance to be standalone like Windows and Linux do it.
Then again, I'm not a dev, I'm an IT manager. My day to day involves multiple browser windows each with many tabs, spreadsheets, meetings, & notetaking on my iPad, etc. macOS's workflow of "focus on one or two "apps" at a time" doesn't work for me. I'll stand by my statement that Windows is still the king of "general business productivity."
You have to pay me to use Windows and Microsoft products.
There are so many alternatives that have higher standards. I keep having regressive issues with Visual Studio. The OS quality has been continually degrading. Microsoft is even pushing to have a @microsoft.com account on their Windows embedded IoT variants. There should be no reason an embedded OS requires an online account nor that XBox and other useless features baked in.
I wont event touch how bad the User Experience has become in their Office products and how much of their products have inconsistent key combinations. Ctrl+F ...
I can imagine your pain points, albeit luckily they do not overlap with my use case.
I'm not sure about the alternatives with higher standards though, and I say it as someone who operates two MacOS machines, a windows and an Omarchy one
They all have pros and cons, it's perfectly fine if we have different experiences.
Look at a registry with Microsoft vs Gnome. Microsoft is a kludge of a setup were Gnome is well defined. Microsoft is a guessing game and the wording is often a contradiction. Gnome actually gives descriptions of what the property means and what select settings will do. Microsoft does not even defined the meaning in some document. These properties often have to be reverse engineer.
Microsoft tried competing against Google's Chromebooks with a low cost Surface laptop. These laptops had such low hard drive space that they pushed a Windows update that disabled the auto backup of the registry. The update affected ALL Windows installations and not just Microsoft's low quality hardware. A corrupt registry without a backup requires Windows to always be reinstalled.
Microsoft's design for localization is to push the content into strings resource with-in a DLL. This requires the application to be re-compiled for any changes to the translations. A simple text file disconnected from the application binary per language is better off. This allows for the client to modify the translations without the need of the developer. Example would be having the application install fr_FR in AppData and the user being able to edit the translations or create a custom one and store it in the User's AppData with their cultural changes. This allows for full customization without needing direct access to the developer or source of the application.
Applying localization to .NET changes how the the data convert logic works. Means that a string conversion of "1.5" will fail and throw exceptions if the localization is set to using a language where "," is the separator in a decimal system. It gets worse when the application communicates with a 3rd party application and the data types must be constant for one localization. Quality would be to allow to only present the localization while storing the and processing content in a standard language independent of the user's selected.
Microsoft does not properly document the configuration settings for their configuration files. If they do, it quite rare. I will search the Internet for a setting in their solution file (.sln) and nothing will come up. Or it might but point to a Git comment with the setting and no meaning what that variable will do. BSD and Linux applications will create MAN pages for the application and a MAN page for the configuration file contents and provide the user with meaning.
Look at Windows vs Gnome. Press the Windows / Meta key and type _shutdown_ and press enter. Windows will open Edge, not your default Web Browser, and provide an Internet search about shutdown. Gnome will bring up a dialog with a 60 second counter to confirm you want to shutdown the computer. Gnome is quality user experience while Windows rejects the user's request to use Chrome instead of Edge and provides a search result instead of an action this is common on all computers.
Microsoft segregates applications into two groups console or GUI. They do not allow for an application to be both. A quality OS does not segregate and allows application arguments to dictate if the application should run in console / command line mode or as a GUI. Even if you try to hack a GUI into a custom made console in Windows, the STDIN and STDOUT become broken.This is why Windows applications need more code and extra work for logging.
High standards it to provide software that is well documented and uses simple means to configure the software while rejecting the attempt to force the user to use YOUR application and accept that the user's default applications should be used instead.
As for the rest I don't really author code for Windows machines, I write code for unix machines via WSL 2.
I prefer Windows as a desktop machine over linux for several reasons: better window management, personal preferences, compatibility with both worlds (windows and linux), way more software available, etc.
As I said in the previous post: I'm not here to convince you that Windows is a better development machine.
And my background is cross-platform development from desktop to embedded to full stack to back-end and front-end.
I learned that even though you can write an application in _WPF_ you should still learn other frameworks. Often people stick with what they know versus learning what they don't. The tooling and framework to use for a solution should be around the problem and not what you know. A hammer drives a screw but is also the wrong tool to use for the solution. I have learned new programing languages and frameworks because they fit the problem better than what I already knew.
Here are the images of how Windows 11 the shutdown issue:
Even typing _shutdown pc_ and pressing enter did nothing except closing the Start Menu.
One of my greats annoyances with Windows is that Microsoft Anti-Virus will lock the file for scanning. This means I have there is a chance of having to re-run an InnoSetup script compile because Windows is canning a XML file. Happens quite frequently with GIT repository management. Waiting and having to re-run tools because of this is a waste of time.
Desktop Environments are like a person choosing which Bourbon they like. For me the best Bourbon, beer, wine ... are the ones I have not tried. Some people stick with Jack Daniels their whole lives.
> Microsoft is a kludge of a setup were Gnome is well defined.
I also thought that for a long time, but you should open the Group Policy Editor one time. Each property has some paragraphs for description. When you look at the interface and the structure, it looks like the Registry with pretty labels.
> Windows will open Edge, not your default Web Browser, and provide an Internet search about shutdown.
You are holding it wrong! Type Super-R, this won't open the web search. (This is broken for all other programs, since no program puts itself in the PATH on Windows.)
Yes Windows / Meta + R = run dialog. A person needs to know the exact command name and parameters for _shutdown.exe_ to use it. DE like Gnome removes the need to know what actual command is being run to perform; shutdown, restart, logout, and lock screen.
Group Policy is only a small percentage of the Register. _gpedit.msc_ is only useful for manual local computer management or mass deployment for an Active Directory environment. It does not allow for creating a configuration file. In order to apply policy settings direct registry keys must be manipulated, extract, and applied to an installer application. This means referencing the spreadsheet that maps GP setting to Registry key and value. [0] Microsoft seems to dislike configuration files and prefer the Registry. Configuration files are easier to backup, share, and edit with a simple text editor. Registry needs an special tooling.
Microsoft has inconsistencies of how to store values in the registry when it comes to lists. Some times it is a value key per item; _item 0_ = _..._, _item 1_ = _..._. It might be a delimited separator like a space used to store DNS addresses assigned to a NIC. Worst is a more complex binary format that requires reverse engineering, such as the Internet Explorer compatibility URL list.
FYI, Windows != Meta key. Meta is commonly labelled Alt on IBM/Windows keyboards. The vendor neutral name for the Windows/(Open) Apple/Command key is 'Super'.
As an SRE I did most of my work from windows as almost all of my jobs required it (only one provided a working Ubuntu laptop). Mostly used it only for firefox and PuTTY. At home it was W10 + WSL or virtualbox but mostly used it for games initially and then browsing.
BUT as from W11 which I tried for 11 minutes, I switched to Fedora and didn't look back. Everything felt buggy, start menu taking forever, buttons switching places, apps wouldn't start but then randomly would, and of course ads. I know there are debloat scripts around but didn't have the patience, I felt if I'm going to try a new OS I might as well try Linux before buying a Windows license.
Now Linux has its issues, the occasional icon disappears, sometimes shutdown doesn't entirely shut down the machine and I have to power the machine down (electrically from my outlet), sometimes updates don't go through, and of course I miss excel and a couple other things (although I was far from a power user and OnlyOffice fits my needs). But it's still better and with KDE there is almost no config to get a similar "feel" as W10. Amusingly I actually use MORE apps now that I trust installing new stuff more.
That said I would probably pay a premium to dual boot occasionally on a supported Windows OS without bloat, probably it would be my default boot even.
It's my go to machine, I also own a MBP m1 and an m3 max with 48 GBs, but my Windows desktop is by far the most capable machine of the three (a notebook cpu and ram, even the m3 max are still notebook hardware) and the OS I like the most for programming.
I program mostly in WSL2, so essentially in Ubuntu, but the terminal lives as a Windows executable.
MacOS is really a subpar development experience to me and it's plagued with issues, from very subpar docker support and performance to it's far from flawless experience on many languages I use regularly (e.g. Haskell) that are far from the Linux standard.
I love it as a notebook though, great hardware and battery life, but I'm at home most of the days.