Excuse the rant nature of this but I'll give you some reasons as a software/devops guy who does 50/50 UNIX/Windows and has written more C# than I care to remember, daily for 12 years...
The ecosystem is horrible. Why?
1. It's full of little cargo cults powered by Greg Young, Udi Dahan and Oren Eini in particular. Each of these sells snake oil that costs you piles of cash and screws up your architecture or heavily couples it into a product which has a recurring cost.
2. Rip off merchants such as Telerik producing buggy components that rarely work.
3. Abandonware galore. There is no inertia. Everything tails off and dies after a bit. You can't drag something off NuGet without the inevitable result of it dying miserably after a year or so. At least we have NuGet now so ancient versions don't just disappear. We have to maintain our own forks of various things now.
4. Framework circle-jerking. Microsoft literally suck up to every framework that appears that gets traction resulting in much friction for those who adopted other frameworks before the circle-jerk began because it's not the one true framework (MVC validation I'm looking at you).
5. Everyone you get off the street is rubbish, at least in the UK. I mean really rubbish. So rubbish even though we offer a damn high salary, we have a 1 in 20 hit rate for staff. Perhaps 1 in 50 people actually give a crap past getting a pay cheque. It seriously attracts the wrong people.
6. Blindness. Not a single person I know has even managed to take a look at other platforms past perhaps owning an iOS or Android phone. There is literally no variation of knowledge or alternative viewpoint to pit the status quo against.
It's just a career programming market if you ask me and to be honest it's the only reason I do it. It pays better and I can work locally.
Fortunately I have a number of UNIX boxes I can dissolve into (much like some people drink after work).
I've been doing C# development for a few years now, and did 100% Solaris/Linux for the decade prior to that.
1. Never heard of them. They certainly haven't impacted anything I've done.
2. I've been ignoring Telerik for twice as long as I've been working in C#, because of their HTML/JS stuff. I'm not surprised their C# stuff is equally bad.
3. You could say the same about OSS projects on SourceForge, GitHub, or other repositories. Whenever you choose a third-party library (vendor-supplied or not) you have to consider how widely deployed it is, how big and active the community around it is, and what it's longevity will be. If you're not doing that (or doing it poorly) and getting burned by abandoned libraries, then you need to learn to judge better.
4. See #3. It's true though, Microsoft does tend to try to include everything; I suspect that comes from trying to develop general libraries/frameworks for use by Enterprise developers. Each Enterprise needs something specific, and most of them need different specific things, so a general-purpose all-inclusive framework winds up trying to have everything.
5. I think that's Enterprise thing again, and it's probably just as true for Java developers. When the vast majority of developers familiar with a technology are doing internal IT development for companies where software development is a cost center rather than an investment, the hiring pool is going to be full of mediocre developers. The best developers will be working for software companies and companies whose business advantage is based on their software, and that's true regardless of the platform they use.
6. See #5. This certainly applies to lots of Java devs too, and also most less experienced devs who started learning the trade in college rather than on their own.
Rant excused. While some of your points are more or less correct, would you care to elucidate on a few of the others?
1. You mentioned Oren Eini, who is the author of Rhino Mocks and contributed heavily to Castle and NHibernate. Apart from the usual TDD zealotry, how exactly do any of these screw up architecture? Or cost anything? -- they're free. Are you referring to RavenDB? Also, can you seriously name a platform that doesn't have celebrity developers slinging trash ware to line their wallets? Is this strictly a Windows/Dot Net phenomena?
5. & 6. While I agree that there are tons of clueless/mediocre Dot Net devs, I've met many that are exceptionally sharp and just as capable as any hardcore, passionate Java/Python/whatever developer. Passion outside of the Microsoft ecosphere? Are you at all familiar with the entire Alt.Net "movement"? Is your sampling based on the type of "talent" your company attracts? Or maybe the UK?
1. Oren is the least bad of the three mentioned, but his "Ayende" blog at times is a little vicious when it comes to slating other people's work [1] especially when the sheer number of bugs we've tripped over in NH, Castle dynamic proxy and NH profiler is as high as it is. I'm not a TDD zealot (I write tests for critical sections only, usually after the code writing event) but from an architectural point of view, unlike J2EE etc, there are no standard abstractions so once you've integrated something, you're stuck with it unless you fancy rewriting everything. This is hard work when your codebase is around the 2 million lines of C# and 150,000 lines of NH mapping XML (yes it's that big). Cost isn't just for the product - it's an ongoing concern. We've got to the point where we are becoming "that conservative enterprise" that someone else mentioned above.
Platform that doesn't have celebrity developers: C/POSIX. Even C++11 possibly now (I haven't evaluated it fully yet). Why? It's a set of standards, not a product. You're free to move around in it. I'd argue J2EE is fairly close to that but to be honest it's a pain to work with unless you're using Java EE 6. Go is pretty celebrity-free i.e. the authors with their heritage don't do it for the fame (which in itself sounds ridiculous).
5/6. Yes we've met them as well but to be honest they want lots of money (£100k+) or are contractors. I'm quite happy to take 3 people on that basis in myself and lose 6 members of our team as there would be a net gain but unfortunately employment law in the UK doesn't allow it and PHBs think more bums on seats is a good metric for measuring productivity. This is unfortunately a universal FAIL in the UK which concentrates on unemployment figures only - it's almost programmed into the minds of all business folk.
I'm not saying the last point is specific to .Net as for example the Perl developer community in the UK is even worse (I worked for an outfit where use strict was laughed at) but it's a hell of a lot easier to get a decent C expert than it is to get a C# expert just from the sheer amount of noise from low quality developers expecting miracle salaries. Recruitment agents are a joke as well (although they're easy to get a free lunch out of ;-) but that's another story.
> I'd argue J2EE is fairly close to that but to be honest it's a pain to work with unless you're using Java EE 6
The thing with Java is that the community is freaking huge. Actually, with Java you're not talking about one community, but of several huge communities.
If you don't like J2EE, that's OK, as there are plenty of well-supported and awesome alternatives. Alternatives like Dropwizard and Play Framework. If you don't like Java, the language, that's OK too, as there are awesome alternatives, like Scala, Clojure, Groovy or JRuby, all of them widely supported with big communities behind them.
Also, people should really acquire better taste in what technologies to pick. (N)Hibernate sucks so badly that I've always been amazed of its popularity.
Agree with your point about hibernate and its derivatives. Unfortunately with .Net you're stuck with that or EF which is even worse or something off the shelf and even crappier. TBH I've actually used raw ADO.Net with provider abstraction and dapper.net recently as replacements.
Despite its inefficiency, the old CQRS pattern with commands that INSERT/UPDATE and queries as typed DataTables are actually the most scalable solution I've found (over several years, not just on small projects).
7. Most .NET shops are so technologically conservative they mandate their developers write "C# 2.5" because those C# 3, 4, 5 features are too scary and unproven. Which is part of what causes #5.
Also, low quality commercial .NET libraries are an epidemic.
There's no such thing as C# 2.5. You must be referring to 2.0. Anyhow this may be true of financial institutions, but to say that it's a norm... is not my experience at all. > 15 years of experience.
Sorry, 2.5 was me being sarcastic, so I put it in quotes. It basically means you code mostly in C# 2 with a few C# 3 features cherry-picked (Like null coalesce, maybe implicit typing with var) but avoid anything LINQ-related.
Most of the problems arise from people not understanding that linq queries return iterators, not collections and therefore writing O(n²) loops. But that's not too hard to learn.
Alas, if you are talking about Linq2Sql or Entity Framework, then of course you have to deal with all the typical ORM problems; but this has nothing to do with Linq.
I think the common sentiment is that we'd all hope to hell that we never have to work on a project so crappy that team members can't understand programming language basics.
The ecosystem is horrible. Why?
1. It's full of little cargo cults powered by Greg Young, Udi Dahan and Oren Eini in particular. Each of these sells snake oil that costs you piles of cash and screws up your architecture or heavily couples it into a product which has a recurring cost.
2. Rip off merchants such as Telerik producing buggy components that rarely work.
3. Abandonware galore. There is no inertia. Everything tails off and dies after a bit. You can't drag something off NuGet without the inevitable result of it dying miserably after a year or so. At least we have NuGet now so ancient versions don't just disappear. We have to maintain our own forks of various things now.
4. Framework circle-jerking. Microsoft literally suck up to every framework that appears that gets traction resulting in much friction for those who adopted other frameworks before the circle-jerk began because it's not the one true framework (MVC validation I'm looking at you).
5. Everyone you get off the street is rubbish, at least in the UK. I mean really rubbish. So rubbish even though we offer a damn high salary, we have a 1 in 20 hit rate for staff. Perhaps 1 in 50 people actually give a crap past getting a pay cheque. It seriously attracts the wrong people.
6. Blindness. Not a single person I know has even managed to take a look at other platforms past perhaps owning an iOS or Android phone. There is literally no variation of knowledge or alternative viewpoint to pit the status quo against.
It's just a career programming market if you ask me and to be honest it's the only reason I do it. It pays better and I can work locally.
Fortunately I have a number of UNIX boxes I can dissolve into (much like some people drink after work).