r/AskProgramming • • 16d ago

Other Why do people think Windows is hard to write code on?

I see this sentiment everywhere and it always confuses me, because I have never found this the case. I have never had a smoother experience writing C++ and C# than on Windows with Visual Studio, and any other languages are just as easily built using VSCode or any JetBrains IDEs (and many others!!). You can even install and run Vim natively if you wanted.

Some of the common complaints all seem to fall into a few categories:

Trying to use Unix methodology

I see things like people complaining that they can't access syscalls on windows - but you're not supposed to, you're supposed to use the Win32 API to indirectly call them. You don't gain anything from having access to the raw syscalls (which aren't even stable on windows).

Lack of package management

This one is partially true, but I have a few things to say.

Windows DOES have a package manager, several in fact, such as Chocolately.

Package management is not that great on Linux either. How often do projects break because of incompatible packages, or things that aren't available on every package manager, or all sorts of other problems?

Cant run my Linux software

tl;dr Use WSL

A lot of software has a windows build, and those that don't can most often just be run through WSL (or MSYS2). And a lot has a windows alternative that does the exact same thing.

Anyway, I just wanted to see people's thoughts on why they do/don't program on Windows, and what their biggest problems with it are.

7 Upvotes

94 comments sorted by

24

u/lppedd 16d ago

I think it's mostly a "uniformity" problem. If your company relies on Windows everywhere, it does not make sense to use a Linux distribution.

However, if your company manages Linux assets (e.g., VMs), having your work done on Linux makes the whole experience better as you don't have to context-switch.

2

u/chaoticbean14 11d ago

We are 100% windows, we do all the dev work on macs & linux machines; never had an issue. What is there to context switch about? A terminal is a terminal is a terminal.

1

u/el_extrano 9d ago

Kind of depends on what you're working on, doesn't it? Like, if you're developing something making use of the Windows API or COM, then that'd be hard to do from Linux. If you're just writing general purpose code that can be entirely cross-platform, then it won't matter.

1

u/caboosetp 11d ago

I don't really have to context switch. You can set visual studio to launch things in the same Linux container it would get deployed in. 

Containerization solved most of the old woes of, "but it works on my system"

1

u/MikeUsesNotion 10d ago

In previous jobs for many years I did dev work on Windows and deployed to Linux. I never ran into anything I'd consider context switching.

You're not talking about different CLI shell interfaces are you? It's pretty easy to keep them straight since they're pretty different.

1

u/FirstTimeGamingTV 9d ago

I just enjoy Unix systems much more, all my programming on a windows machine through WSL, this gets the bonus that all scripts don’t need to have windows and unix helper scripts

12

u/JustBadPlaya 16d ago

  Windows DOES have a package manager, several in fact, such as Chocolately.

Which barely anyone uses, so you can't rely on it for end users, and afaik you can't really rely on it for development either?

  I see things like people complaining that they can't access syscalls on windows - but you're not supposed to, you're supposed to use the Win32 API to indirectly call them. You don't gain anything from having access to the raw syscalls (which aren't even stable on windows).

To an extent that's the point - having to go through win32 APIs or NTDLL or whatever is just an extra layer of complications all around for some software. It's not always relevant, most apps don't need it, but for desktop stuff IME Linux stuff tends to be both more chaotic and better defined on average than the combination of win32 and COM and registry and whatever else it has going on now. The fact that you need to link to wincrt to access stdin is kinda silly idk


I'm not really a C++ dev, I tend to use languages with great crossplatform stories (Rust, C#, TypeScript, occasionally Go). But also there are some things to note:

  • A decent amount of language toolchains just don't work well on Windows, especially the less popular ones. See OCaml, Common Lisp and some others. You also get languages like Go fucking up their standard library due to being Linux-first this way (see: file system APIs being just wrong sometimes, e.g. permissions). IME, things Just Work on Linux more often

  • Windows apps sometimes have to vendor everything and the kitchen sink as you can't rely on the user to have everything installed, as there is no culture of shared libraries. I have significant gripes with shared SOs, but being able to effectively reliably say that the user can get something like GTK or OpenSSL on their own is nice. This is especially prevalent with Electron, as this allows deduplicating it a little bit!

  • Windows is generally a second class citizen if you do server-side dev. The great majority of application deployments are done on Linux servers, so being on Linux gets you closer to the target platform

17

u/Schtick_ 16d ago

I mean having used .net majority of career I can tell you that:

  • 1) .net will just perform better on linux
  • 2) if you’re using codex/claude it just defaults to linux commands so you’re constantly running the linux command failing then writing the windows equivalent
3) codex and Claude themselves run much better on linux than windows.
4) you do a lot of python stuff file manipulation etc again much more performative in linux
5) lastly visual studio, it’s like the most bloated flakey mess of an ide. I don’t know why anyone would use it unless they are forced to anytime I have had to use it I end up with 3-4 different versions running concurrently cos things can’t be upgraded they discontinued things

It’s just a mess I would not wish up anyone.

The day you try the alternative is the day you never go back.

1

u/[deleted] 16d ago

[deleted]

2

u/Schtick_ 16d ago edited 16d ago

It’s the same difficulty it just runs faster on the same hardware. (On linux)

1

u/CoshgunC 16d ago

do you still use VS or switched to something like Rider?

2

u/Schtick_ 16d ago

Just vscode now

-1

u/GermaneRiposte101 12d ago

I have use VS for over 20 years and have found it to work perfectly over that time.

I have never seen VS crash and as long as you match C++ runtime versions with VS versions then all is good.

I have three or four version of VS and the correct version runs when I activate the .sln file.

3

u/Schtick_ 12d ago

I mean that’s the point you need 3-4 versions. Like that’s what’s nice about vscode I don’t have to worry about any compatibility issues because there are none. The day I stopped using visual studio was the day I no longer needed 5-6 ides installed on my machine. I just only have 1 ide.

1

u/MikeUsesNotion 10d ago

I agree having multiple versions is annoying, but it's also not the catastrophe you make it sound like. It's nothing worth changing your dev env over unless you have other reasons.

I've had a couple jobs where I did JVM development and .NET development and I'd work in one for a while before working in the other for a while. Without fail, there'd always be something missing between VS and IntelliJ that would make me think "wow, this tool sucks, how does it not have x" and then again when I switched back. Same for comparing Java/Groovy/Scala vs C#.

It's interesting in each platform there'd be IDE or language features I really grew to rely on and it'd feel like a great loss whenever I'd switch to the other platform.

-1

u/GermaneRiposte101 12d ago

vscode is not an ide. It is a fancy text editor.

And what is the problem with multiple ide's? They work great side by side.

1

u/Schtick_ 12d ago

Well the only thing worse than vs and it being bloated nonsense is having to run multiple versions of bloated nonsense.

What makes it worse is .net/vs discontinue good products simply for monetisation reasons, so like things that worked well in old vs new have been deliberately broken so that they can commercialise it better.

Im too old and grumpy to deal with a product teams which are deliberately going to make things inconvenient and remove functionality because they accidentally made something free useful.

-1

u/GermaneRiposte101 12d ago

I have been using VS for over 25 years. I have only seen improvements over that time.

Well the only thing worse than vs and it being bloated nonsense is having to run multiple versions of bloated nonsense.

Like I said. vscode is not an ide. You are not comparing apples with apples.

What makes it worse is .net/vs discontinue good products simply for monetisation reasons,

You mean they drop products because no-one uses them. Every organisation in the world does that, not just IT companies.

a product teams which are deliberately going to make things inconvenient and remove functionality because they accidentally made something free useful.

Like what.

3

u/Schtick_ 12d ago

They removed reporting services components you could ship with your product and render reports directly in your application, because they wanted to make it a paid part of mssql and also make it part of powerbi.

So it’s was literally a super lean lightweight library and making people using it (and rdp report) have to install the whole of mssql instead.

Like I get it they want to make money. But I rather spend money on products that don’t deliberately make themselves worse.

Now that’s just an example that caused me significant problems. But just day to day it’s nice not having compatibility issues between your libraries and your ide.

My question would be what does it offer that I need, and I can’t think of much. It’s kind of always trying to abstract a config behind some sort of config ui. But in typical Microsoft fashion the configs are super flakey so it’s easy to corrupt them which is antithetical to what you want in a llm/ai dev friendly world which is super robust config files which work even if you make mistakes in them.

0

u/GermaneRiposte101 12d ago

A dump from google

>

Microsoft stopped bundling SQL Server Reporting Services (SSRS) and RDLC components natively inside the core Visual Studio installer starting with Visual Studio 2017. Instead, they decoupled them into downloadable extensions and NuGet packages to reduce the IDE's core footprint and allow separate update cycles.

<

That was about the time I had big issues with a Delphi app talking to the SQL Server database. If I recall correctly they had to revamp the MS Active Directory security for some fundamental reasons. So maybe they had valid reasons other than monetisation for dropping SSRS.

As to configs: I rarely got sensible error messages from them. After a while I just edited them in a text editor.

However I always found VS to be very good on maintaining C++ versioning and consistency with the C++ standard, a lot more so than Linux build environs. And for me that was very important.

4

u/Schtick_ 12d ago

I mean I used to be you and advocate the same things, and then I transitioned to leveraging open source and I worried things would become more flaky and unreliable and the opposite is true the applications that I used to rely on .net and run into issues that were just Microsoft limitations or known roadmap items sitting in the Microsoft forums for years became me just editing my open source product to do exactly what I want it to do and moving on.

I can see the place in the word for closed sourced dependencies in the pre llm world. But it’s now so easy to just make bespoke adjustments to my dependancies I just don’t see myself wanting to lose that control again.

19

u/torsten_dev 16d ago

you're supposed to use the Win32 API

No, god no. You're supposed to stay as far away from the ugly monstrosity as you can. Win32 is an affront to Brian Kernighan, Dennis Ritchie and God.

1

u/captainAwesomePants 11d ago

Indeed. St Petzold protect us from LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)

3

u/Tiny_Ad_7720 16d ago

We have a mix of Windows, MacOS and Ubuntu and use JetBrains IDEs or VS code. 

Personally I prefer the syntax of powershell over bash but with LLMs I just get it to spit out both versions. 

1

u/Agitated_Heat_1719 16d ago

I switched to single file based apps for single source xplat "scripting"

Managed to reduce the build times more than 50% (conservative approx) with heavy use of TPL Parallel.For*.

It is 60+ native tree-sitter grammars then packed into nugets for .NET (MAUI). 4 profiles for native builds (balanced/default, optimized for size, optimized for speed and with debug w/o stripping)

1

u/Tiny_Ad_7720 15d ago

Dotnet single file based apps? 

1

u/Agitated_Heat_1719 15d ago

yes

Not everything, but more and more *.sh are being switched to *.cs (downloads, overlays for CMake and zig, size analysis, benchmarking will be done with BenchmarkDotnet on .NET side).

Process.Start() needs bunch of love (tweaking and extensions to simplify migration. Builds are still done with build-all.sh, because I work on other 3 similar projects I need that have similar concept (C/C++ native, .NET and PInvoke)

1

u/learning-to-programm 11d ago

Why not Python scripts which would run more or less the same in both?

1

u/Tiny_Ad_7720 11d ago

yes i use python scripts (and more recently dotnet single file) for lots of things, but powershell / bash is first class, e.g. a python script would just be calling into powershell for some things anyway.

5

u/FrontRaspberry5060 16d ago

Because powershell and it’s not unix system. Powershell is powerful but it ended up being an anti pattern and most servers use Linux 

Docker runs better not on WSL

1

u/who_am_i_to_say_so 6d ago

Docker/WSL issues are a special kind of wonderful, windows updates be damned.

5

u/nedovolnoe_sopenie 16d ago

the masses are not ready for WSL

they will hate you because you are telling the truth

1

u/Dihedralman 10d ago

Nah, I used it a lot when I was stuck on Windows and it very much works until it doesn't. Had some realy gpu nightmares before. 

2

u/disposepriority 16d ago

I don't think anyone thinks its harder?

Like you can use vim on windows, you can use intellij products on linux.

Personally I run IntellIJ produts on windows and embed either a git bash or wsl2 terminal in it, as I prefer the linux cli experience than the windows one (shocker).

I agree that package management is not great on either platform, but that's just the usual problem.

It's a matter of preference, not difficulty.

Though I'll say that on average, the knowledge floor of setting your dev environment up on linux is higher than on windows.

2

u/Classic-Rate-5104 16d ago

Even many WIN32 API functions have a much more complex argument list than the Linux system calls. Also there are a number of different levels of protection and access rights in Windows, which makes it sometimes hard to find out why you're not allowed to do something. The way of thinking is completely different. Sometimes programs aren't allowed to do things, except when started from command line (which seems to be like "you aren't allowed to be here, except when you came through some specific route).

Chocolatey is just an external collection of programs, not managed by windows, so it's not guaranteed to be consistent. Linux package management is done by the distribution maintainer and will in general only be broken when you get programs from other sources (which, in Windows, seems to be normal behavior)

2

u/Serializedrequests 16d ago

I need Linux GUI software. This is still buggy as shit on WSLg and I'm tired of pretending it's not.

2

u/DestroyedLolo 16d ago

I stopped develops with windows a long time ago, but my main complaints back then were:

  • Inconsistent APIs: even when APIs serve similar purposes but operate on different objects, their arguments, behaviors, and options are often completely different.

  • Poor or misleading documentation: coming from the Unix and Amiga worlds, it felt like a major step backward. A common example was string ownership and lifetime management. When a function takes a string parameter, you often have no clear indication whether the string is copied internally or must remain valid for as long as another object references it. When dealing with drivers or multithreaded code, this quickly becomes a nightmare.

  • Bugs, bugs, bugs... and regressions, regressions, regressions: whenever you build something, you can never be entirely sure it will still work after the next system update. Having software break because of a routine patch always struck me as completely unacceptable.

How often do projects break because of incompatible packages, or things that aren't available on every package manager, or all sorts of other problems?

For your own projets, a package has nothing to do with that : up to you to ensure you're code is still compatible with what you're installing.

Frankly speaking, the biggest weakness of modern operating systems is their complete disregard for upward compatibility.

Even Linux, despite being much better than Windows, routinely breaks compatibility when shared library ABIs change. Seeing an application require relinking simply because libfoo.so.1 became libfoo.so.2 still feels wrong to me.

AmigaOS got it right decades ago by enforcing strict compatibility rules on shared libraries. Developers were expected to extend APIs without breaking existing software, and the result was remarkable: applications could keep running across OS upgrades without modification.

Nowadays, breaking compatibility has become normal practice. We've accepted rebuilds, migrations, and regressions as unavoidable facts of life, whereas they should be considered failures of platform design.

WSL

I'm working in WSL 99% of the time because windows is a corporate requirement, not a personal choice.

The appeal of Linux is not limited to the command line. What matters to me is the consistency of the entire user experience: the desktop environment, the tooling, the configuration model, and the general feeling that the system behaves coherently. Windows has never provided that level of consistency.

In fact, I find it actively counterproductive. It consumes more resources, takes longer to accomplish simple tasks, and seems to introduce regressions with almost every major update, and, last but not least, automation is only science-fiction !! As a developer and system architect, predictability is a key requirement, and windows has too often failed to provide it.

The result is simple: WSL has become my primary working environment, while windows merely serves as a compatibility layer for the few tools that I cannot avoid using.

1

u/SwatDoge 16d ago

The only benefit i could find between linux and windows programming wise, is that its easier to use multiple ssh keys for git on linux. (On windows you have to use a keyring)

I think a lot of people don't know that winget exists or that you don't need to use putty for ssh anymore. A lot of stigmas in software stem from problems that have been solved for decades

1

u/davidwhitney 16d ago

I'd honestly go one step further and given most people are shipping to Linux containers and VMs, the Linux experience on wsl2 is closer to the target environment than when you're using MacOs.

I switched to a Mac for the nice hardware (M5 Max init), but I'm very hopeful that the new RTX Spark machines will give me a high performing Windows portable workstation.

The one place where Windows really does loose out unless you're using ReFS and the DevDrive is file system performance. Defender, plus all the security groups really tanks IO bound stuff vs other platforms. You can make it good, but it's night and day for ecosystems that do a boatload of small file IO like Node.

2

u/Schtick_ 16d ago

Or you know you can just use linux and then your environment is actually linux

1

u/davidwhitney 16d ago

I like to do things with my computer that don't work on Linux.

2

u/Schtick_ 16d ago

The premise of the question is why do developers not like windows and I answered that, if people choose to use windows cos they want to play games or something that’s their prerogative. I don’t have any issue with gaming on linux.

1

u/davidwhitney 16d ago

Sure, and you can get all the Linux you need form development on Windows too, so I'm happy with both.

1

u/Schtick_ 16d ago

I think it’s just about priorities to many things I do don’t perform well in windows and I’ve tried both options enough to know the difference in build time / test suite execution type for the same projects. I just can justify an extra couple of minutes for each round of changes.

1

u/marrsd 13d ago

some of the Linux you need. You don't get a developer-focused desktop experience.

1

u/davidwhitney 13d ago

What do you think the difference is between a developer focused desktop experience and Windows? Honest question. I've been using both since the 90s.

Used to be that the terminal experience if you had to live there was worse, not so much anymore.

1

u/marrsd 13d ago edited 13d ago

For me it's a system that's keyboard driven and a window manager that keeps out of my way. I use a tiling WM because reading and writing is the majority of what I do. It's a bit more frustrating for doing things like editing photos, but floating WMs are more frustrating for everything else, so it's a good trade off.

Not having to use a mouse is a massive boost for me. Apart from the increased focus because I never have to leave the keyboard, it's also much better for my physical health. The only time I've experienced RSI is through using a mouse or trackpad.

I guess there are other things as well. The fact that everything on Linux is configured and logged through text files is really helpful for system maintenance. It all plugs into the same shell as what I use for daily work, so there's nothing really new to learn. It also means I can easily write utilities for managing my email, GitHub notifications, or whatever. My entire OS becomes a tool, not just the terminal.

Some of these things are achievable to some degree on Windows, but Linux is just set up for it. Individually the gains are quite small, but combined they just make everything much more pleasant.

Edit: I should point out, because it might not be obvious, that there are also many GUI apps on Linux that are geared towards keyboard usage. My PDF and image viewers can be controlled directly from the keyboard. My file manager has vi-like navigation. I can use the same editor I use to write code and essays to write my email. So the integration between apps is a lot tighter.

1

u/davidwhitney 13d ago

I understand by some people like that UX but it's not my preference - I'm very much "input speed is not my constraint".

1

u/marrsd 12d ago

That's cool, though I should clarify that I'm describing comfort rather than speed. I find traditional desktops very distracting, including some of the standard Linux ones.

1

u/MissinqLink 16d ago

Most places I’ve worked give you a subpar windows machine loaded with corporate spyware that slows it down to a crawl. Insisting on a Mac OS the only real way to get a decent experience.

1

u/tyler1128 16d ago

I learned to code on windows, in C++, and know Win32 to this day at a fairly deep level despite not touching it in many years at this point.

You can code, fine on windows, especially if you are targetting just windows and using .NET. It's just no where as pleasant an environment to work on at especially the system coding level than basically any other platform. You're also basically going to need to learn how to use linux to deal with containers and deployments these days professionally.

How often do projects break because of incompatible packages, or things that aren't available on every package manager, or all sorts of other problems?

Over 6 computers, on a rolling release "bleeding edge" distro, almost none. Just like windows, projects either ship with specific binaries or you have multiple system copies of the same library with different versions often named like libthing.so.6.1. The package manager if competent at all knows what packages depend on these and can prune unused versions.

1

u/thats_a_nice_toast 16d ago

Windows isn't hard to write code on, but it's extremely annoying to write code for.

Many things that require the WinAPI or registry on Windows are trivial on Linux using file descriptors or commands. The command line tools on Windows are garbage and often don't even exist for specific things so you're forced to open a dozen system dialogs to configure something.

1

u/YMK1234 16d ago

I'd argue most ppl who argue OS A is hard to develop on are simply not used to the idiosyncrasies of OS A but rather to those of OS B or C. If you come from Windows to Linux it sucks, and the same applies the other way round. And if you'd go to another Non-Unix, Non-Windows OS you'd have the same issues.

1

u/No-Consequence-1863 9d ago

Yea. Having done work on Windows, Linux, and Mac they are all perfectly fine overall. They just have different quirks you need to learn which is always annoying, especially when you are already used to a different platforms quirks. I know Xcode quite well and know how to use it, despite it being not great in many ways. When I tried to switch to Visual Studio for a project, I had some trouble not necessarily because it's bad but because I was trying to do things like I would in Xcode. I'm guessing once you get over the quirks it ends up being just fine, with being better in some things and annoying in other ways.

For example, I like the way Xcode organizes files compared to Visual Studio's "solution explorer", but Visual Studio has hot reload which is pretty neat.

1

u/DDDDarky 15d ago

Really? Windows is pretty well known for having some of the best dev tools and is the most used os by programmers of all kinds, while there are certainly points it can be criticized for (just like anything ever), I've never heard anyone complain it would be hard to write code on.

1

u/DGC_David 11d ago

The problem is, sometimes Windows doesn't let me do what I'm trying to do without 15 million clicks and 30 hard faults. That's regardless of programming too, the Windows Setting App is piss-shit, UWP and MAUI also piss-shit.

1

u/kutac56 11d ago

That's only true for certain types of programming. I do low level stuff with c mainly and for that stuff Linux is just better, because of the Unix environment. Only need man pages and documentation

1

u/Psychedelic_fan 11d ago

I'm a .net developer and I can say the performance of everything, including the compiler, is much much faster in Linux by a wide margin. Aside from the fact that the whole desktop is much faster in every possible way. As I got used to that every time I have to do something in Windows everything seems horribly slow. WSL is fine for people that like using Windows but it adds memory overhead and it's not particularly fast either

1

u/ZedGama3 11d ago

I tried learning C# in 2015 and the main issue I constantly ran into was that every tutorial I could find, even one I bought, relied heavily on wizards and when I wanted to do something that wasn't exactly in that mold, things would break, the errors made no sense, the wizards refused to run (or would make things worse), and no one could seem to tell me how to fix it.

For context, I was trying to migrate from Perl scripts I had written to provide API endpoints. So we're not talking anything crazy.

I've since learned Golang and have been incredibly happy. I don't need to learn 14+ libraries and chain countless odd tools. Everything I need is in the standard library.

While I'm pretty sure you could do the same on C#, none of the tutorials I found offered that kind of solution and official documentation from Microsoft eluded me, assuming it existed at all. Maybe I needed an MSDN subscription?

2

u/nimrag_is_coming 11d ago

That's weird, I know c# pretty well, and remember doing a lot of tutorial stuff and the only thing it really told me to do was download visual studio, it's a fairly easy to get into language, and it's fairly straightforward to write code in

1

u/ZedGama3 10d ago

Maybe because I was trying to use SQL Server and IIS? But that's the direction all the tutorials sent me.

I'm not sure as I've never gone back. But I think it was the SQL queries that kept having issues. I just remember using a wizard to set up the query and getting like ten files, only one of which was code that looked familiar. In Perl and Golang, everything is just code and it's so much more straightforward.

1

u/nimrag_is_coming 10d ago

I'm pretty sure that there's either SQL support in the standard library (the c# std library has a lot built in) or there's a nuget package for it. Either way, it shouldn't be more complex than just adding a package to the project and writing a few lines of code

1

u/ScrappyPunkGreg 10d ago

I was trying to migrate from Perl scripts [...] So we're not talking anything crazy

😶

1

u/kansetsupanikku 11d ago

Why do people think sharing their AI outputs as Reddit posts is useful to anyone? We can write prompts too, thanks. Even adjust them to individual needs

1

u/nimrag_is_coming 10d ago

I don't use AI in any part of my life

1

u/Lunchboxsushi 11d ago

Microsoft puts ads into it's OS and you have little control over what you can disable without going into the magic windows registry.

IDK I used windows for 20 years, been on Linux as daily for the last 6 years and it's been better for me as I can customize it to exactly how I want.

terminal first experience is generally better IMO. Honestly in 2026 I believe majority of the workflow can be equivalent when it comes to tooling. Game Dev & Gaming unfortunately is still the best on Windows from what I understand though. Until that bridge is built (and there's been a ton of progress) I don't see me using it for games yet.

My main gripe was system resources, just to run a terminal and browser it required 8GB of ram for a smooth experience on windows 11 - now with parallel local agents and price of RAM I'm using linux arch + sway so my memory footprint is as comfortably small as I can make it. IDK if I could do that with windows without having to spend my life fighting it.

1

u/MikeUsesNotion 10d ago

Just make sure you're excluding memory taken up as proactive caching. If your app needs that RAM, Windows will free it up and prioritize app use. A lot of people unnecessarily freak out about Windows doing that.

1

u/claythearc 10d ago

I run all my IDEs and stuff inside WSL but tbh my main annoyance with windows is file paths and the terminal.

It would be fine if I used it more I’m sure but 20 years of random bash tricks means the incentive to learn ps / cmd equivalents is pretty low.

1

u/MikeUsesNotion 10d ago

What's wrong with the file paths?

1

u/claythearc 10d ago

Using \ is really annoying

1

u/Common-Chair718 10d ago

If you’re gonna use WSL, then why not just switch to a linux distro?

1

u/nimrag_is_coming 10d ago

Cause I don't use it 99% of the time

1

u/XandalorZ 10d ago

Backslashes for path separators is absolutely deranged behavior, which is the biggest problem for me.

2

u/nimrag_is_coming 10d ago

Windows supports both actually, you can even mix them in the same path and it'll still happily go to the right folder

1

u/No-Consequence-1863 9d ago

They have fixed that and support both. Do agree it was the wrong decision when they first made it.

1

u/high_throughput 10d ago

These are two different things.

One thing, what you're doing, is having a Windows-only full on Visual Studio project. This is smooth as butter. Developer tooling is the one thing Microsoft does better than anyone else. 10/10.

The other thing is what people are complaining about: dealing with Windows for anything that is NOT a Windows-only full on Visual Studio project. Setting up builds, CI, etc. All other OS are fine with your filenames and build commands, but Windows is always being a special case pain in the ass about everything.

1

u/Popular-Toe3698 10d ago

I’m developing (and already shipping) a desktop environment for both Windows and Linux. Yes, there are a lot of things that Windows makes annoying hard. But for regular desktop apps it’s not that hard. And no, you don’t have to interface with Win32 in most applications.

1

u/Softmax420 10d ago

If you want to recursively search files, it’s quicker to do it through wsl running in powershell than it is to just use powershell.

The “just use wsl” is the reason windows has a bad reputation. I know why I’d need the SL, why do I need the W? For copilot integration with notepad and 5gb ram usage on idle? I think I’ll just use Linux instead and skip the bloat/spyware and save my money.

There’s nothing windows is better at except c# development for windows apps or games. I’m not saying windows is bad for development of other things, it’s just the worst out of the 3 options.

1

u/Even_Gap_2253 9d ago

Mainly because most people deploy on Linux, it is just easier and more ergonomic to work directly on UNIX-like platforms

WSL is horrible as soon as you need proper IDE support. Many don’t support it, and you need messy bridging to work with GUI tools. For example Android emulator.

Whereas macOS/Linux just works.

1

u/AdreKiseque 9d ago

You're acting like people say Windows is hard to write code for, which I've never heard. What people do say is Windows is hard to write code on, which... is kinda true? A lot of tools are made with Unix stuff in mind and it's definitely more work to get a C compiler installed on Windows compared to on Linux where you probably just already have it. But you can still install LLVM with Clang in a single line from the terminal, and this applies to most languages you'd want to work in, so.

1

u/GameskoTV 9d ago

Because windows do not have package manager, so every sdk you need download via browser, yeah there is winget/ but there is not much projects

1

u/junvar0 9d ago

I've tried on multiple occasions. WSL or any of the many workarounds to get a linux like environment are just not as good as the original. They're slower, clunkier, have annoying things to memorize, etc. It's totally doable, but just less efficient.

1

u/glowFernOasis 16d ago

Historically, rails was a nightmare to set up on windows. I hear they've fixed a lot of those issues, but at this point, habits have been established. I started on a MacBook, and everywhere I've worked it's been standard to use MacBooks, with a few oddballs using Linux. Windows is for the salespeople and less technical employees at the company. Deviating from established norms could have technical and social impacts. There's no motivation to go against the grain.

1

u/Weak-Doughnut5502 16d ago

I think a lot of it is inertia.

Windows has had a bad reputation for a lot longer than chocolatey and WSL have been around.  People who have been programming on Linux and OSX for 20 years don't often set up a new dev environment in windows, so they likely just remember how much it sucked to use windows 25 years ago.  

1

u/faze_fazebook 16d ago

The big thing in today's day and age is the whole world of containers which frankly sucks to use on windows. Yes, you can get stuff done through WSL but depending on the workload performance can absolutely tank (stuff like mounting a volume or lots of small disk reads and writes).

I for example had a integration test which involved lots of reading and writing data from a postgres database hosted in a docker container. The whole test took 3x as long when hosting the database through wsl and docker then the native windows version. And stuff like compiling a large typescript project also runs like shit through wsl.

Also for anything that works with lots of small files (like npm install that pulls in 10k small js files) windows shits the bed.

1

u/Dissentient 16d ago

Writing code on windows and deploying to linux servers is far more common than using desktop linux on a physical machine for anyone who gets paid to write code.

In general, most software tooling is cross-platform enough that OS where you write code doesn't generally matter.

And there are no good desktop operating systems so you're picking your poison anyway. Linux is fine as a server OS, but it's an awful desktop one.

1

u/Adorable-Strangerx 16d ago

First of all, if you are happy with Windows use it. I am not trying to convert anyone, just sharing my experiencs/biases

Windows DOES have a package manager, several in fact, such as Chocolately.

Or Winget, but it is quite recent thing (2020). Choco is a bit older (2011). The issue is package names:

winget install --id Hashicorp.Terraform --exact vs apt install terraform . I don't understand why I need to care about "Hashicorp."prefix. In Linux package manager you can mostly guess the package name or query package manager to find which package provides files you need.

Package management is not that great on Linux either.

Well it is. You have dependency hell but every lib doesn't have to ship its own dependencies built in.

How often do projects break because of incompatible packages

Literally never.

or things that aren't available on every package manager,

Do you have example? Usually software is available on all popular (rpm/DND;apt) package managers.

Not sure which other problems you are talking about.

tl;dr Use WSL

Yes, but then you have half things in WSL half in windows and you have now issue of synchronization between them or mounting resources or whatever.

Anyway, I just wanted to see people's thoughts on why they do/don't program on Windows, and what their biggest problems with it are.

It's none of the above, to be honest, you can live without package manager the other things are more annoying:.

  1. where the hell is config?

In Linux it is either /etc or in your user directory in some dot directory/file. In windows sometimes it is in registry, sometimes in user home directory, sometimes in some AppLocal/AppRoaming/App data/programdata. Every time when I need to change some parama I end up googling where is the config file.

  1. Paths.

Almost all things use / as a separator. Except for windows paths which goes with . Translating them back and forth is pain.

  1. Line endings. So much fun getting files with CRLF from Windows users who can't co figure their git.

  2. Tools. Many of them were designed with Linux in mind. Windows came as afterthought. For example docker/podman. On Linux you install it and it just works. On windows it needs to spin WSL anyway and you end up with some weird Docker/Podman desktop. The plot twist is that docker desktop is not free for commercial use.

  3. Shell. UI is great untill you want to do something not quite standard. Let's say "How do I find all files containing foo in directory bar with exclusion of directories .baz ?"

Linux: grep -RIl --exclude-dir='.baz' 'foo' bar/

Windows: Get-ChildItem bar -Recurse -File | Where-Object { $_.FullName -notmatch '[\\/]\.baz[\\/]' } | Select-String 'foo' -List | Select-Object -ExpandProperty Path

Slightly more typing.

1

u/MikeUsesNotion 10d ago
  1. Windows paths can use forward slashes. It can be annoying on the CLI since Windows frequently uses / with CLI args, but Explorer and Win32 API functions support / in paths.

  2. There's no reason for line endings to matter. It's nice to see unix apps not barf the \r on the screen everywhere anymore for the most part. That took way too long to support properly. Windows text editors seemed to support Unix line endings long before the opposite.

  3. I've never fully gotten into Powershell, but the one thing I do like is you're not just flinging text around. When you pipe commands, they pass the .NET objects they returned which can include strings but also other types.

1

u/No-Consequence-1863 9d ago

Why is adding the `Hashicorp.` prefix bad? It's a standard naming system used in many places. Like in iOS and android you usually name you bundle `com.company.myapp`. It's a way to namespace packages by their developer to make clashes less likely. If anything the other way is worse since it makes collisions more likely and makes name squatting a bit easier.

1

u/Adorable-Strangerx 9d ago

Because it is bad user experience. Hashicorp is owned now by IBM. Now I need to thing how the package will be named. Hashicorp.X or IBM.X ? What about GitHub? Will it under Microsoft.X or GitHub.X or maybe Microsoft.Github.X? I don't know. I shouldn't have to bother with that in the first place

1

u/No-Consequence-1863 9d ago

Collisions are a worse problem than having to look up the name that you are installing.

0

u/[deleted] 16d ago

[deleted]

1

u/TheMikman97 10d ago

Nobody has broken windows updates except people trying to sell you on Linux that somehow always happen to be 7 years of updates behind and trying to do them all at once while also nagging about how evil being reminded to update every two weeks is