As I have said it on the original GitHub issue, there are multiple reasons for why the lives of .NET developers will always suck.
First of all every division at Microsoft needs to be cash positive. At DevDiv (developer devision) the main bread maker is Visual Studio. .NET is free and makes no money. VS Code is free and makes no money. OmniSharp is/was free and made no money. ASP.NET is free and makes no money. It's mostly SQL and Visual Studio licenses which pay the salaries of the .NET team. For that reason Microsoft can never let it happen that a free and open .NET extension can make VS Code a good enough experience for the vast majority of .NET developers. It's not by accident that despite Microsoft owning C#, .NET, VS Code and OmniSharp the C# experience on VS Code was the worst of its kind in comparison to any other programming language. It's by choice in order to push developers to use Visual Studio.
Another big reason is that Microsoft needs to keep a tight grip around their .NET developers, because .NET is the main driver to Azure adoption. Azure is an extremely unattractive product to any other development community. Azure is slow, it breaks, it over promises and under delivers and it is almost twice as expensive to AWS or GCP once you actually establish feature parity. It's mainly .NET devs who get cleverly pushed to Azure and siloed away from anything non-Microsoft by Microsoft. The world runs in the cloud nowadays and the cloud is a unix based environment. Microsoft has felt the bleed of its traditional Windows centric developer base migrating away to macOS and Linux and becoming more wise about their technology choices. In order to stop the bleed Microsoft tries hard to convince its remaining Windows developers to remain in the Windows/Azure silo by giving them just enough sugar coating so they never step outside. WSL, the new unix-like terminal in Windows, Windows containers, etc. are all attempts to keep Windows folks on Windows and therefore closer to Azure.
The irony with all of this is of course that if you are a software developer, you'll have a MUCH MUCH better experience with Microsoft owned products (GitHub, VS Code, etc.) if you choose any programming language which is NOT .NET, because (at least for now) they will not try to come after you to lock you into their Windows/Azure based silo.
VS Code has business value for them in keeping them relevant. Visual Studio is one of their shining pearls, mostly because it's one of the only ways to use .NET Framework and C# coherently (assuming you're running microsoft to begin with since none of their stuff worked well on other OSes before mono and even after mono).
They "weren't above" hiring open source engineers so they're clearly a good company? They hired a guy that happened to try and make python run on windows so they're awesome? What kind of logic is that? You have to take both of those eventualities super optimistically for that to be a plus -- pessimistically it just looks like they tried to ingratiate themselves and make python run on windows better so that more people would use windows.
This is the company that put ads on user's login screens.
BTW, the mono effort's patent status[0] (receiving a broadened patent "promise" from MS). A group of open source hackers bore the brunt of bringing their platform to other operating systems and the best they can do is a "patent promise" and the OIN "swearing to protect" mono as a project? I honestly don't even know what secret sauce could possibly be inside C#/.NET that would make me choose it in this day and age. Honestly why would anyone choose C# unless they had no choice but to run windows (in development or deployment)?
[EDIT] I removed some of my comments on .NET Framework because I'm very biased against it.
This isn't surprising. Microsoft is out to make money, not to make the world's code quality better. They may make the world's code quality better sometimes, but if they are faced with a choice between the two, they're going to choose the money. Visual Studio's tiered pricing and tiered features are just an example of that.
If making the world's code quality better is a priority for you, I think the solution is to switch to free languages and toolchains and help improve them. I'm not saying this from a "shut up or leave" kind of mentality: this is exactly why I moved out of the C#/.NET ecosystem.
There’s a large conflict of interest when Visual Studio is a paid commercial product, while VS Code is free yet gaining marketshare even in C#/C++ work. When someone is willing to sacrifice the OSS-licensed product (even after the feature was already coded[0]), it shows Microsoft’s true colors in that they “embrace OSS” only to the extent select teams at MS choose too; the culture isn’t one that puts OSS first over sales.
I work with ruby/rails, node.js/coffeescript, python, scala and some other stuff on a daily basis on my day job. Thanks to MSDN-AA, i had to work with the complete Microsoft-Stack at University the last year, given every single tool for free (including visual studio ultimate). Guess what? It was just a pain. I can't even describe in words how unproductive it feels to work with .NET when you are used to the latest "hipster"-stuff to get things done beautiful in minutes instead of hours/days. Not to mention that all the tools usually cost a few bucks if you have to buy it... i wouldn't. Thanks to the MSDN-AA program, I and most of my fellow students never want to touch Microsoft stuff again.
Microsoft spend huge affords to create nice stuff, but for decades they just don't get it. And i don't get why people working with .NET regulary stop complaining after a while and think that ugly workflows are "ususal".
As a fullstack dev working with c#/.net backend and react frontend, I can say that c# is great, and I wished more projects would use it.
<rant> Unfortunately, I agree that Microsoft was too late in realization that it is important to make it easier for developers and that they need to cater to the devs, instead of getting in their ways and making it harder for devs. The visual studio pro is still expensive (it should be FREE! community ed doesn't count) and still not as good as Jetbrain's Rider, which runs circle on VS. In fact, if MS had any sense, they should've bought Jetbrain just for Rider and scrap their bloated/slow visual studio, which only runs on Windows. MS needs to improve their tooling and also make VS for Linux if they want c# to be taken seriously for cross-platform dev. And stop changing the platforms and remove their absolute convoluted naming scheme. Why do we have .NET core which is now .NET 6, .NET framework is now supported and deprecated at the same time, desktop apps were written in WPF, and then UWP? and MAUI, and now is it called WinUI3? I have no idea because I can't keep track of changes anymore. One day it's called .net, who knows in few years it's going to be .azure, or whatever.
</rant>
The problem is the .NET ecosystem. Most of the truly useful frameworks and libraries are either commercial or freemium, and Microsoft is happy to play along and support this cottage industry instead of releasing free in-house versions and crushing the overpriced third party ecosystem.
Another issue is that Microsoft 's first party libraries are now increasingly designed to funnel you into Azure services. The language is great, but the ecosystem is rotten.
Monetizing software is so incredibly indirect. Obviously companies don't make any money on free frameworks and tooling. These days, using C#/.NET maybe/kinda/sorta increases the chances that you might deploy on Azure or use Azure services. That tiny (or not so tiny) uptick easily funds all C# / .NET ecosystem development.
I'm not sure why they do not open source the debugger. I suppose it is obvious to some extent that some companies (JetBrains) are able to charge for high quality tooling. Microsoft makes a trickle of money from Visual Studio professional.
Though the objective function and decision variables are somewhat opaque, this is clearly an optimization problem.
I’m not anti-Microsoft. I own stock. I want it to do well for my family.
But I’ve seen firsthand the ignorance and arrogance of a .Net-based development team. It’s like having taken all the old bad VB programmers and given them the equivalent of Legoland to live in. Their company is paying Microsoft for expensive SQL databases, Azure this-and-that. They restarted IIS instances and Windows servers regularly. Now they restart their Docker container instances. They have no fucking clue why. By the way, they run the development team.
Hats off to those in Microsoft that open-sourced things. That’s better than it was. I accept Nuget and other ideas they copied from the wider development community.
But there’s a long way to go before I see anything “Sharp” and assume it could be legit.
I think there have been some great engineers and developers working on Microsoft initiatives.
Note: only their Azure + DEV arm is OSS happy - which is a result from making money with it on Azure.
Their Windows/WP/UI projects are violently closed source, almost all cross-platform Rich/UI initiatives have been killed since Sinofsky has taken back the helm. Personally they should do all C#/.NET devs a service and provide better integration/code-reuse with MonoDroid/MonoTouch, but as they don't see it in their best interest they're pushing for platform-lockin. Which is a strange play when you're hopelessly behind the incumbents.
This is starting to be a real problem for .NET devs now (since MS is losing their influence) as they become pawns in Microsoft's platform strategies, whilst we (C# devs) miss out on the most exciting platforms Microsoft doesn't want you to develop for, e.g: iOS/Android, NaCL, Unity3d, RaspPi, etc. We're just lucky Mono exists which runs on all these platforms.
a) I can't imagine somebody bothering to support .net software on the Linux desktop without being paid for it. I know those guys[1] are a minority, but it takes only a minority to create an absolutely toxic atmosphere. Maintaining a end user product can lead to frustrating interactions, and it doesn't really help if your choice of technology means that there exists a significant number of people who literally want you, your spouse, your three year old daughter and the family dog to die in a fucking fire.
b) Mono was always a bad choice for asp.net, which means that the software people are actually paid for doesn't run well on Linux. That was mostly a problem outside of xamarins control, and I hope it becomes better not that the devdiv MS seems to be somewhat committed to work together to make it truly interoperable.
Without JetBrains Rider .NET would have no cross platform dev experience.
VS is shitty Windows bloatware, VS for Mac is utter rubbish and OmniSharp was killed by Microsoft because they didn't fancy to give away dev tools for free and purposefully killed it in order to replace OmniSharp with a closed source extension, which as of today doesn't exist yet. So if you are a Linux developer then you are basically fucked today if you wanted to use .NET, except there is Rider. Without Rider .NET would be completely unattractive today.
If one is okay with this then .NET is amazing. Otherwise I cannot advocate for .NET anymore I am afraid. Microsoft doesn't see what's good for them. VS Code is the future, not VS. They invest too much time and money and marketing in selling VS to developers instead of making VS Code a great free OSS experience.
Now that .NET is easy to run on non-Windows platforms, Microsoft is likely trying to figure out what's the business case.
By keeping the tools to them, Microsoft can try to offer the best developer experience. Hopefully (from Microsoft point of view) this pushes developers to use services from their ecosystem (Github, Azure).
It's likely that in the future more developers are actually doing the development remotely. Not checking out the code to local machine, but instead using IDE which communicates with the server component. Microsoft has Github Code Spaces [1], JetBrains has Fleet[2]
Man, 6 months ago I would have agreed with you. Hell I even have a year old BizSpark membership.
I just couldn't get over the thought in the back of my head that I'm making the wrong decision investing in Microsoft's development platform. C# is literally my favorite language, but I felt trapped and missed open source... Both the freedom it brings and the community. Maybe I spend too much time on HN.
I even tried to go 'indie' .NET. I moved to RavenDB (fuck MSSQL and it's overpricedness, and EF) and stuck with Azure, so really my only costs after my 3 years would be an MSDN license per developer. But in the end I just gave in to my worries.
One weekend I just rewrote the damn thing in NodeJS and I'm pretty happy. No need to boot up my Windows VM anymore either.
I think the talent pool is also what put me off. There seems to be - in London at least - a lot of career developers who pick .NET.
I'm a .NET developer, and honestly, this is the worst part of being one; we get good third party tools, we get promises from Microsoft about them being all about open source, and Microsoft constantly move in and obliterate all the competition; there are countless examples out there. A few years ago we had a great amount of choice around DI containers for example - they filled an obvious gap Microsoft had given no solution at all for within their framework despite its many years of existence. Then one day they come along with a DI container that is far inferior to the existing offerings, but it's the default on a new project... the whole community immediately stays with this default option despite the obvious inferiority. Today I never find any modern .NET apps using anything other than this default, and I still think it's inferior to what we had.
Microsoft have always adhered to 'Embrace. Extend. Extinguish', and it is alive and kicking today in every area of open source they touch, be it this, GitHub, Windows Subsystem on Linux... they have no real interest in open source, except to crush it as best they can.
What writing on the wall is this? The demise of Microsoft? That's a narrative being pushed by the tech reporting industry. Also, I assume you've never used and of the developments tools or languages created by the company. Both Visual Studio and C# are very well done, and other tools like F# and the ASP.NET MVC are getting similiar treatment.
The problem has little to do with either Microsoft or the .NET development ecosystem, it has more to do with the nature of corporations and startups.
This feels more like an internal turf war inside Microsoft. The general open source strategy with .NET Core and VS Code has been running long enough that I don't think it's just a smoke screen. But there's probably plenty of different interests inside Microsoft that are at least partially in conflict.
The Azure side probably doesn't care about selling Visual Studio, but they care about developer mindshare and reputation. The Visual Studio side seems to be in a more difficult position, I assumed they can just live from the enterprise/everyone else split and focus on enterprise-y stuff to still sell Visual Studio. But it looks a bit to me like VS Code and the .NET cli have become more of a competition than they'd like.
And the worst mistake here might not have been pissing off the .NET community, but pissing of the people working on .NET for Microsoft. I mean in the end this is the same, but pissing off the people working on .NET would result in a much more thorough destruction of trust with the community in the end.
But I have zero inside knowledge here, might just be weird decisions driven by internal politics or whatever.
First of all every division at Microsoft needs to be cash positive. At DevDiv (developer devision) the main bread maker is Visual Studio. .NET is free and makes no money. VS Code is free and makes no money. OmniSharp is/was free and made no money. ASP.NET is free and makes no money. It's mostly SQL and Visual Studio licenses which pay the salaries of the .NET team. For that reason Microsoft can never let it happen that a free and open .NET extension can make VS Code a good enough experience for the vast majority of .NET developers. It's not by accident that despite Microsoft owning C#, .NET, VS Code and OmniSharp the C# experience on VS Code was the worst of its kind in comparison to any other programming language. It's by choice in order to push developers to use Visual Studio.
Another big reason is that Microsoft needs to keep a tight grip around their .NET developers, because .NET is the main driver to Azure adoption. Azure is an extremely unattractive product to any other development community. Azure is slow, it breaks, it over promises and under delivers and it is almost twice as expensive to AWS or GCP once you actually establish feature parity. It's mainly .NET devs who get cleverly pushed to Azure and siloed away from anything non-Microsoft by Microsoft. The world runs in the cloud nowadays and the cloud is a unix based environment. Microsoft has felt the bleed of its traditional Windows centric developer base migrating away to macOS and Linux and becoming more wise about their technology choices. In order to stop the bleed Microsoft tries hard to convince its remaining Windows developers to remain in the Windows/Azure silo by giving them just enough sugar coating so they never step outside. WSL, the new unix-like terminal in Windows, Windows containers, etc. are all attempts to keep Windows folks on Windows and therefore closer to Azure.
The irony with all of this is of course that if you are a software developer, you'll have a MUCH MUCH better experience with Microsoft owned products (GitHub, VS Code, etc.) if you choose any programming language which is NOT .NET, because (at least for now) they will not try to come after you to lock you into their Windows/Azure based silo.
reply