Dave has some reasonable points, and frankly I think MS is going where he'd like them to go.
But he does miss the boat on a few things.
One thing that I do think he discounts too much is the surprising effectiveness of small focused teams. In the same way a small startup is more effective than a lumbering machine, a small team of devs is often more effective than 1000 loosely organized volunteers. The classic example is GCC which has probably 10x more people working on it than any commercial compiler, yet the Intel and MS C/C++ compilers generally kill it. Not to mention other less popular compilers like IBM xlc and DEC's Alpha compiler.
The contribution list to RoR is impressive, but the quality of the product doesn't scale with the number of contributors.
I think the question MS has to ask is "do we forego control to possibly get an incremental increase in product quality?" What I've found interesting is the speed at which Silverlight and ASP.NET MVC have improved over the past few years. With relatively small developer teams, they've increased in quality as fast as any open source projects I know of.
The other thing he gets wrong is he conflates framework developers with application developers. And I think this causes him to see a skewed world-view that developers are "waiting" for Microsoft. In general, app developers, are not waiting for MS to do anything. You have tight deadlines and are trying to find the best solution today. You take a snapshot of the world right now and pick the best solution (or starting point). You don't have the time to ponder what might be available in eight months.
Most ppl on the MS stack are app developers. Always has been the case.
I think the core rails team is pretty small and focused. The benefit of it being open source is that an army of people wanting to make a name for themselves are combing over their code to make sure all the I's are dotted and T's are crossed. The quality of Rails obviously doesn't scale with the number of contributors - there are only a few core contributors and a heckuvalot of casual contributors. Makes sense to me.
So it's not about incremental increases in product quality, it's about responding to problems quickly and promoting new core developers from the community, rather than through Microsoft's opaque hiring processes.
I'm relatively new to web development, and I've never worked in an enterprise environment using enterprise software/frameworks, but I honestly cannot understand why anyone given the choice and assuming the cash is the same would choose to go the MS route. I admit naïveté.
I'm relatively new to web development, and I've never worked in an enterprise environment using enterprise software/frameworks, but I honestly cannot understand why anyone given the choice and assuming the cash is the same would choose to go the MS route. I admit naïveté.
A lot of reasons. The big reason is that for a LOT of people, open source isn't all that compelling as a feature on its own. For certain classes of people its the most important thing in the world, for other people it doesn't add much value. And for maybe an equally large subset, it's actually a negative.
At the end of the day each person/org has to decide what is important to them and optimize accordingly. For you open source may be the most important thing in the world, in which case, the choice is obvious. But there are millions of people who have made a different decision.
I agree with you but having to choose between 2 similar products, going with the one that's open-source is a no-brainer in most cases.
If a lot of people don't go with that route is mostly because of inertia or just bad uninformed choices, the idiotic kind of stuff that can drag your company into the ground.
It's not the license, it's the side effects: the ability to fix it yourself, community, popularity, documentation available (thanks O'Reilly) and support (the real deal).
I'm trying to picture what would happen if a customer calls in the middle of the night because the shit hit the fan and I blame it on Microsoft. As it is right now, the small company I work for has hired a kernel hacker and a contributer to Mysql that used to work for Sun, while also maintaining a healthy relationship with some of the core devs of the tools we rely upon ... we can fix and extend anything in our stack.
Can Microsoft provided support top that? I don't think so.
but having to choose between 2 similar products, going with the one that's open-source is a no-brainer in most cases.
Is it? First, you have to define "similar".
Would you rather have Quake (open source) or Black Ops? Both shooters with zombie like monsters.
Is MySQL the same as the SQL Server? Sure, to the uninitiated they look the same, but there are lots of little differences that, depending on your goals, can make one vastly more valuable than the other.
Would you prefer Mono or the CLR? While Mono has an enthusiastic and strong dev community, I bet dollars to donuts that even among informed devs, most would chose the CLR for the job at hand. And I bet even among informed CIOs they'd prefer the CLR for their shops.
OpenOffice Calc or Excel? Again, depending on your usage scenario, there are things you can do in Excel that simply aren't there in a reasonable way in Calc, although again, to the unitiated they're both spreadsheets.
My point? You rarely have the option of choosing between a closed source version and open source version of identical products. What you do tend to do is to look at two (or more products) and figure out what addresses your need the most, with open source being one of many metrics. When I decide which spreadsheet for my org to use, of course we consider OpenOffice, but the fact that it is open source has very little impact on our decision. The probability of us fixing a bug in OpenOffice is about equal to the chance that the bug fixes it self through the right sequence of bits being affected by cosmic ray. But maybe for you the fact that you can go and implement missing features in OpenOffice is important.
GCC which has probably 10x more people working on it than
any commercial compiler
Personally I think you pulled that figure out of your ass; especially since the GCC codebase is a mess (on purpose), it's been stable and good enough (and arguably stagnant) for quite a while and all attention shifts lately to LLVM.
With relatively small developer teams, they've increased in
quality as fast as any open source projects I know of
When speaking of both Silverlight / ASP.NET MVC ... they are copying other projects. And we aren't talking only about high-level ideas here, but actual implementation details.
They are great followers, yes, but what did you expect from a company with virtually unlimited cash?
Silverlight looks fundamentally different than any other product, except WPF.
Back when my company started using Silverlight, I was surprised to learn that none of my coworkers knew it was almost the same as Adobe Flex. I think this sort of ignorance about the greater world of programming is exactly what the original post is talking about.
They're only similar in that they both use markup and code behind. But that's like saying Silverlight and classic ASP are almost the same. With that said, I should have said, at introduction Silverlight looked fundamentally different. Flex has copied what I think is Silverlight (and WPFs) main differentiator, which is lookless controls (which ties into binding).
I think you underestimate the amount of people who have used Flex at some point in time.
This is like complaining someone's market share is stagnated around 99%...
As for "working on", it has two interpretations. While I certainly thing GCC has less patches per month accepted into its codebase than clang, there are a whole lot more people compiling C code with it. I would not be surprised if we discovered more code is compiled with GCC than with all other C compilers combined.
I agree with you regarding MVC being effectively a direct copy of a subset of Rails, but what are you suggesting Silverlight is a copy of? Flash? While they're used in similar ways they couldn't be further apart in implementation...
GCC has generally had perf numbers that lag the commercial compilers. Although GCC has narrowed this gap recently as C/C++ has generally fallen out of favor by the major vendors (and commercial vendors aren't working much on raw C/C++ performance anymore).
I think thats because GCC will compile anything anywhere. MS is only Windows platform, and ICC prefers Intel x86 CPUs. Since the other compilers didn't stand a chance to compete with GCC on portability, the only other thing they could compete with it on was performance. Since they focused on it, they should clearly be more performant in their niche.
Since the other compilers didn't stand a chance to compete with GCC on portability, the only other thing they could compete with it on was performance. Since they focused on it, they should clearly be more performant in their niche.
I think your skewed world view is apparent here. MS and Intel certainly didn't come and say, "One of our top priorities is portability. How can we target our compilers to platforms that we have nothing to do with? Oh wait, GCC already does that!"
Of course not. Honestly, GCC has been an afterthought for most of the history of C/C++. It's only now that it is effectively dead that GCC has started to become competitive. MS was focused on Borland for years (and it actually didn't generally revolve around perf, but generally build throughput). Likewise, Intel was focused on SPEC against xlc and other architecture specific compilers.
And as I said in another post, they (GCC, Intel, MS) have different priorities. If your goal is to have a somewhat portable C/C++ compiler then GCC is the way to go. If you want the best perf/throughput on a specific target then MS and Intel are your best choice.
To answer your question, probably not. icc has a long history of being less good on AMD processors, and almost certainly not on accident. With that said, they don't have a monopoly on x86 compilers. Microsoft's Visual C++ has been about equally good on both platforms and is far more dominant.
But with that said, I'm sure you know, that's not really relevant to the discussion at hand :-)
So, the Intel's compiler trounces GCC when the code it emits run on certain x86 processors. And Microsoft's compiler does a much better job when the target runs on Windows on x86 processors.
If we narrow the target enough, all comparisons become interesting. I am quite sure GCC will blow both Intel's and Microsoft's compilers out of the water when it comes to compile code for IBM mainframes. I am sure it's much better than Intel's when it comes to target my phone's ARM processor.
Your point was that GCC was not as good at specific things that are the sole focus of the products you mention. Intel's compiler only targets Intel's x86s and Microsoft's compiler only targets the (two or three) OSs Microsoft makes. It's not really an apples to apples comparison.
For me the Intel compiler makes sense in certain specific applications (many of my servers are not even x86), but the Microsoft compiler is absolutely worthless.
My point was that GCC is not good at specific things that customers care about (and it is good at other things, but I'd argue these things are more niche, such as retargeting for custom embedded devices).
For example, code size, throughput, debugging, and optimization are all places that the Visual C++ compiler is superior than GCC. How many Windows games are written with GCC? How many top-tier Windows apps are written with GCC? If I'm writing a Windows C/C++ application, I'm going to either use Visual C++ or icc. I'll choose icc for code with lots of compute intensive loops or vectorization opportunity. VC is better when icache is an overriding concern.
Now that may not be what you do, but to say, "Who in their right mind writes programs for Windows?", I think says more about you than it does about the respective compilers.
From my point of view, Windows desktop software is a niche. It's a good, big and profitable one, but one I do not take part in. I agree Visual C++ is a great compiler for that specific target.
Still, there is a lot more to programming than desktop applications that run on x86 processors under Windows. And embedded ARM processors outnumber desktop x86s by a large margin. I carry at least three of them with me at all times.
And embedded ARM processors outnumber desktop x86s by a large margin. I carry at least three of them with me at all times.
And Visual C++ targets ARM also, and has for years. One of the reasons I've heard bandied about as to why WP7 first party apps are so fast and responsive is because of the quality of the Visual C++ compiler. :-)
Yes, the number of non MS-ARM devices is probably several of orders of magnitude more popular. But you'd be surprised at how many embedded devices run Windows CE.
Regarding WP7, 3rd party apps are managed. But the core OS is native and 1st party apps can be native. For example, IE and the mail app are both native C++ apps.
Honestly, I think allowing 3rd party native apps would be a mistake in general. Although I'd create a partners program where you require devs to pay $10k and then go through a certification process, which allows them to ship native apps. Basically its the XBox model. Indie devs use managed code. Apps that are willing to go through the more expensive process get native access.
Why? Native apps introduce a bunch of problems that are a pain to deal with. For example, there a bunch of security issues and stability issues that native apps introduce. Additionally you have to target native apps to an architecture. It may lock WP7 into ARM, due to the ecosystem, and block it from moving, for example, to a new Intel architecture.
In (good) open source projects, the frameworks developers are also app developers. The difference is obvious when you compare the architecture astronautics of a framework built following "best practices" and one extracted from living code. WebForms looked great in developer conferences, but it made stuff that just comes out of the box in Rails like nice URLs or common layouts a royal pain. I left that world behind 5 years ago, and I hope it has improved, but I have no intention to go back.
I think you mean that is an apples to oranges comparison (or its not an apples to apples comparison).
In any case, fair enough. I tried to detangle the contributors, and while its easy to do for language, it's harder to for target. I suspect 90% of the commits are ARM or x86/AMD64, but w/o spending more time than I care to, it's hard to know.
With that said, you'd still expect, with GCC long history of being open source and open source being such a clearly superior dev model to have surpassed most commercial compilers, but that hasn't been the case in perf. Now maybe one might make the argument that perf has never been the metric for gcc, but it has always been portability. But that would also lend credence to why open source is not an ideal model for many companies -- your (the open source project's) metric of success is not the metric that we care about.
I've been waiting for someone to say this; Every development language includes a development community, and in this case, .NET communities are more or less stenciled across internal department lines and rarely extend much further. When I first started working as a developer, I thought it was just my then employer's department tribalism, but no. These patterns are things I've seen in every .NET shop I've ever worked for. Each shop had their own interal closed-source data logger, data mapping, and some other frameworks that were shared internally, but accomplished in an unpolished, mediocre manner. Each shop's code was redundantly similar and none of it was impressive.
The internal frameworks developed in .NET shops are inefficient and mediocre not because the Ruby or Python communities are full of pure genius, but because they have more than a single person continuously working on improving them. Pythonists and Rubyists have a culture of sharing and coding in a constant loop of feedback. They talk to and work with each other. People in .NET culture do not. As a .NET developer I have rewritten code that has been created several times before, and it will die in obscurity behind the closed doors of the companies I've worked for.
This is something I only begun to realize by talking to JS, Ruby, and Python developers. I've been teaching myself Ruby since September and hope to leave .NET as soon as I can.
It sounds like you've been working in soulless corporate sweatshops, which would be just as miserable regardless of which platform they adopt. Policy is the only thing preventing you from using log4net for logging and NHibernate for ORM (assuming that's what you mean by data mapping), for example, not .NET.
That's mostly true, but the culture dominated even in a small, non-corporate startup that I worked for in Scottsdale. Once, a few of us were attempting to utilize the CSLA framework in our app, but as soon as the CFO caught wind of the required reading of third party docs, etc, he stopped the effort dead in its tracks, because it would mean "having to learn something new," and that statement pretty much sums up the prevalent mentality in the .NET community.
"he stopped the effort dead in its tracks, because it would mean "having to learn something new," and that statement pretty much sums up the prevalent mentality in the .NET community."
This is an over the top and even somewhat offending generalization. I don't know if all companies in Scottsdale are like this, but I can promise you that it's most definitely not the prevalent mentality in the .NET community nor in most .NET shops I know of.
"We were told we could not use 3rd party components, which sums up the prevalent mentality in the .NET community. So we did not use the popular 3rd party component CSLA, written Rocky Lhotka, a well respected member of the .NET community."
To make it clear... how can that mentality be THE prevalent mentality when there are these extremely popular third party components such as CSLA and Log4Net. They're popular because a LOT of .NET shops use them. They're extremely popular, because that mentality is not as common as you might think it is.
I know those attitudes prevail in some shops, but that hasn't been my experience at all with the .NET community as a whole. I do choose my clients carefully, but I've literally never had a client tell me that I couldn't use a third-party library that I chose, open source or not.
Another data point: My posts on using jQuery to replace the client-side ASP.NET AJAX stuff got hundreds of thousands of views before Microsoft officially endorsed jQuery and began supporting it. There are tons of .NET developers out there using the best tool for the job.
I think your criteria has to be who and what you're working on, not the platform. There are absolutely shops out there using Rails and Django with the same mentality that makes some Java/.NET shops miserable.
Amen. This pretty well articulates what I experience at work with .NET on a day to day basis. When I code other stacks there's always a library or a plugin to do X. At work its always "we can buy something or build it in house." Frustrating to say the least.
Yeah, I dunno I like/love c# (depending on post/pre 3am...). Plus Mono really kick's ass and is a lot of fun to play with (esp. monotouch). I seem to be able to find free stuff off codeproject or stack whenever I need it. Even on the UI it's pretty painless if you avoid MS's stuff and just go with jquery and open standards. I kinda dig it to be honest, and monodevelop is a pretty nice IDE for mac now. All in all coming along quite nicely.
As much of a bummer as it is, I have to agree with many of the points in the article - it seems as if many people in the .NET community simply don't get the F/OSS mindset, that they should share code and build the future of the platform together, instead of building something solely for themselves until Microsoft releases a fully thought-out solution.
Finding contributors to projects is really, really difficult because of this, and the main OSS site (CodePlex) until recently had a lot of friction in doing so until they implemented the Mercurial integration.
I think that the recently announced NuGet (http://nuget.codeplex.com/) will be a big boost to the .net community. Having the global library repository like Perl's CPAN will be huge in bringing the community together. More users of libraries will mean more improvements too them.
It also seems like the existence and success of sites like codeplex and stackoverflow negates his thesis.
Was glad to read that he was leaving for purely non-technical reasons. I bet he'll be back someday.
Funny, but I felt the opposite. I'm sick of open source software that's documented like a donkey's ass and that never works. And all those 'developers' that can't be productive and create things, instead all they're doing is plumbing joomla with jquery while high on json.
I guess it's like a mid life crisis, you just have to flip side.
I've not used Joomla, but Drupal is the same. Most modules are poorly documented, if at all. Figuring them out is a combination of trial and error and googling. SQL injection, XSS, and other vulnerabilities are discovered constantly. It's like running a never-ending update treadmill if you use more than a few modules.
I might be getting a chance to work with Dot Net Nuke soon. We'll see if a more commercially motivated CMS is any better.
> I might be getting a chance to work with Dot Net Nuke soon.
Prepare to be disappointed.
I used DNN back in '08, and there were plenty of vulnerabilities if you peeked around in the code a bit.. The up side I guess was that they're rarely actually discovered, since there's not much of anyone paying attention.
Actually working with it was slow and tedious as well, really not an experience I'd like to relive (though for all I know it could have improved a lot in the past years.) When forced into using a .Net CMS I find that Umbraco can do the trick and be.. comparatively painless.
Having been there and done that, I can say that riding Microsoft's releases is also a never-ending update treadmill. It's one of the reasons I decided to leave it behind - it felt like they were intentionally releasing New Shiny to stop developers from having time to investigate other options.
Is that how you think of the open source world? A bunch of people writing jquery scripts for joomla? You may want to investigate a bit more (hint: google, facebook, yahoo and a bunch of other all rely on very solid and well documented high quality open source projects).
95%? Would you like to back that number up with anything?
Even if I grant you that arbitrary statistic, it says nothing about the state of the selection developers have for open source projects. If 5% of all open source projects are good, that leaves an enormous quantity of good open source projects. What languages do you code in?
I code in as3, php, and js as well. What's your opinion of PHP open source frameworks like CodeIgniter, Kohana, and Symfony? Or perhaps, to take a language that I don't code in but is often lauded, RoR? Or, on the JS side, have you seen this:
I'm very curious what your opinion (as a C# dev) is on these. My dad loves .NET (and I think rightly so), but often has (what I think to be) a bit of an outdated stance on open source that is mostly borne of a lack of knowledge of the extant options.
I agree with you. The languages, documentation, and standard libraries of .NET are awesome. The community is definitely lacking though. These days you can get excellent help on IRC about F# and on stackoverflow for everything, but there is not really a spirit of "lets build something cool" outside of F#.
I don't understand what you mean. Do you mean cool F# things? All the work of Tomas Petricek is way cool. Outside of .NET there is of course tons of cool stuff, like Clojure, Rails, Haskell stuff, the recent fuss about Yacc is Dead etc.
Just things that are cool. Stuff done in F# or in other communities like the Haskell, Clojure, or Rails community.
I'm trying to see why the things coming out of the Clojure and F# community are cool, but they aren't coming out of the C#/Visual C++ community. For example, ScottGu showed off a C#/Silverlight app built by a 3rd party that was a 3D model of the human body, where you coudl strip layers and interact in real time... all rendering pushed to the GPUs. That seemed cool to me. And they did it in a week.
I'm trying to understand why we have this disconnect.
No, absolutely, there are very cool things coming out of Microsoft with regards to C#/VC++. It's just that they nearly always come from Microsoft, there isn't an active community that does these things.
My point with the 3D body example is that it was not done by MS.
But take a look at a place like CodeProject. People post their projects and write up an article describing the technical aspects of that project. It's actually a surprisingly strong community. In the past month ~500 written or updated. I actually tend to find this place more interesting than GitHub or CodePlex, due to the exposition.
This can be misleading. Often these sorts of things are built by 3rd party companies and simply released by Microsoft or hosted on MSDN/codeplex or etc. A lot of them are just people at companies with pre-existing relationships with MS coming up with good ideas. It's not the same as more OSS-style ecosystems, but it's also not a centrally planned marketing facade, either.
Compared to anything except rails, ASP.NET is pretty good.
Yes, the viewstate / gridview bs is annoying and should not be used. The problem is primarily that corporate dev departments want interchangeable parts. They want to be able to hire a developer and him to know the API that everyone is using. They don't want magic. They want everything spelled out so that the code looks identical to the UML and identical to the Use case document as signed off in triplicate by a committee of managers. In corporate dev you get promoted for doing everything to the letter not something new and exciting.
I've seen pages with more than 100 checkboxes on them and arranged in a grid, it was like someone when mental with excel putting a checkbox in every cell.
To be honest, if rails were adopted by corporate dev you'd see things like not being allowed to use haml / sass, etc. You'd have a corporate list of approved gems in specific versions that were 3 years old (probably whatever comes with a default install of RedHat)
I'd bet if you look at what Atwood and Spolsky are doing over at StackOverflow on ASP.NET it's probably a reasonable choice of defaults and open source. There are a lot of stupid decisions you can make with .NET and I agree that the community is definitely lacking, but largely it's a mindset issue that stems from the socio-political environment they program in.
At my last job you should have seen the shit show that ensued when someone in management found out the DLLs I was handing off to other teams were written in F#, even though it was the .NET team and not the C# team. Apparently, unbeknownst to me, the largest cause of developers leaving a company is due to being hit by buses, and a dependency on FSharp.Core.dll is just unacceptable and could never be part of the automated build process.
My company is currently getting folded into a dev shop with... sub par developers/management that follows pretty much every paragraph you've written (except the F# thing, but I have similar newer code that would weird managers out to some degree).
It's depressing, the framework is great but it's like there are external forces that cause the framework to be used poorly.
I feel like .NET is solid for smaller shops, but once you get bigger those shops seem to want to fold weaker devs in and that tends to put up a lot of barriers/management.
>> In corporate dev you get promoted for doing everything to the letter not something new and exciting. I've seen pages with more than 100 checkboxes on them and arranged in a grid, it was like someone when mental with excel putting a checkbox in every cell.
That is because organizations have their own set of company rules/policies that you have to follow to the letter. Mess one up and you end up being scolded or worst, fired. People that don't have enterprise experience often say things like development should be "fun" and "exciting" without considering that working in an enterprise means that you have to develop "Business Applications" not web 2.0 stuff. This means less graphics, more business rules to follow and tons of reports to generate. At the end of the day what matters is that the accounting department or HR people used the system correctly based on standard policies of the company.
I've been a .net developer, mostly web - some desktop, since the first release. I am currently going through the interview process with a company that focuses on rails.
Part of me is excited, I've been wanting to get away from MS technologies for a couple of years now. Part of me wonders if I am going to miss the safety net of the compiler and IDE, and if the grass truely is greener. I started out doing perl/cgi and the asp/vbscript, so it almost seems like a step backwards tool wise, but with much better languages and libraries than I had the first time around.
If anyone has any insight, it would be much apprecaited.
I've found it to be a really great experience stepping out of a world where I felt like I was constantly re-inventing the wheel into a world where I was constantly seeing the result of a lot of eyeballs and a lot of great decisions.
Once I started relying on my tests/specs to ensure my code was working properly I started to appreciate the beauty of the code I was able to write. I also started noticing the volume of code I _didn't_ have to write.
I think you'll find it a great step forward, good luck with the job hunt!
I hear often "units test... beautiful code" and well, I agree that code can start off that way but how does this style of development/train of thought work in the long term? Are there any examples of agile software that is over 5 years old? How about 10?
I've been doing development with Rails on personal projects and while Netbeans isn't Visual Studio, it's still a pretty solid development tool.
I also dig how the local Rails environment shows you every call that's being made, plenty of solid logging integration, etc. Also the gems and other libraries being open source and freely available is great, and Ruby crushes C# with regards to Metaprogramming if you're going to go deep (which you probably will).
The debugging style is different but it's definitely several thousand leaps above ASP/VBScript. You'll be more than fine.
I'm sorry for that, I guess I missed out that details since the topic is about .NET.
definitely several thousand leaps above ASP/VBScript
But still, I disagree with the choice of words in your comment. I used VS Interdev for classic ASP debugging in the past, and I find it sufficient enough. Yes, I'm sure there are other IDE/tools which can do more than Interdev, but I don't think it will be several thousand leaps.
Being as a core asp.net developer for 7 years and now working as a python/django from last 5-6 months; I can say every .net developer should change his development platform at least for couple of months, because it make you more mature developer.
.net is a good platform, but the real problem is you have to wait for MS to develop something. For example before "asp.net mvc" there is no option to use mvc in MS world.
For me learning python/django was not a big pain; but running them on ubuntu is a real pain; and i think this is true for every ms developer who want to change his platform.
On linux platform options are great and there are lots self motivated developers and fun projects which is not true in the case of MS.
One more thing - lots of start-ups work on the non ms platform. Once people talk about asp.net mvc they only talk about http://stackoverflow.com/, but we can find more successful example in rails, or django or php; which makes every ms developer on back-foot.
PS: I love c#, asp.net mvc and VS as a developer tools.
This is not correct. There were multiple MVC frameworks on top of ASP.NET years ago, including Monorail and FubuMVC and a lot more actually. All of them were open source. Some of them were quite good, actually.
Were you active there? Did you contribute something? Did you commit fixes/features. No, you did not. But of course you do contribute to the complaining.
I'm in the same boat but for different reasons. I find learning a new language challenging and fun, I've just become bored with .NET and decided to pick up Ruby on Rails. I've seen great community in RoR, beyond what can be found for .NET, but that's not to say .NET has no community.
I'm a .NET programmer, and i really don't hold allegiance to any one technology or platform.
There are some good points here, but who cares? The real issue is that Microsoft treats developers as if they were a separate marketing channel -- with promotions, partnerships, walled gardens and the like.
So don't play that game. I'm working in F# on mono, on my own stack. Do I care about branch commits, bad abstractions, onerous licenses or such? Nope, not in the least.
Look, there was a day where you had to take the entire MS stack or leave it. But that day is past. Now you can pick and choose a bit. Sure, not as much as we'd like, but it's still open enough for developers to control their environment.
If you don't like the game Microsoft plays with the development community? Then don't play it. But that doesn't necessarily mean you have to walk away from the entire thing.
There's plenty of help available on F#. Mono was painful, at least for me, but nothing like C++ or .NET internals.
When I'm coding I look for community support and ease of solutions. I have that. So why again would I switch?
I guess what I'm saying is that I don't understand your criteria. Who cares if famous person X answers your question? I just want to get my work done, not become a celebrity or hang out with the cool kids.
Once I decided to move to linux I thought about moving to OCaml, Java, or Haskell. It's really not that big of a leap, and I've done some Java and OCaml in the past.
But in the end I liked having other .NET folks making assemblies that I could pull into .NET and use. A zillion guys out there coding for the CLR, and I can leverage that.
All that other stuff -- TDD, CI, good abstractions, dependency management, etc -- that's just good coding practices. Has nothing at all to do with .NET, does it?
In you have a hammer and it's not working, stop hammering. But you don't have to throw out your entire toolbox. Just pick up the screwdriver. In fact, that's the difference between the tool -- VB, C#, MVC, whatever -- and the toolbox. Seems like you just jumped from one example to a broad generalization.
Whatever works for you, though. That's my whole point: instead of making big generalizations about the state of microsoft, .net, and the community, just mind your knitting. You'll kill more time thrashing around reacting to perceived problems than you'll save from a new platform. Don't do that.
This isn't really an argument for or against .NET. Perhaps Java rocks for you. Just don't waste time trying to find the perfect language. Instead go make things that people want. Even if you do that at 50% efficiency, you're still better off than using the perfect tool making a bunch of stuff that has no value. There is a cost to switching.
I also had a bad experience with mono. I tried to run a very heavy site on it when asp.net first became available for it. It totally crashed. I'm sure it's matured a lot since then.
After that happened I saw a blog post by someone at microsoft about their testing. They have 1.6 testers for each dev working on asp.net and they've got a warehouse of servers running millions of different tests for months before shipping.
Then I read about who was working on mono's asp.net implementation. Just two guys in a basement. No testers of course.
Your performance will vary a LOT because there are so many changeable pieces. Mono 2.8 brought some perf wins with ASP.NET. mod_mono is the only recommended way of hosting ASP.NET right now.
Because I can deviate from the defaults so much if I wish, I was able to switch the Mono Garbage Collector from Bohem to sgen (mono --gc=sgen) and get roughly a 30% increase in reqs/sec.
There is a team dedicated to ASP.NET on Mono and I've really found them great to deal with. When I was seeing perf and memory usage issues, over a period of a couple of weeks they helped narrow it down and made some very major gains there. Those are in git master right now and will be shipping with the next mono release.
Devs often migrate from one project to another and it really is not two guys in a basement. They do call on resources from right across the project. I saw firsthand when talking to them about an issue, they discussed it with their asp.net guys, guys working on the VM, a guy working on the GC and a guy working on the new profiler and made adjustments to it to help track down the issue.
It was all done in the open, they committed their patches, it fixed my issue, and this is why I love open source.
I plan on writing a long blog post once I get it all nailed.
It will probably go something like this: the linux environment is like running an operating system at the same time while you're coding it -- little pieces of code and scripts here and there. That makes linking, compiling, and installing the primary chores. Although there is an awesome package manager, it doesn't have the coverage you'll probably need. So lots of different pieces to plug in, lots of advice on the net, some of it bad or incomplete, and instead of just googling you end up doing quite a bit of thinking as you assemble your development environment and OS. Nothing at all like the VS2010 pnp stuff.
But I'm specifically referring to F#, which is a PITA on mono right now. I understand it's going to become part of the standard distro. Can't wait for that to happen. The default Monodevelop c# environment looks easier, but even then I'm having to do things like figure out where the gac is, find sql drivers and install them, bludgeon my way through mono dll linkage problems (Hey mono -- it's in the gac, it's in the directory, and you can compile it. Why the frack can't you find it when you run the program? I have to statically link my mysql driver, making my 2K executable into 1.5MB. That's hosed.)
Example #2: I have some generic type magic that works fine in Windows. Basically I throw an object at a function and it generates an SQL INSERT for me. Works and tested and being used in Win. Over in mono, however, for the type name all I'm getting is "System.Object" which, of course, is the correct base type, but not the real type name the caller is using. Can Mono handle this type-fu? Or am I stepping into some area the Mono guys just haven't developed yet? Don't know. Could be a while trying to track that down. Just like all these other snags.
It just seems like every little thing is more painful than it should be. Like debugging. Still haven't figured out how to get the interactive debugger to work on F#. I'm sure after an hour or two I'll figure it out -- or not. And there's 20 things like that. Because I'm new to the entire thing, each little step hurts.
I think it's doable, I think it's worthwhile, but if I were taking a team through this I would definitely want somebody onboard who has already been there, done that (and could mentor). Quite frankly doing it on my own gets a bit discouraging at times.
It sounds like you might only be doing web dev, so I appreciate that you might not have experience with this, but:
I've been looking at languages and VMs for doing GUI desktop app work. Specifically, cross-platform apps using native GUIs on each platform. Java (I normally use Clojure where I can) has decent cross-platform toolkits, but not so great native bindings. .NET obviously has good Windows GUI stuff, Mono's GTK# and Qyoto seem to work well for Gnome and KDE, and MonoMac seems to be going places. The main alternative seems to be to drop to low-level languages. (C, C++, Obj-C). Do you think it's worth it for me to go ahead with .NET and Mono considering the difficulties you've had with Mono?
I don't want ASP.NET. All I want is a resident .NET program that gets called when an URL is visited, getting all the parms passed like CGI. I can handle the rest.
I really don't want or need the ASP.NET stack.
Is there some way to do this? So far all I have is a stand-alone program that gets loaded each time using Apache and CGI. Can't seem to figure out how to make it resident and re-entryable without using the HttpHandler objects off the ASP.NET stack, which I don't want to do. Lord knows it was tough enough getting an environment working. Going through the motions of overriding a part of the ASP.NET pipeline in a foreign environment is probably just a bridge too far for me for this project.
>I guess what I'm saying is that I don't understand your criteria. Who cares if famous person X answers your question? I just want to get my work done, not become a celebrity or hang out with the cool kids.
If something is broken in Clojure, I can either fix it myself or notify Hickey about it personally on IRC.
> instead of making big generalizations about the state of microsoft, .net, and the community
You just got done accusing me of caring about celebrity and hanging out with the cool kids.
The shift in quality of people I worked with when I switched from .NET to Python was stark. It's a fact that several of my friends who still work in .NET moan about.
I'm not "wasting time trying to find the perfect language".
I love .NET the platform -- the VM is absurdly efficient (almost too efficient, making egregious algorithm choices functional), and C# the language is superb and absolutely first class. There is nothing that shames either of those contenders, and I would argue that there are few that even legitimately compete with them.
Having said that, I couldn't agree more regarding the community. When MVC came out my only excitement about it -- given that I had been doing something better with .NET for closing on a decade -- was that the default baseline would hopefully be better than the terrible abomination that is WebForms (a construct either made to cripple web development, or to hold the hands of Visual Basic developers with a big viewstate diaper). But otherwise the excitement was hard to accept because it wasn't like it was actually something new, or something that you couldn't already do yourself with minimal effort. I'm seeing the same thing with some of the concurrency additions in .NET 4, where some trivial constructs are blessed with some syntactical sugar and it's treated like it's a new revolution in development.
Which brings up another oddity of the .NET community in general: There is a tendency to embrace and vigorously adopt whatever abstraction Microsoft grunts out, regardless of merit or actual value that it adds. The simplest need becomes layers of poorly contrived, poor fitting abstractions, where developers instead of asking "why should I use this?" instead are too busy worrying about "why didn't you use that?" The former question is much more valuable, but the latter is the defensive reaction of too many. LINQ is such a tool that is, in my mind, used for evil far more than good, but because it's a part of the gamut you have to mash it in wherever possible.
I think the word we are looking for is "fan club". A community participates, a fan adopts and loves. A community is bidirectional. Whatever interaction happens around Microsoft's products is not. It's interaction between fans, not between the fan and the object or the creator of its devotion.
I develop on the Windows platform since its inception and I'm not aware of any Microsoft community you refer to. I know that there are millions of people who develop with the Microsoft tools and obviously the more people use something the more that something gets abused.
On the other hand try getting a job in a decent company based on tech that is also a Microsoft partner and you'll be torn into pieces with the questions about deep platform understanding.
I'm not talking about outliers. I am talking about the majority of the user base, with few exceptions. To put a bit of a bigoted statement into this, let me say that traditionally Microsoft had several development streams, with the least talented, least motivated career developers finding the Visual Basic stream. The streams converged and it is all the worse for it.
To use the search engine "index", it's a quick way to gauge how frequently a user base dares to go outside of the trivial. With .NET I am frequently amazed when I'm trying to do something remotely complex and in looking for people discussing the topic, find nothing but a few unanswered questions via search engines. It has always disturbed me, and it in essence speaks to the linked article's point.
Comparing the .NET user base with the PHP user base also says a ton about its technical prowess. PHP is the Visual Basic of web development - it's considered an entry-level language and has a lot of problems. That said, Visual Basic paid a lot of my bills between 1991 and 1995.
I've just recently ported a python/Django site to c#/.NET. The switch was not done for performance reasons (or community for that matter) but as a consideration the .NET version was an order of magnitude faster on the same hardware without any effort to optimize.
Another day, another leaving .NET/Java for Ruby/Python post. This very link btw got posted twice, the first post was 3 months ago. Aren't you guys tired of that? We get it - HN is the place where people will go at great lengths to contribute/code all night rather than use something that works out of the box and juts move on. I am always surprised on the often hardcore technical problems discussed here and the relative lack of in-depth startup/business topics - and this is what starting up a company really is all about.
ASP.NET MVC is probably in the top 3 web frameworks created, and WebForms is not that bad either. ViewState/Page-Lifecycle - you can use this or not - it is up to you. You can always do the HTML5 stuff in ASP.NET too, and most of the code is jQuery now anyway, so why the big fuss?
And what's wrong with the 3rd party vendors? They exist, support and enhance the eco-system producing some great tools along the way. Like Rasharper. Like UI widgets. Like database tools. How many times have you seen an open source project with great potential just die because there was nobody to take over and maintain it? Understand - some companies have REAL business out there - not the next social this, web that average crap startups have on $0 revenue. They want REAL partners that they can rely on and WILL pay for that. Heck, you are paying $100K to your developers, why not pay $5K for a proven software and win some time/use the resources of the partner? What is the friggin' deal with that?
Grow up. Is it like mid-age crisis? You just need switching things now and then and trying to figure out the reasons? One of the top reasons I've seen companies fail is to switch technologies just for the sake of switching and "keeping it fun" - from a business point of view it is ridiculous to invest 8 years in a framework and then just switch, like that.
I'd be interested to know why a contrary opinion honestly held and expressed deserves your downvote (or the 2+ it did get), or your pointless comment.
There is an HN Two Minutes Hate aspect to the steady march of "MS platforms stagnant / not supercool like the flavour of the week we're putting into production" posts getting voted into the front page. News about actual open source projects and cool stuff on C#/F#/.NET/Mono tends to languish / fail to hit front page, consistently. It's fair to call this out.
I'm not saying that open source is staggeringly vibrant and healthy on .NET, though it is making steady progress. I simply try to keep in mind that there is a whole wide world of workaday devs who punch a clock out there, and .NET has big reach into that world.
Sure, it is fair to call this out and I am glad people are doing so. What I find off-putting is the way in which the commenter did so. There is clearly no interest in a civil discussion when someone suggests that the opposing side needs to "Grow up" and that their opinions are the result of a mid-life crisis.
As for my comment being pointless, I agree. Shame on me. Won't happen again.
EDIT: Upvoting you for busting me on my hypocrisy.