As a .NET developer that's currently working on a 100,000+ line application that uses all parts of Windows, .NET Framework, and the C# language, I suspect this person is pointing his finger in the wrong direction when he's blaming Microsoft, VS.NET, and C# for "getting in his way".<p>Best case scenario, is he has been using the wrong tools to solve the problems he works on. But can't admin his own fault.<p>If anything, what I'm working on now would be downright impossibly complex and infuriating if written in Python (his example of a language and ecosystem).<p>To me VS.NET is incredible. The .NET framework is incredible. And documentation and information is readily available. But more importantly, the problems I'm solving can't be more easily solved using another stack.<p>And every time I blame one of the above, a few days later I realize that the real issue was just a stupid mistake I was making myself...<p>As an example, just the other day I was using a BackgroundWorker (new thread) to do some work outside the UI thread. I needed to do 3 or 4 tasks and decided to re-use the BackgroundWorker for each task (instead of using a new one each time).<p>Of course problems started showing up. For a while, I was convinced that VS.NET was debugging on the wrong thread, and that there was an issue with re-using BackgroundWorkers in NET. I mean I'm a good programmer, it can't be possibly my fault!<p>Basically, I forgot to unsubscribe to the BackgroundWorker events. Which caused the previous DoWork attached anonymous functions to run multiple times.<p>.NET is the way Windows applications are built. VS.NET has no rival on this platform. And this stack is not any weaker because people such as the author leave us. Referencing a few negative blog posts does not prove .NET is dying and that "developers are leaving for greener pastures", which by ALL METRICS is completely not true. If the author wants to think that Python and whatever other choice of IDE will now solve his pain... Then let him eat his cake.
Funny to see this considering my opinion is pretty much a polar opposite to Chris'.<p>In the last couple of years C# has gotten better than ever. LINQ, Lambdas & Generics combined with the IDE's autocomplete and refactorings have made the language really nice for power devs.<p>The next release will include a <i>Compiler as a Service</i> which could be a game changer if it's embraced by the community and if it's not borked by Microsoft.<p>A good <i>rule of thumb</i> for .Net is that anything from Microsoft which is built around a tool should be <i>avoided like the plague</i>. For example <i>Entity Framework</i> and <i>WPF</i> are horrible tool-bound monsters. They don't play well with version control, don't play well with clean coding (POCOs) and almost feel designed to sell other tools (<i>SQL Server</i> / <i>Expression Blend</i>).<p>Entity Framework is especially bad. It combines terrible performance, terrible scaling (it has terrible support for large schemas) and until recently didn't even support "code first" development.<p>Thankfully, like other dinosaurs that kind of thing is going the way of VB6.<p>To add a bit of context: I have a pretty broad background - been coding for 21 years (started at 10) and have experience implementing something significant in: C64 (BASIC/6510asm), Pascal/Delphi, VB, Java, PHP/HTML/JS, TSQL/SQL, C# and ActionScript/Flex. I've dabbled with Ruby and the beautiful Python.<p>I abandoned dynamically typed languages for serious projects (those expected to work for > 5 years) because of the poor refactoring support and the dominance of style over substance in the community. I work in the Enterprise, and there software maintenance quickly dominates the cost of projects making the big two static languages a better choice.<p>I still, of course, turn to dynamic language when they're the best solution to the problem. For example for situations where speed of development dominates returns (think opportunity cost) or where a language is deeply embedded in a specific community (Python and NLP).
I'm not a .NET person. Heck, I'm not even a Windows person. I found this sentence interesting:<p><i>Things like the Microsoft "professional engineer" who advises you at your invitation, and then sends e-mails behind your back to executives to inform them of his concern about the "business risks" of non-Microsoft technology choices.</i><p>That's really weird. Who finances these commissars? I mean, I've seen this sort of thing take place, but only when a two-letter consultancy was gunning to take over some director's entire department. What's in it for the commissar?
I'm a .Net engineer who feels like this day will also come for myself very soon. Don't get me wrong, I love .Net. It has treated me well and I love the direction that Microsoft is going with Azure, their adoption of open source, and the resources they provide for startups.<p>Sometimes it's just hard to 'switch over' like the author as done. I've done plenty with Java and PHP too but there's nothing there that excites me really. So now I'm dabbling with Python to see if there are any sparks there. Have I made a good choice? I guess we'll see.<p>I do find it interesting that you don't seem to hear people say things like "I'm done with Ruby, switching to Python". People make a bigger deal of leaving .Net and Java as if it's something you'll never go back to.
This is the problem that you define yourself by your programming language/environment/OS of choice, versus just being a really good problem solver.<p>See: <a href="http://www.kalzumeus.com/2011/10/28/dont-call-yourself-a-programmer/" rel="nofollow">http://www.kalzumeus.com/2011/10/28/dont-call-yourself-a-pro...</a><p>I would say don't call yourself a [Java|Javascript|C|C++] developer.<p>If your career were a blog post, languages are more like a tag than a title.<p>Contrast "I Solve Problems" with "I Only Solve Problems with PHP."
Gotta admit that I'm getting to that point too, so good for you. I've been working with the .NET stack since the beta, and at this point in my career I dabble in other languages, but keep coming back to the bread and butter since "that's what I know". All the while I'm involved in the ALT.NET community secretly eyeing Rails and Python wondering when and if I can take a hard left and make the jump. I'm sick of working in the .NET box where we get excited about tools and features that were released years ago on other stacks, just to have a port done that's about 3/4 as good as the original.<p>tl;dr; good for you man.
The "tl;dr;" version:<p><i>I just want languages, tools and frameworks to help me get work done and then get out of my way. Is Rails a clean code panacea? Is Javascript elegant? No. However, am I more productive, less burdened and do I have more options and flexibility? Absolutely. I am far less frustrated trying to produce elegant, clear, extensible and maintainable solutions in these dynamic languages. I also find that dynamic languages, modern web frameworks and -nix is just more fun.</i>
Two years ago I began developing a large web application and I had to choose a language and stack. Having built applications on .NET and PHP most recently, I knew I could fall back on either and be safe. I decided to investigate RoR and .NET MVC. For whatever reason, RoR felt strange and I knew it would have a steeper learning curve initially, but probably be more efficient to develop with in the long run. On the other hand, .NET MVC felt a bit more familiar, and had many attractive qualities that "appeared" to mimic RoR. I went with .NET MVC. Now 2 years later I find myself spending my day job in .NET MVC and my side projects are all RoR. I found that .NET MVC was a great bridge from regular .NET to RoR. I am frustrated that I didn't pursue RoR harder 2 years ago, but hind sight is 20/20. I am extremely happy to be working on side projects in RoR because honestly it is more fun. Don't get me wrong, RoR isn't all roses, I'm just finding fewer weeds!
I'm also primarily a .NET dev, using ASP.NET MVC. But for my most recent project I used node, and I'm hooked. Probably because it allowed me to take existing JS knowledge and apply it, but still. ASP.NET MVC just feels too heavyweight afterwards.<p>That said, whenever using something other than C# I miss LINQ. It's awesome.
This reminds me a lot of posts I used to see on Javablogs 5-6 years ago. Not sure what that means, but I don't think it's the language so much as where people _are_ with the language. In 2005-2006, there were a lot of folks who'd spent almost a decade with Java. They were good at it, but they were also getting bored and looking for new horizons, and Ruby and Python were available. Beta versions of .Net rolled out in 2000, so we might have the same kind of phenomenon.<p>None of which is to say other languages might not be better. But being better has never been enough, on its own. If it were, C++ might never have gotten a start. Language popularity depends a lot on history. But boredom/dissatisfaction with a dominant language can help give a new language a chance.
I'm using .Net (MVC3) for my current web startup. I thought about python, I thought about RoR, I thought about Java, but I decided on .Net.<p>Why?<p>I knew C# well at the time, maybe not the best out of the languages I know, but well enough to hit the ground running. And I knew with MVC3, I would be running in no time. Visual Studio is an awesome environment IF you have a fast PC. I have a fast PC. LINQ, and LINQ to SQL, is incredibly powerful. I can drastically alter my SQL DB, and have my ORM code auto-generated immediately.<p>Out of the box, .Net takes care of a lot of the detail. I can optimise this detail later if I need to (I hope).<p>With the aim of this code being maintainable, and having hated maintaining a large python code-base before, I wanted to use a statically typed language.<p>Importantly, I knew .Net was going to be scalable when I needed it be (stackoverflow.com as an example).<p>How is it going?<p>Very well. But I've not launched yet. I have no regrets, and think C# is an amazing language to work with.<p>I would generally consider myself language agnostic, so whilst the decision was hard, I was confident it wouldn't matter too much in the end. Hopefully that will remain the case, but you never know what's around the corner...!
"It seems as though the whole philosophy of .NET centres on catering to the novice... .NET, and specifically C#, both coddles you and then scolds you at every turn."<p>Perfect summary and exactly how I feel about .NET.
After seeing a few blogs like this, I was starting to get the general impression that C# and .NET were dying out.<p>However, according to the TIOBE Index [1], C# was actually second in growth in 2011, just behind Objective C. Not sure how reliable that is, but thought it was an interesting (and unexpected) trend.<p>[1] <a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html" rel="nofollow">http://www.tiobe.com/index.php/content/paperinfo/tpci/index....</a>
I too have second thoughts about .NET. I absolutely love C#. I've worked in just about any language & dev stack out there and, to me, nothing comes close to the immense power of C#.
My biggest gripes with .NET is tooling and deployments. I do agree that sometimes you wait for ages for tools that are already available in other development stacks (think EF or Team Foundation). Deploying on .NET is an absolutely atrocious experience. Dealing with MSBuild, XAML workflows and WebDeploy is just a royal pain in the butt. On the other hand, I do have to say that when you have a rock-solid group of engineers working on a complex .NET solution, the architectural patterns are much easier to implement and bring new people into than other stacks I'd worked on. Everything just looks cleaner, plus you have some pretty solid frameworks you can tap into such as MVC for web, LINQ for powerful querying, WCF for service-oriented needs, WPF for beautiful desktop apps. Moving from all of this is certainly pretty tough. But I sometimes feel the need to embrace the cool stuff that's happening with the speed of light in other stacks. It's just too big to disregard.
>> You’d probably have to have been living under a rock to have missed all the previous blog posts from others leaving .NET for greener pastures<p>Well some people have the opposite experience and also have written posts as to why they are moving to .NET.
To me its about trends as much as anything. I noticed a few years ago that the kids on reddit were not interested in .NET but were interested in JavaScript etc.<p>So, honestly one of the main reasons I got out of .NET was because it seemed like it wasn't as cool as I thought it was anymore.<p>Another reason, although this is probably a secondary rationalization, is that open source isn't really that big in .NET, and open source seemed important (and cool).<p>Which isn't to say that there aren't lots of rational reasons to get out of Microsoft development, but I just think that we should acknowledge that people don't usually do things for rational reasons. They mostly do what other people seem to think they should do.<p>Anyway, I don't see anything wrong with drag-and-drop components or intellisense or even compile time checks. That stuff is really helpful. I am working on composable drag-and-drop widgets for JavaScript/CoffeeScript web applications. And I think that less code is better, and if you can accomplish the same thing with a GUI designer, drag and drop and some property editing, then that is better than writing source code to do it. Its better engineering.<p>IDEs that are slow are not great, of course. The biggest issues for me are that most everything is closed source and generally the language C# is much more verbose compared to CoffeeScript or JavaScript. Also your software will only run on Windows desktops and not over the web.
.NET is finally mature enough to get the "I'm leaving" posts.<p>There were plenty of these in heady times of '06 and the Ruby rush. Except with Java.<p>I'm sure at some point there were some for Cobol and Fortran and C and C++.
In the end it all boils down to use the best tool for you for the job you're working on.<p>That aside, going from Rails to .NET MVC has been a lesson in patience. While I am glad to have skipped Webforms, there is still something about .NET MVC that weighs on new ideas.<p>It's just easier to get up and running with a Rails stack and get your idea out there.<p>But that's just me, maybe for you it's Python, or C or Assembly. Whatever it is you work best in that's what you use.<p>Posts like this can help a community identify weak points though so I'm always glad to see them.
My biggest pains with .Net C# are:<p>1) Not runnable properly on Linux (I always have trouble with mono - maybe its just me)<p>2) Compilation and app restart time etc are annoying when wanting to develop rapidly<p>LINQ and the syntax of the language, VS etc are all awsome though.
I have a lot of fondness for C# (version 3+) even though I don't use it any more. VS is a good IDE, too. Windows itself is meh.<p>Overall, you can do a lot worse.
There are probably 2 reasons why I would look at .NET and one of them is not pure .NET/Windows anyway.<p>1) Consulting/Contracting gigs<p>2) Mono for cross-platform GUI development
I have worked pretty much my whole career in .NET, and I think it's pretty good in terms of actual coding and development. It has gotten better by leaps and bounds in recent years. .NET and C# aren't the problem, the insanity of the Windows stack is the problem. So many stupid little things unrelated to your code can go wrong, the toolchain is paltry, and deployment is still a mess.<p>If you're actually using drag-and-drop you probably already lost.
I no longer do .Net development and leaving it all behind was a breath of fresh air. It was ridiculous.<p>I find it monstrously overblown and while its proponents/fans call it elegant I think its a horrible inelegant mess. Great if all you do is Windows, no doubt.<p>Plus I don't trust Microsoft on Mono (which at one time I thought was a neat idea) and I don't trust them not to dump their existing .Net devs like they did with VB6 sometime down the line and without warning as soon as they and their marketing department decide the next shiny-shiny programming paradigm has arrived. There are plenty of rumours about this and I frankly don't discount any of them as being too far-fetched.