Why is there so much hate for .NET?
I get why people hate Microsoft and why people would "prefer" not to pay licensing fees for their applications. But do haters realize that you can run .NET on a fully free/OSS stack, in the cloud, AWS, Linux, the works? That question is not rhetorical. Do haters realize that?
I wrote an article about the good aspects of .NET, but it really only attracted other .NET developers. That's mostly my fault because my network is mostly .NET.
Here's the article I wrote. I'd be curious to hear if it helps the argument for pro-.NET (or at least not anti-.NET): http://steppingback.com/dotnet-strong-were-not-who-you-think-we-are/
I do work in .NET, Node, and most recently I started to dabble in Ruby. I'm not against any of those other languages, so I don't want to hear how awesome they are. I want to focus on why people thing .NET is inferior and anyone who uses .NET is ultimately inferior, too.
Comment below on why .NET has such a bad rap. No trolls, please. I'd like to have a real conversation about it.
43 comments
[ 323 ms ] story [ 1254 ms ] threadIf that's the case, I think it's important to note that .NET is based on the open specification of the CLI. It's like the association between JS and ECMAScript. Also, the open reference license for the source code that MS has (which is how Mono has the base framework libraries for its implementation) are pretty wide-open. It'd be hard for even MS to try to renege on that. So while I doubt that we'll ever see .NET be a paid resource gobbled up by MS, with the open specification of the CLI and the support of Mono, it seems like such a small thing to worry about.
And, even if that is your worry, it still doesn't explain why there's so much hate and disrespect for .NET developers.
I appreciate the response, thanks. I'm not trying to disprove your concern here. Just shedding some light to see if that changes anybody's opinions.
Another reason is due to how the stack feels like it's playing catch up. ASP.NET MVC trailed behind multiple libraries in Java. The .NET developers were condescending the whole time. They would rant against MVC. They would extol the virtues of WebForms. The same is true with many other ideas. If something is not part of the official stack, .NET developers ridiculed it. I remember conversations where I recommend a library like log4j. Mocked and told how Windows logging was all I needed.
In the end, so many better things exist for free that I see little reason to use .NET. I can get a good editor from node.org built on eclipse. There are paid ides that do that as well, better and cheaper than VS. Because MS was so closed source and proprietary I'm the past I think they lost the PR battle.
My IDE consists of a few paid things that you can get for free elsewhere. I've tried using eclipse, but I'm just not as comfortable. But I'm sure I could get there if I jumped.
Things I pay for: * VS - quit expensive * Visual Assist X - $90'ish a year * PHP for VS - $100'ish (because it was cheaper and more efficient to buy a plugin than learn a new environment)
When I add it all up, I have spent quite a bit on the IDE. I don't necessarily agree that the IDE is being beaten by other IDEs. The extensibility is through the roof and I use a lot of tools that really enhance the "shortcomings" of VS. However, because of the plugins, VS is quite bloated and takes way too long to start up.
One of the best arguments I've seen, thanks for posting.
Rob Pike (Bell Labs, Plan 9, Google Go) gave this short speech at OSCON 2010 about what's wrong with programming languages, their thinking, and their recent direction, with a lot of focus on C++/Java/C#, and how Go was a response to that.
https://www.youtube.com/watch?v=5kj5ApnhPAE
Apple Swift seems to share much of the thinking, and the huge enthusiasm for Swift this week suggests developers seem to at least subconsciously recognize there is a problem.
(And, on the related note, that Swift has not even one (or maybe? as I said, I didn't do enough research yet) novel, unique feature which wouldn't be already explored and implemented in other languages.)
What you're saying is an equivalent of "there's many things wrong with JVM, for example lack of type inference".
Each language has its pros/cons, and depending on the project you're working on, you can pick which language is best for the task at hand.
Porting the VM is also difficult. It is a really complicated piece of machinery, and if you are in truly cross platform environments, getting the VM up on new systems is a massive engineering challenge in by itself. Often these other environments are CPU and memory constrained too which isn't great for the .NET VM.
I realize that Microsoft and .NET may not have had that great of a past (WebForms ruined its rep IMHO)...but using the new MVC and EntityFramework...it's clear that .NET is back on the bleeding edge.
Also...most .NET devs like working in .NET because we can be productive in it, but keep in mind--.NET haters--that most of the time we're not the ones that chose the stack...we're just left in a position where hardware/sys-admins/MIS at companies that are still afraid of the cloud are mandating that we have to use Windows and .NET.
However, I don't believe anybody actually thinks "anyone who uses .NET is ultimately inferior." Anyone who would express their distaste for the Microsoft stack that way is obviously trolling.
I wont try to draw any conclusions here because I don't know how much of our personal conflicts are caused by our platform ethos, and how much is just personal; but I can say that the way we execute architecting and building novel solutions is completely different.
C# is not a terrible language, but against its direct competitors in the 'safe boring garbage collected enterprise algol VM language' space, it loses on non-Windows platforms to the far-better-supported, much-faster, and much-better-tooled Java, where none of those API problems exist and the platform is, even under Oracle, moderately open.
Never mind that ColdFusion runs on the JVM.
Never mind that ColdFusion 11 was released a few weeks ago.
Never mind that there are TWO open source CFML engines out there.
Never mind that ColdFusion 12 is already under development.
And I don't hate .NET at all. Or Rudy or Node (can't stand PHP, but that's another matter).
Guess what? It's all the SAME S--T, different SYNTAX.
You know which language I love the most? Whichever one someone is currently paying me to use.
It's not "all the same shit".
Have you looked into Ruby or Node? Compared to Coldfusion and PHP, it to me seems like a new paradigm in web development with tools such as NPM for Node, build tools like Grunt and Gulp.. again, to me, these things make CF and PHP seem old school.
I might avoid this by developing solely on Linux (which wasn't an option at the job) ... but you still may paste in someone else's code written for the MSFT implementation that borks your project.
To chime in with chc, there is such a huge OSS presence on Linux with a wealth of useful libraries to tap into. I must save so much time leveraging useful OSS projects in my Python/Django projects. Thanks, internet.
ClientID's making javascript an absolute pain or a mess of inline asp code.
MasterPages with forms on the child. It makes things very...strange.
Finally, most developers I've met are just...subpar. I can't really explain it, they just are good at .net stuff but they lack understanding below the surface. And I should add I don't just hate webforms (I really hate webforms actually), but even the new MVC stuff is just not implemented well in real life, probably because of the developers using web forms before using MVC stuff. I think MVC is the right way to go, but developers are so completely behind its sad. You shouldn't bill yourself as ten years experience if you have spent those ten years doing nothing but falling behind on development practices. Its not physical time that matters in this profession, its all about your knowledge-base, which needs to be worked on continuously. As I said, most .net developers, are just behind (or even scared) of newer development techniques; and when I say new I don't mean bleeding edge, I mean 4-5 year old techniques. If it wasn't 2004 - 2006, it doesn't really get another look by some of the 10+ year experience people I have worked with.
Doesn't every language attempt to create state? WebForms puts pretty much the entire state in the client, but other platforms pass some sort of session ID at the very least.
ClientID's making javascript an absolute pain
I don't think approaches like the asset pipeline in Rails are much better, IMO
Yes sessions are prevalent in other languages, and that is typically the 'default' method for maintaining state. In .net however, you also have the following methods: http://msdn.microsoft.com/en-us/library/vstudio/75x4ha6s(v=v...
Most of which are commonly abused because developers don't know what they are doing with what, when. For instance I've never seen profiles used, and as much as I'd like to at-least try the idea, any attempt to move even non-critical information into profiles is met with heavy resistance as it's something 'we just haven't used before'.
One place I was hired at (thankfully to clean up some of the mess), insisted on using query-strings and hidden fields for just about everything-they had no idea of the proper way to handle things. When they did use session variables they would attempt some increment magic and mess it up so it was possible to get everything out of sync and be returning the wrong data. They made no use of Application Settings and instead used a physical control file to hard-code global variables to be used across the site.
Part of my experience and hate for .net is specific to instances I've seen-I will agree to that point, but so much just has to do with developers who use 'whatever works' instead of thinking about the underlying design implications of their application. I really just believe its because they don't take the time to learn what is happening 'underneath the hood'. The thing is, the more I work within the .net environment, it really is apparent at just how EASY it is to forget the fundamentals, to throw some tool or easy solution at something, rather then having to think it out. It's great that development time feels quick but can also feel a bit dumbing-down as-well.
I'm rambling so I'm going to shut up. :)
I don't think there's a lot of value using terms like "haters". I think that implies uneducated opinions.
You CAN run .NET in a non-MS ecosystem, the same way that I can run Ruby on Rails on Windows Server. My Rails app needs Redis, which really doesn't run on Windows; most (almost all) of the .NET tooling and resources out there are built on the Windows ecosystem.
The .NET "hate" is Windows hate. Everytime I try to eject a USB drive from a Windows machine and it tells me some randome unidentified process still has a file open, it reminds me why I no longer use Windows. Add on licensing costs, etc, and you have the basis for wanting to avoid the Windows platform.
So again, "but you can run .NET on Linux". Sure, but if you're building a solution and the use case calls for open source, is that really the best choice at that time? I personally think the push for Mono isn't because C# is the best language (it's pretty good though) but to preserve investment in existing code and resources.
When people think .NET, they think heavy tooling, configuration screens, and GUIs. They think tooling sold by "sales engineers" with glossy brochures filled with bullets points. "Consultants" with perfect teeth and perfect belts, as opposed to the guy in the hoodie hacking on code. We know this may not be a reflection of reality (look at tools like Powershell and the increased open-sourcing of Redmond), but culture is often as important as technology.
It is my belief that .NET on Linux will forever be a project like Cygwin or Wine, a mediocre substitute for pretending one thing is another. I don't hate .NET, I just consider it irrelevant. A non-option. A second-class citizen. If I had a whole bunch of C# code sitting around I really needed to run on a Linux box for some reason, it might interest me, but I don't. I am never going to use Windows as a server, and .NET seems inextricably linked to Windows. Modern Java does the things I would want out of a compiled language like C#, so I'm not clear on why I should care or be interested in something that looks like an equivalent platform. Perhaps you can educate me. You seem to readily admit that Microsoft has made many mistakes across the technology stack, why is .NET so different?
I am curious about how many production .NET applications you have running right now on hosted Linux boxes, and if you would care to share your experiences. Perhaps I am completely wrong about .NET on Linux, and there exists a great and vibrant ecosystem of .NET devs on Linux and all the third party libraries just work great out of the box. If you want to convince people about how great .NET on Linux is, write a blog post about your experience running a large scale project on such a platform. Elaborate on the great packages and features present in the .NET ecosystem which I can't find in Node or Ruby or in the JVM. Don't just vaguely allude to there being a bunch of great open source .NET developers out there making great projects, because the only example you gave (ServiceStack) is not open source or free. Give us some great examples and tell us why we can't find that stuff anywhere else. Convince me that I should care about .NET even when I want nothing to do with Microsoft.
The only projects I've deployed on Linux are SS-based and are small scale and they're all API-driven web apps. The server-side implementation doesn't get all that complicated.
You make a lot of very valid points here. I'm still happy with .NET overall and I hope that you're wrong about .NET on Linux forever being a project. I'd love to see it gain traction and have more of a community backing. I want to scale out on Linux and make scaling based on hardware and not complicated license structures. But as it stands, I think you nailed your argument. I'll ask around to see if anyone else can add large-scale production experience on linux to the conversation.
I consult as a software engineer on various projects, frequently C# and Scala. C# is a fine language, and Monodevelop is continuing to improve, but I don't see any advantage over choosing a more 'open' language with a much more mature runtime (JVM) and an overall more advanced language (Scala).
Another thing to mention is the community/culture of .NET developers. I want to be able to ask "ok, I need to debug/change/fix this, where is the source?" without getting weird looks.
Yeah. They just don't care for the sub-par experience of using Mono. (MS opensourcing large parts of .NET / CLR etc is quite recent, so it doesn't have changed the climate yet).
>Comment below on why .NET has such a bad rap.
Well, not that much bad rap. People just don't use it. From what I read on most forums, hackers using other languages tend to like C# (lots of people, even in Unix land), and respect F#.
But they either want a mature system with longer open source presense and better support than Mono (e.g Java) or they don't work with such managed runtimes at all and they opt for something else.
Note that Java, which has been open sourced and has had a huge hacker community for many more years than .NET, still gets a bad rap because of Oracle's actions and behavior.
Rather, it has to do with trust issues arising from the fact that I lived through the 90s and I remember what it was like when MS was dominant.
Unfortunately Apple is stepping into the same hubristic trap. I will probably have trouble trusting them for decades as a result.
So I went open source - with a LAMP stack - if I want to run old versions there's no problem, maybe with hardware - but that also isn't as big a factor. No worries on selecting client compatibility as it is web based (have had to tweak based on HTML/Browser revisions, but nothing that really broke beyond fixing). Every component was free (enough) for what I was doing, and it pretty much just worked. I feel I had wisely steered clear of Filemaker Pro, Access, Cloudbase, Panorama, Visual Basic, or any other platform where I had to plug in a key and/or ask permission in order to install/use it. I was happy, staff was happy... and still are. Never looked back since.
.Net and other MS technology just reminds me of the struggles of the past added with new licensing schemes and more intricate lock-in. So I prefer to ignore it. If I was going to do local machine development instead of web based Python would be the direction I'd go.
ALT.NET came and went, but there was never a really strong open source community. That combined with the cross sell policy is a barrier to entry. Everything has been tightly coupled, IIS dependencies in ASP.NET makes Mono a second class citizen, MSSQL dependencies in EF made code first migrations break in MySQL. All designed to sell licenses, books and certification.
Talking about productions web apps, at the end of the day it has to be on Windows, even if you want to dev on Mono. If I'm going to start building a production app you start asking yourself questions about licensing costs too, Server, SQL, VS pro, CALs. Okay so you can get it going for free if you join BizSpark, but then there's the waiting etc etc and the niggling fact that eventually you will have to pay. Comparing that to my experience working on Linux is like chalk and cheese. vagrant up -> npm install -> {do work} -> git push heroku master. Frictionless, all for free, with no gatekeepers.
With OSS, people don't sit around waiting for the mothership to fix issues, because there isn't one, they band together and fix it themselves. Additionally, as I've come to realize (flamebait warning) Linux kills Windows on the server. Not by a nose, but like a Red Wedding in ease of use, footprint and resource utilization.
You also have to look at the "why C#" specifically. To do RAD web development it is much faster to use something like Rails. C# is more performant? Then use Java or node.js. C# just doesn't fill a particular gap.
Having said that, it's not all doom and goom, I think C# is the #1 choice for mobile development. I think the ASP.NET Titanic is starting to turn. Scott Guthrie seems to get it. The announcements recently with regards to ASP.NET vNext are all heading in the right direction and address a lot of the glaring issues. There is also some great non-MS .NET work being done at places like GitHub and StackExchange. Will it be enough to convince OSS types to start adopting it? I doubt it.
Personally, I just don't see anything interesting that .NET offers. In fact, I consider languages which target virtual machines to be a failed experiment of a bygone age.
The two exemplars, Java and .NET have been thrust upon developer communities by multi-million dollar marketing efforts. And those marketing efforts have not been tailored towards my specific demographic. So they've been pretty easy to ignore.
So it's not a matter of being anti-.NET or Java or whatever. It's just that they're about as relevant to me as Barbie-themed toilet paper - superfluous and not marketed towards my demographic.
Also they aren't even usefully old-fashioned, why can't we have arrays where the first item is number 1, or 21 or some other number, Basic had that from the beginning. Why do I have to use a dictionary when I want to use an ordinal type such as a character or boolean as the index (Pascal could use any ordinal type as an array index). Why can't I create subtypes of the integers and reals (Pascal had that and it prevented large numbers of errors). Functional languages have implemented guard clauses, these can simplify your code dramatically and remove the need for a lot of traditional if and case statements. Bertrand Meyer integrated contracts into Eiffel almost thirty years ago, and now MS has provided them by means of a clunky add-on that rewrites your binary after it has been compiled.
And so on, it's not that .NET is bad, it's that after all that effort Anders Hejlsberg (yes, he of justified Turbo Pascal fame) should really have been able to produce something so much better, or at least more interesting.
Rant over, thanks for reading if you made it this far.
Even as Mono came out later, backing for it has been lacking and nobody knew if it would just die out in long run or would get killed if it ever became too popular.
The result is that most people who come out of college have been using Python/Java/Ruby for class work and then use it to build open source eco-system. This feeds on to itself and before you know now most important open source libraries are built using non-Microsoft platform.
Even though on technical (and now even political) merit C# is richer language miles ahead of Java and .Net CLR is fantastically advanced than almost anything else, there are simply many more people churning out of colleges familiar with Java instead of C#.
Over time, this accumulates and produces laughable outcome where people seem to prefer something as despising as Oracle owned product rather than much-lesser-evil Microsoft.
For languages other than Java, such as Python or Ruby, C# is actually too verbose and even lacked functional features initially. When functional features arrived, they were incremental and more as after-thought. So there was reasonable basis to reject it on that ground. I would say Go has fan base but is more comparable to C# 2.0 than C# 6.0. Some cling to few innovative features in Go and less verbousness while confusing its lack of features as "simplicity" but overall it still has miles to go.
It all seems very narrow, very closed quite facist really.
I prefer a more open, more fertile ecosystem. C, C++, Java, Clojure all compare quite favourably in this regard.
I certainly don't hate C# the language. But I don't like the tooling (VS, VS or.... VS) or the community - which don't seem to come up with their own solutions often enough for me. And face it, .NET is only a first class citizen on Windows.