Warning, serious rant ahead, get yourself a cup of coffee and relax…
C# has been my bread and butter for quite some time, and before that it was Delphi. And you know what, I loved Delphi. It was a powerful language, one which was fast and relatively easy to develop in. I wrote Delphi code for years and enjoyed it. As the .NET platform was taking off I started to take a serious look at C# because it seemed like the most obvious jump from Delphi for what we were doing, which was writing Windows desktop applications. And I loved it!
Delphi was great, but C# was better. There was no denying it. Having a well thought out, managed language, great libraries, fast runtime, great IDE, familiar syntax was awesome. I was totally hooked. Sure, I loved Delphi, but C# was a brand new language designed from the ground up to be fast and easy to use. It was everything I wanted. After that point Delphi just seemed so clunky and old. Manual memory management seemed like such a pain. My love of Delphi started fading quickly after I had glimpsed into the promised land that was C#.
Fast forward eight years or so and I am starting to find myself in a similar predicament. I still think C# is a good language, and it has come so far. The .NET platform and ecosystem has matured and contains everything that almost any developer could want. I’ve developed an enormous number of applications with .NET, everything from tiny Windows forms applications to huge websites, and I like to think that I have been fairly successful doing it.
Over the past 6+ years my focus has been entirely on web applications, and I was specifically a web forms developer for several of those years. I learned all of the tricks and incantations necessary in order to create decent websites with web forms, but after a while I realized that I was fighting the web, and not working with it. Something just wasn’t jiving with me, I couldn’t easily use all of the cool new frameworks that I was hearing about like Prototype, Scriptaculous, and MooTools. I had to download and install some library in order to get any Ajax support at all, and what I mainly got was update panels which were easy to use, but pretty terrible in terms of trying to actually implement a light, interactive site. I was unable to do any client side page modifications or I would get screamed at, I was just all around fighting the way the web worked.
It was along this same time that I started to explore Ruby and Rails a bit more, picked up a copy of Agile Web Development with Rails, and quite frankly, I was absolutely blown away by Ruby’s power and Rails’ simplicity. I felt like I was getting left in the dark ages, but developing on the .NET platform was what paid the bills, so I started looking for better ways to develop .NET and C# applications. And I hate to sound repetitive, but I think overall things worked out pretty well. I started using the parts of C# and .NET that worked for me, and throwing the rest out.
I became an honorary member of the ALT.NET crowd, even though I actively distanced myself from them for a long period of time. But I started heavily promoting unit testing, dependency injection, mocking, ORMs, etc… I was using Subversion, NUnit, Rhino Mocks (then later Moq), NHibernate… all the tools that a good little ALT.NET person was supposed to use. But you know what, they allowed me to produce applications that were better than most of the tools that came out of Microsoft. And I got very into these tools and techniques and how they could make your life as a .NET developer easier.
Web Forms Hurt Justin
But at the same time, I was still heavily feeling the pain of web forms development, and I was still pining for greener pastures. I started looking into Monorail and loved it! What a great tool, and all in C# and .NET. Unfortunately at the time, I didn’t have a lot of luck using it at my day job, since we still had a ton of web forms lying around that wasn’t going to rewrite itself. Some time passed, and I started to hear about this new framework that Microsoft was developing called ASP.NET MVC. And I was, to say the least, excited. A framework for writing modern web applications, and it was coming out of Microsoft! That meant that it might actually gain some traction in the .NET world.
Around the same time I also started looking at another project that Microsoft was working on…IronRuby. I was really excited about IronRuby as well, I wrote a very large blog series about 2 years ago called Learning Ruby via IronRuby and C#. It was very well received, and I truly enjoyed writing it. I also got looped in to be the technical editor on Shay Friedman’s IronRuby Unleashed book, which was a ton of fun! I was excited about the future of Ruby on the .NET platform, and I was excited about what could be done when combining ASP.NET MVC and IronRuby.
What a great pair! Now, I know what you might be thinking, if you like Ruby and you want an MVC framework, why did you just switch to Rails? Well, the thought had crossed my mind, but overall I felt like I was still tossing out years of experience on a platform. I wasn’t looking for the easy road, but I was definitely considering job security and availability in my area. I haven’t always been the rockstar that I am now 🙂 Har har har! But realistically, I was heavily involved in the .NET community, and I was invested. I still am invested, I want to see the platform succeed and enable developers to do great great things.
So anyways, here is how I thought it was going to play out. ASP.NET MVC was going to be developed, and things would go swimmingly. At the same time IronRuby would be developed, would grow in maturity and be released. Once it was released as 1.0, we would get full support in a future version of ASP.NET MVC. I even heard some of the same things being intimated by Microsoft employees. It would have been pretty awesome, but unfortunately it seems like it is an idea that is not going to happen anytime soon.
Which brings me to where I am at now, and my recent rant on Twitter. You see, I recently founded my own company. I am doing a bit of consulting to pay the bills, but my main goal is to build a product. I want to create something and watch it grow. In fact, the project I want to create will be aimed at the .NET developer market, but it is going to be a hosted service. I’m going to need to build a fairly extensive website in order for my users to interact with. I’m standing in front of a giant blank slate, and I’m having second thoughts.
Sure, my product is aimed at .NET developers, but should I build the website part of it in .NET? To many it may sound like an obvious answer, but for me it hasn’t been so easy. If I write the site in C# and ASP.NET MVC I’m tied to that for the foreseeable future. And that isn’t the worst thing I could imagine, I actually really like ASP.NET MVC, but it truly upsets me that in order for me to work with ASP.NET MVC I don’t really have a choice but to use C#.
And you may be wondering, “what is so terrible about that? I thought you just said you liked C#?” Well, I do, but I feel like I am coming to the end of that road. You see, I’m tired of all of the ceremony that comes along with writing C# code. I’m tired of interfaces, non-virtual methods, dependency injection, mocking, stubbing, generics, static, sealed classes, internal classes, etc… I’m tired of having to write my code differently than I want to, just so I can cram a few tests in there. I’m tired of wrapping framework classes so I can test them. I can’t tell you the number of times that I have written wrappers around caching, http context, file IO, the database, cookies, etc… I’m just tired of it. I’m tired of all of the limitations.
And these aren’t design flaws in the platform or the language. They did things the best way they knew how at the time. And they did a great job. Many of those people given the same set of requirements would probably repeat it all again, and that is fine. I, however, would not. If I were given the chance I would prefer a language that gives me freedom and choice versus a language which locks me down. The programming world is becoming more dynamic, and I think that the dynamic keyword in C# is a sign that while the language is rooted in type safety and performance, these times they are a-changin’.
Choices, choices, choices
And so I’ve found myself with a choice. A choice that, quite frankly, I’m pretty pissed that I am forced to make. I’m forced to stick with a platform that I know and love, and keep using the same tools and techniques that I have been for the past several years. Or I can move on to Rails and get the language I want and a web framework that is designed for it. If I pick that road then I’m going to have to learn a whole new ecosystem and new environment and it will be a challenge. Undoubtedly a wonderful and exciting challenge, but one that would be more welcome when I wasn’t trying to build a company.
I still haven’t decided what I am going to do. On one hand, I love the .NET community and everyone I know in it. I know that everyone likes to play up the community that they are involved in, and everyone outside of the MS community thinks that we are all just a bunch of shills, but you couldn’t be further from the truth. Most everyone I know in the MS community is just hard working developers that want to write applications to the best of their abilities and in the best way they know how.
I know that this post isn’t the polarizing, rabble-rousing, flame-war that you were hoping for, it is just one developer who finds himself in an awkward position. One that I think many developers are finding themselves in. Unfortunately the .NET community has had a few too many “I’m leaving .NET” posts recently, and I think that people are starting to pull back and get defensive. There are a few posts that have quite the elitist bent as well, which doesn’t help things.
Overall though, I think it is a grave mistake for the .NET community to dismiss all of these people as elitists and troublemakers. Instead, I think we should think long and hard why this trend is occurring with such frequency. Just this evening on Twitter Rob Conery made these two tweets:
Know anyone who has made a massive change in their career? Moved from one tech to another, or perhaps changed something up? Lemme know.
Specifically I’m looking for someone outside .NET who needed a change and came TO .NET.
To which David Heinemeier Hansson replied:
Tell me when you find Lockness and Bigfoot too!
And it was humorous. I chuckled, but at the same time there is a dark truth to that sentiment. Do you know anyone out there developing web apps on Ruby, Python, or PHP who is voluntarily moving to .NET? I hear about lots of old school language programmers coming over, mainly because their enterprises are dragging them along, but web developers seem to be shying away. (and yes, this is the internet, as soon as I make this statement, you will inevitably show up by the truckload)
Does hearing that question piss you off a bit? I hope so, because it means you care. And it is a problem that needs to be addressed in the Microsoft community. Until the problem is addressed, the Microsoft community is going to have a constant leaking of its best and brightest to other platforms, while having a large number of incoming developers who are there because their employer told them to program in .NET. We need those top tier developers, we need them to provide guidance to the masses, and we need them to keep Microsoft in check and moving in the right direction. And right now, it seems that in many ways Microsoft is moving in a good direction, but unfortunately on the language front it seems to be a different direction than many in the community want.
Enough Already!
I wanted IronRuby, I wanted support within ASP.NET MVC, and unfortunately now I’m not going to get it. I want a fully supported dynamic language on the Microsoft platform, but it doesn’t look like I’m going to get that anytime soon.
So, enough with this rant, it isn’t anything that others haven’t said before. Ultimately, I just want to build something. And I want to enjoy building it. I’m pretty sure that is the same thing every developer thinks right before they embark on a new journey. And I’m also sure that it is the same struggle that many other developers are experiencing right now.
Oh Wait, One More Thing…
I just wanted to say that, yes, I realize that part of the reluctance to full support a dynamic language is because the .NET framework is designed mostly around static languages, and the interaction can be awkward at times. This doesn’t mean that it isn’t possible to make the two play nicely, it just means that Microsoft has a bit more work on their plate than they would like to see. 🙂
Loved the article? Hated it? Didn’t even read it?
We’d love to hear from you.
Weirdly enough, I moved from PHP to .net a good few years ago and it was awesome. I hardly touched WebForms and went straight to doing MonoRail and then ASP.NET MVC.
That being said, I do Ruby On Rails work in my spare time so I get the best of both worlds really.
@Chris I knew if I blogged it they would come!
I find myself at a similar crossroads myself and have turned to Ruby and JRuby.
The thing is though, I put it down to boredom rather that Ruby being that much better.
There are all these new things to learn and tricks. New operating system etc. Of course it seens better. I can have much more fun. Things like string encodings and dates in Ruby are significantly worse and it is slower, no matter what anyone says.
I’ve been in .NET since the start and I am bored rigid of Visual Studio, C# even with the new dynamic typing. It is still a good platform but I really just want a change of scene rather than anything else.
The same thing happened with Java after it had been around long long enough.
My theory is as developers, we get bored and we want fresh challenges.
I honestly think a lot of the move to Ruby as the next great thing is boredom.
A lot of the Ruby guys got equally bored and moved ot node.js. It is cyclical.
Of course I could be just classifying everybody with my own reasons.
Haha, sure! The point I am making is going on about changing to use Rails isn’t what is important, it’s using the best tool for the job (in a language sense).
I wonder if I’ll be the only one though 🙂
I only have one question for you, what do you think is the right choice in terms of [b]longevity for your new business[/b]? Unfortunately the correct answer might not be the one you want, but perhaps we are embarking on times when the customer-base has matured it’s thinking in that respect.
I’ve been in a similar position, looked around, and ended back at Microsoft’s door; however this is largely credited to exciting projects from the ALT.NET community such as Fubu, OpenRasta, StructureMap, Moq, etc.
Best wishes with the business venture 🙂
Justin, I understand where you are coming from. I too have been a C# person for quite sometime. When ASP.NET MVC came out we switched all of our web apps over to it. I was happy with it until I read the same book you did. My eyes were opened to how easy it was to create web apps in Rails. You can be a .NET guy and create a web app with Rails. Its all about using the right tool for the job. I say go for it and give us posts on the progress. I would be very curious to hear your take on building out a Rails app.
I feel you, my brother. Things like RavenDB have reduced a lot of pain in my life, but I agree that the embrace of dynamic languages by MS need to level up considerably.
Wow Justin, great post.
I find myself struggling with choices just like you. I love .NET, but I like you started using Rails, and just flat out fell in love. That feeling was similar to the excitement that I felt when I was coding "classic" ASP moving to .NET.
As developers, we’ve grown over the years, and Conery said it best in one of his blog posts: "C# is just fine. I just don’t like building websites with it all that much"
Anyway, I could go on a rant myself, but if you head over to my blog, you’ll see a lot of Ruby articles on there. Should give you an idea that I’m thinking the same way you are.
Also like you, I just wish I didn’t find myself in this dilemma…
BTW, IronRuby would be "better," but the fundamental issue I have with IronRuby is no C-based gems. That’s fine I suppose, but having developed a few Rails apps now, I find I use some C-based gems, and it is a shame that I wouldn’t be able to use them with IronRuby.
-Damien
I moved from Python to .Net (not easy to find Python jobs in East TN). I came to .Net just after the launch of 2.0 after 4 years of solid python (before that, Java, C++ and some perl/php – perl is the one language I’d call a mistake).
The grass is not greener on the other side, it just looks that way from the outside. I think Paul above is spot on with the boredom factor. I also think it has to do with the fact most developers are too removed from the end users. All they see is code and that makes a change in code seem like the most interesting part of the job.
If you step away from the cubicle development life and see the bigger picture, these things matter less. Sure git might be better than subversion, but subversion works and there are far more pressing things to be done. Same with C#/ruby or Web Forms/MVC, or anything else – the end users don’t care.
Running your own service, your first job is getting to revenue as quickly as possible so you can focus full time on the service (thus, generating more revenue to grow). You might be faster in ruby than c#, but are you significantly faster and what is the time required to get to that point?
Justin, you know my thoughts on this. Microsoft tools have been my bread and butter for 15 years but something has changed for the worse in the past 4-5 years.
.NET is an awesome platform and the libraries are first class. C# and WinForms is also incredible if you’re used to building Windows MFC apps. Classic ASP was a step in the right direction and ASP.NET cemented .NET as a universal machine for Microsoft/Windows development.
You have to give Scott Guthrie and his team credit for ASP.NET. They managed to shoehorn Visual Basic style GUI development into a stateless HTTP world. Unfortunately, I think it is also the linchpin in a world of web developer pain that you’re feeling.
ASP.NET was designed to mimic Visual Basic not because it was the best way to create web apps but because it would bring 6 million Visual Basic developers into a web world using Microsoft’s tools. Instead of building tools that worked the way HTTP worked they built tools that would push Windows style development onto the Internet. Look at Silverlight and WPF; it’s round two of desktop/internet developers are the same.
ASP.NET MVC is a reaction to the popularity of Rails and other alternative platforms but it is still based on ASP.NET and CLI languages like C#. It’s a half step in my opinion.
The truth is that Microsoft isn’t really serious about standards based web tools because they haven’t figured out their lock-in strategy yet. And that’s fine. Microsoft is a business and they have every right to protect profits.
Microsoft should be aware that developers like us are not going to wait around forever while they figure out how to profit from the web. We’re ready and willing to consider other options.
@Michael, do you not think that a happy developer is a good developer.
If changing your environment/platform reignites your passion then is not a good thing.
First of all, I’m not moving off .NET to build my company. Even I realize now that this would be a bad move on my part, I need to build it, not spend my time learning a whole new platform.
Having said that however, people keep asking about the speed of development in Ruby versus C#, which I think is somewhat of a red herring. Everyone knows that the speed of development in a language is rarely the issue. Speed is good, expressiveness is great, flexibility is even better, but in the end it comes down to libraries. Massive chunks of code which are already written for you.
This is where the Ruby community really shines. Sure there are parts of Ruby that have rough edges, but when it comes to building web applications, the number of open source tools, frameworks, and libraries available to you is staggering.
And I think that this is where much of the benefit is derived for developers working in that world.
@Paul – If changing development platforms is what makes your developers happy (and they were unhappy before) I think you have a larger problem. What will keep them happy, when they tire of the new platform?
It sounds like the developers have no connection to the things they are building, the people they are supporting – just come in, get coffee, write code, go home. No matter how happy a developer is, if they are not connected to the business they will not be productive (not to be confused with busy) and they will not have a real sense of job satisfaction.
@Michael, but if we do not try new things then we only see one side of the view.
ALT.NET opened the door to me as I was like many blinkered .NET developers only seeing what MS spoon fed me.
I’ve been on this platform since .NET 1.0 so my need to change is not over night.
After nearly 10 years, I want to try Unix/linux and other things.
I think it is quite natural.
I have been weighing .NET MVC vs. Rails for a little bit. I had thought I made a decision after the last Code Camp when I saw the Azure presentations. I thought Azure was great. I have an MSDN Subscription — through BizSpark – and I can use Azure to build this great little niche app I have in mind.
But then I was considering the Tekpub story. Everything in C#/MVC first, then the switch to Ruby on Rails. And that decision was made because of the high cost of software licenses for MSDN and servers.
When my MSDN BizSpark comes due, unless my niche app is incredibly successful or I can launch my project as a full time job, then MSDN, software licenses and hosting expenses are going to eat up whatever money I make from advertising or subscription revenue.
So I’ve concluded that for my personal projects that I am serious about turning into something that can generate additional revenue I should go with something open source with little development software licensing cost. I already own a copy of TextMate (and RubyMine) so there goes the development environment costs if I decide to go with either Lisp or Ruby.
On top of all this I get the excitement that comes with working with anything new, so I consider the whole thing a plus.
Hi Justin,
One thing that was touched on briefly and not really given enough attention was the fact that you are trying to launch a product.
If creating the product in .NET will take X (days/months/years)and creating it in Ruby will take 2-3x longer which would you prefer? I’m assuming you are bootstrapping this yourself? Wouldn’t you rather start turning dollars sooner rather than later.
@Todd Yes, and that is what I said in my comment above.
Justin – I went through a similar self-discussion when launching Proaction Mentors – as a .NET Coach, Architect, Mentor – did it make sense to have our site running on WordPress (instead of one of the many .NET CMS’s available)
At the end of the day, I felt that as a consultant it was more important to choose the right tool for the right job – that’s the advice that I would give to clients – even if it meant I wouldn’t be getting the follow up dev work.
If a company was already deep in a full LAMP – I wouldn’t necessarily recommend .NET – just so I could do the work, etc..
Although – I’m just hosting our site on WordPress, not offering up a service for PHP/WP devs… so that might not be a perfect comparison to your situation.
Hope that helps though!
http://proactionMentors.com
F#. Is. Awesome.
Great blog post! I think the message you present more often than not gets lost in tech specifics rather than what’s right for the context.
Back in the day I used to do a lot of Perl, Java, C/C++ and it was all fun. I first started programming on the MS platform (VB3) so I was familiar with the tools and experience.
Right now everything I do is ASP.NET MVC since I see that as the area that needs the most help on reaching its full potential. I’m not saying that there are issues with the framework (heck, EVERY framework has them) just that when .net devs look at MVC they get lost since it breaks the paradigm that’s been around for so many years. Like with many things in tech, it’s the people that need to change (or have an open mind) on how their problems are solved. Rather than just using the same old hammer to drive in a new nail.
I’ve done some PHP, CF, JSF, Struts, Rails, etc. development before and it’s all great. Each of them have their plus and minuses (yes I’m not forgetting ASP.NET 😉 ) on how they fit YOUR style of development. If something doesn’t fit then it’s up to YOU to change it and make your life easier.
@Javier Thanks! I really do think it is good to occasionally remind people that they won’t be programming in their current environment for the rest of their lives 🙂 At least hopefully not, the implications are not good.
Justin, you make a good point about community in your comment. I am active in and really like the Microsoft/.NET community, but it is such a big tent that it feels very fractured and disjointed. When you talk to people at a .NET meeting, you get people building servers, Windows apps, web sites/apps, Silverlight apps, mobile apps, etc., and that diversity is cool. It makes for awesome geeky conversations.
But when you talk to people at a Ruby meeting, 95% of them are building web sites/apps with Rails. That’s not necessarily better, but it means everybody in that community is focused on solving similar problems. That results in a lot of innovation, and the lack of central authority (i.e., no MS or SUN/Oracle) encourages a rich community-driven open source ecosystem. The result is that if building web sites/apps is your mission, the Ruby community is inarguably the best place to be — IMO.
Of course if you have 10+ years of investment in other technologies, the decision is not so straightforward. Hence this whole discussion.
Slightly OT: Here’s why I think MS stopped funding IronRuby:
They realized it encouraged movement in the wrong direction. There may be a few Ruby developers who would have taken a look at .NET, but I think far more developers would dabble with IronRuby and eventually decide to plunge into the full Ruby ecosystem — and off the .NET platform.
[quote]Do you know anyone out there developing web apps on Ruby, Python, or PHP who is voluntarily moving to .NET?[/quote]
*raises hand* I used to be a PHP Developer, which means "Debugging through var_dump/die()", which means "constantly looking up find functions because $needle and $haystack are in different positions in different methods" and a lot of other unpleasant things.
PHP is worse than WebForms, sorry guys.
But enough PHP bashing, your point was a different one: .NET was not made for modern Web Development. It’s clumsy. It’s strict. It’s verbose. It took more than 10 years to add a ‘dynamic’ datatype, it took several failed attempts at scripting languages (JScript.net, Iron*) to realize that .net just doesn’t have a suitable implementation.
I’m doing a lot of JavaScript at the moment, and despite it’s shortcomings I see how dynamic/scripting languages are perfect for the web.
I don’t know how well ruby scales for massive, enterprise applications. I don’t know if the lack of type safety will bite you. I think that the usual answer is "Write Unit Tests!" and Ruby certainly has some of the best testing tools available, also thanks to the power of the language. But in a crunch, would you really write unit tests for everything, or rather just churn out some uncovered code in order to get some product out because you need some money for food?
I’m not saying that it doesn’t, I’m just saying that I think .net has already proven itself countless times in that area.
I think you partially answered your own question in your previous post about why Ruby is awesome. I was (am) an avid ALT.NET guy myself and I had a lot of success with those tools (particularly Fluent NHibernate, AutoMapper, StructureMap, RhinoMocks, ASP.NET MVC). I’ve been doing Rails for a month or so now and I would say that it’s just easier to do things in Rails. The learning curve isn’t bad because it’s still MVC so that part is familiar (although joining an existing team helped).
I like Rails because it doesn’t get in the way and so much work is already done for me. I was able implement all kinds of conventions in ASP.NET MVC, I had a database migration tool (not as good as the Rails one but good enough), and all that. I think I was able to do pretty well with all of that, [i]but I had to write it all by hand[/i]. My project almost got cancelled because the "iteration 0" part of the project was taking so long. In the Ruby world, there is a gem for everything it seems and you can just hit the ground running.
This obviously doesn’t mean that .NET is bad or that you can’t be successful in .NET. I’m tired of the people leaving .NET and blasting everyone associated with .NET in the process. I’m sure I’ll do .NET again, but for web apps, Rails is now my platform of choice.
I’m also in the same boat as many of the people commenting above. Doing .NET work is reliable and pays the bills but given the chance to work on what I love, its become coding with Ruby and the projects associated with it like Rails. I think it is okay to be a part of both ecosystems for a while and use one to continue to push the other. I also worry that maintaining too much time in each will prevent a person from attaining the highest level of knowledge and skill in each one individually.
Your post, along with a lot of other posts by a lot of the other glittering thought leaders, shows a dramatic lack of knowledge of the world as it stands.
The communicating, tweeting, blogging, proselytizing, members of all of the dev communities together constitute less than 1% of the devs out there. In the last year, I have done architecture evaluations at 14 different companies. At exactly ONE did I find even TWO people who even know what Ruby was.
Most devs don’t go to RubyCon, or go home and hack, or read Objo’s blog at 1AM, or plead with their boss to use Python to rip out this rad maintenance dashboard.
People use what works. Despite that seems so obvious to the above defined group, Java and MS dev systems work. They do. People use them, they build projects, the even do a really bad job, but they get the job done. And the wheels keep turning.
99.1% of devs don’t care about Rails or anything in the OSS stack, unless it is in C# or VB and they can copy the code. It’s not going to a-change. It hasn’t since programming was a profession, and it won’t anytime soon.
As an aside: I write this in one monitor while Komodo is running in the other browser (I’m an ooold schooler) and still I know this. Take a minute and look around.
Comparing PHP and Ruby to .NET? I don’t consider them even remotely in the same category. How many kids do you know who use PHP and Ruby? All of them, right? How many of them have jobs? How many use .NET? I know a TON of professionals that dabble in those "silly" other technologies, but those are not profesional level tools and languages, not even close.
So let’s say you make your hello world website in Ruby. Once you are past the frosting, what about the guts? You have no .NET Framework, you have few 3rd party components, google for questions and there aren’t many professionals that are answering your question.
Listen, being frustrated with .NET is one thing, but the thing I found a little offensive is treating PHP, Ruby and the like as if they are professional quality languages, they simply aren’t. If you are making a website for a church, your local software team, fine. But no real company is going to be caught dead writing production code in these technologies. Having real business rely on these very casual technologies. In my humble opinion.
This is very well thought out and I think emcompasses how many are feeling once we get to a point we realize we are constrained.
It’s kind of like what it was when we first found OSS and our eyes opened to the not just microsoft tools. Then it was hard to use a tool that was not the best tool for the job.
Now it’s come to a point on the web when we are starting to say, what’s the [b]best[/b] "language" for the job?
It reminds me of the allegory of the cave in a way. Thank you for sharing this and having the courage to state what you are feeling.
@rob I honestly thought such ignorance was dead.
Thanks for the funny comment. It made me laugh!
@Rob – Companies like 37 Signals beg to differ.
I still can’t believe mvc3 will not let you update multiple divs or sections of a web page in one Ajax call… Which means you have to return the entire data between those two divs or you have to que your requests, update div1 and once done have JavaScript sitting there to fire off and request another Ajax callback to update and return partial view for div2… And the users mot ice this… Or the next best thing, totally rewrite the return client script in js and use js to split the partial view up and place one part of it in div1 and the other part in div2… How friggen sad and pathetic that even at version 3 we will not and cannot do something so simple and basic with any elegance. This specific example sets the stage for what most of .net was like especially in the beginning and still somewhat it is. Plus the guys writing these are on 6 figure salaries, I don’t see why anyone writing them for free (say, rails stuff) is going to be any better, tho I have never used rails, so won’t comment… But common sense suggests go with the longest running one… But if ms just did mvc instead of web forms from the beginning then mvc would have been ready to use right now… As it stands, it isn’t complete if you ask me, wont be until version 5… Just like visual studio.net wasn’t complete until vs2008
@Erx Oh wow, you are the reason we have datagrids. That is all.
@Rob
You do realise Twitter is written in Ruby on Rails, and Facebook is written in PHP? Those aren’t local church/school websites, those are possibly two of the biggest websites in the world.
@Justin, what r u trying to say? U flaming me because I don’t quite get it.
I would like you guys to read the comments on this blog, only 9 comments, unrelated to the article, and tell us what you think, since it’s related to disappointment of current .net
http://sharein.com/shares/176056-script-junkie-somasegars-weblog-site-home-msdn-blogs
I know it wont sit well for people who don’t like rad, but its from a productivity view.
@Erx No, but I guess what I want to say is that features like "I want to update multiple divs" aren’t core framework features, thanks to how the internet works. MVC sends a chunk of data to the browser, the browser deals with it. There are a million ways for you to solve this problem, but instead you want Microsoft to shove yet another useless feature into MVC that three people will use.
This is how we end up with "kitchen sink" frameworks that do a million different things (none of which are very useful), rather than small and concise frameworks that are extensible. If you want to update three parts of the page, then get some JSON, use a templating library and do it.
Justin, trust me I look dint the problem, I have been petitioning scottgu and haack to introduce the ability to return multiple views in one shot, which I think is a feature that is profound enough to compare to core framework features. I actually wasn’t looking for a way for ms to help me split it up, but rather make a better framework where dealing with a common problem is inherently natural to deal with.
I know all the solutions for it currently, they are just really nasty hacks and defeat the purpose of separation of concerns and the benefits brought in by the mvc framework.
I certainly don’t understand why you think 3 ppl would ue this. If your solution is to just return everything in-between then that is just a compromise. Haven’t you ever needed to update the top and bottom of ur page in one Ajax call? You cant do it unless you use very hackie tequniques, plain and simple, or que ur requests. Right now I use super load to do it, written in c# and it lets you return multiple views and splits it up in js on the client, and I looked at the code its one big hack, id rather ms made returning multiple views an inherent feature of the framework, please don’t assume that I must be asking for kitchen sink features just because you may be a better developer then most, it doesn’t means that "most" fit into your worst case scenario stereotype.
@Erx We are just going to have to disagree on this. I read the comments on Soma’s blog, and quite frankly they just sound like a bunch of people who are dealing with the tools they use changing. Trust me, it is just different. I’ve been working in MVC for a while now, and when I go back and do Web Forms it seems really foreign and complex. But back then it didn’t, cause I had learned all of the tricks and incantations.
I mean, do all of these people really think that everyone is claiming that Rails is more productive, while secretly crying over having to write JavaScript? No, because these people are used to these tools, and they are powerful tools.
In the end, everyone writes different types of applications, and for the type that I write ASP.NET MVC is far more productive than ASP.NET Web Forms ever was.
Justin, I agree with you completely… I find MVC more productive because I have more control so I don’t need to struggle against everything web forms hides in order to make something work differently or make it work how I want it to work. From this perspective, no longer does 10% of the application take 80% of the time (or, rather, no where near as often).
But i ask you, if we had mvc developed to the degree (just imagine for me here, likelihood of this happening aside) where everything is fully configurable, nothing is hidden unless you want some things that way, you just define the behavior and write your server side code, and all the js, css etc is written for you. And imagine we had this at no cost or compromise, where everything is fully customizable and overridable and extensible. Just imagine being bake to write a server side validation rule or custom logic, and setting ReplicateLogicOnClient as equals to true, and visual studio being able to read my server side code and generate the equivalent js to run on the client for me, to enforce rule on both ends, and imagine vs being able to do this sort of thing all over the framework. Would you or would you not want to use this, at least sometimes? From a productivity perspective, it would be unimaginably useful in my opinion, I think most people would find this level of rad useful, as long as it is an option and we are not forced to use it, so hardcore js peeps still get to play in the sandbox as they wish.
We aren’t there’re yet, and we aren’t even talking about it, the year is 2010 and we should have had something like This by now, but we don’t, framework developers aren’t aiming high enough… As this is the future of development for many people, being able to write code in one Lang and having it run on sever or client depending on what you want, but its still technically possible to develop this even with different languages on server and client, we just haven’t done it yet and this is what is so disappointing to me.
I agree with this article whole heartedly. Everything from the frustration of feeling like you have to work around the language in order to incorporate a suite of tools just so you can have dependency injection and testing. Also the feeling of frustration that if you move you are throwing out years of experience on a platform and starting over on another.
I hadn’t touched Rails until this year, happily unaware in my state of ignorance. Now that I know what I’m missing I’m faced with the same decision. I’ve largely made it already, unfortunately the projects I will be working on during the day M-F will slow that move to Rails.
@Erx I see where you are coming from, but I guess the issue I don’t agree with is it being part of the framework. What you are describing would be great, if it was technically possible and didn’t end up as a leaky abstraction. And that is what it always comes back to, you have this idea in your head of a perfect abstraction that won’t end up being possible. The implementation will be ugly, cause problems, and end up limiting you in ways you never imagined. That is what *every* framework boils down to which tries to hide complexity.
I think that is why frameworks like MVC work so well, because they don’t try to necessarily hide complexity, they just provide ways to give you what you need and let you figure the rest out. Other tools are there (such as jQuery, client templating, MVC contrib, etc…) to help fill the gaps based on what *you* need.
Rob,
I think your statement has already been address, but what I have found is that the documentation for Ruby/Rails is quite good, there are plenty of articles and stack overflow questions answered and the libraries in the OS Community for Rails are as good or better than what you find in ASP.NET. The source code is good too. I don’t happen to like PHP but a lot of sites are written in it. I just find Ruby makes me more productive and helps me write better code, not drag and drop mess or over complicated architecture that MS seems to always be pushing.
@Erx I love you, man but I just have to disagree with your comments on "framework developers aren’t aiming high enough". I think abstraction astronauts (I very much am one) can churn out complete garbage if they aren’t thinking about how their code very much needs to ‘touch the ground’. A metaphor would be like making a helicopter ride where you have to ride a balloon or climb a rope just to get in the thing because it was always hovering in the air.
Then I had a holy sh*t moment because I realized that metaphor seems to describe a large part of the web side of .NET, if not the ecosystem as a whole. The great enhancement +1 tools we all seem to tack onto our projects like a DI container are very much that balloon ride versus the hand-over-hand approach many of us are taking every single day.
My view of ASP.NET/MVC is skewed considering I’ve only done a single project that took way too long. Something about hitting *compile* to produce a website seems wrong. Coming from the other perspective, I’ve always considered anything that doesn’t compile to be a scripting language and they never felt too ‘professional’ until recently really. Now there’s too much productivity gains in editing a single text versus having to wait for a compile step.
Being primarily a Windows developer, compilation produces a certain level of ‘warm fuzzies’ that just doesn’t translate when I have to wait for IIS or Cassini/Express to spin up. Silverlight is a lovely mix of both worlds that I strangely don’t mind waiting on.
I think it’s important to make the distinction between web-only .NET and more of I suppose what could be considered ‘classic’ .NET and is basically the main point of the comment. What I find odd is ScottGu’s team has been powering a *lot* of .NET 4.0 yet MS’s web presence seems to be shrinking at an alarming rate. It probably single-handedly explains the death of the Irons though. I absolutely *love* ‘classic’ .NET now though. I’m glad I can get something done and there’s an entire level above me I can tap into. For the web, however, I’m of the mindset that dynamic is king and always will be. That’s also why I believe in your idea that MS should be creating a dynamic language. Unfortunately the only way it would make sense is to create something entirely new as the Irons were definitely pushing people to the LAMP stack more than the other way around.
@Bill Sempf
I can’t tell if you’re just trolling; so I’ll respond sincerely.
I agree with you that a large portion of developers do not care about this discussion or looking beyond what they already know. The huge, obvious point you’re missing that they are very much affected by these discussions.
It is the 1% of the industry that drives innovation and defines how those 99% will be working. What is cutting edge now will be mainstream boring in a few years. Many features in .NET exist primarily because they were previously successful in other platforms. See generics, Entity Framework, lambda expressions, etc. Or do you really think ASP.NET MVC would exist without the success of Rails?
@Al
Exactly!
Justin,
Nicely said.
I’m a C# developer who dabbles in Ruby for the fun of it. I have noticed that messing with Ruby and to some extent with Rails has made me a better C# developer. I can’t point to any particular thing that changed, it’s just made me think different.
@Jeremy @Justin, thank you for your comments, but I do think writing high level automatons and controls (or rather, helpers) that hide complexity but can also be fully configurable, ie: all the hidden complexity can be accessed, intercepted and changed in meaningful ways, is possible. And I’m not talking about how it was done in web forms controls where you had to intercept obscure events and inject nasty, hackie stuff to get it working the way you want it to work, but I’m talking about intuitive and elegant ways to unhide the complexity hidden by default to fully unleash their power.
And Justin, I know you hate high level controls and perhaps you may look down on people using them but ultimately if high level controls/helpers were to exist that are (as I described) fully alterable in elegant, meaningful ways the. We’d have the best of both worlds that even the highly talented programmer snobs would be impressed with lol.
I think this is possible and surely difficult, but mainly due to a lack if imagination and determination that we don’t have much in this direction to work with. Perhaps if ms didn’t have a zillion ways to do the same thing and did one thing very well we’d be there right now, but we aren’t and of course, I’m not going to hide the benefits of having many ways to do one thing either, since there are benefits, but these benefits diminish further as you tend towards having one thing that can accomplish these same tasks/intentions in better and more sophisticated ways…. Ie, if we had mvc in the beginning it would have had the best of both worlds that web forms and current mvc does and perhaps more.
Maybe its something the OSS community can takle, but who knows.
Justin,
I have practically the same curve: Delphi, C#, last 7 years ASP.NET, last year MVC… and strong interest to Ruby. I also feel a kind of frustration, so, let’s try to understand why.
There is a guy who’s blog I follow, Eldar Musaev (ex-Product Manager at Microsoft, who rebooted his career a month ago – now he is a developer at Google). This man has very philosophical and unusual vision of everything around, and he mentioned that we entered a new economy – economy of innovations. This means that exactly innovations become an engine of new business, and that professionals began playing bigger role than managers.
What are key features of innovative business? Innovations themselves, short terms of coming to the market, low cost initial stage, presence of investment infrastucture (Y Combinator is an excellent example).
So, (sorry for a long preamble) when I try to put all this stuff on Ruby, it looks compliant, when ASP.NET – it’s not. The reasons – costs and time to market.
But this coin has another side. This is a good opportunity for your own business to simplify and to speed up ASP.NET dev. Isn’t it?
Hi there!
I’m a software developer on the ERP area, building solutions for interfacing systems, creating new reports, fixing currupted data, creating migration scripts, creating apps for specific ERP missing features, etc. Technologies? mmm normally: SQL, VB, C#, XML, WinForms. Am I bored? YES, I am. That’s why I decided to start blogging about my favorite topic (programming languages) and also start thinking in building a "product"… I think that’s what all developers want to do at some point of time.
I think that there are lots of choices to switch to. For example:
Something really different would be:
iPhone SDK, XCode, OSX, Objective-C
i do not know if it is the best time to jump on it or if it is already too saturated hehe.
Or, because I’m a .NET Developer I would like to learn Java which is as mature (or even more) than .NET platform and you can build almost the same stuff. You can also chose from several languages:
Languages targeting the Java/JVM runtime:
Groovy, Java, Jython, JRuby, Fantom, Scala and more
Or you can keep your knowledge and see that there are lots of options, not just C# or Ruby:
Languages targeting the .NET/CLR runtime:
C#, VB.NET, C++/CLI, F#, Boo, Phalanger, IronPython, IronRuby, Delphi Prism, Zonnon, Nemerle, Cobra, JScript.NET and more
It is also interesting to see how the .net platform is evolving to support multi-paradigm languages.
It all started with static typed langs (C#, VB.NET, C++, Java), then the dynamic languages appeared (Ruby, Python, Groovy), and finally the functional languages (F#, Scala, Clojure). Start learning the functional languages is a challenge 🙂
And finally, if you feel melancholic about Delphi, you can even try Delphi Prism! which is a very powerful and advance language supporting almost every function C# supports and even more… The only problem I find with it is the verbosity of the language hehe which doesn’t mean I do not like, is just too much typing.
Et voilà!
If you are interested in more .NET and Java languages you can visit my blog at:
http://carlosqt.blogspot.com/
where you can find code samples on 20 languages and some more stuff
Also a list of 29 langs targeting the CLR and JVM runtimes:
http://carlosqt.blogspot.com/p/programming-languages.html
I’ve done enough programming in both c# and ruby to know that they both have equal amounts of ups and downs.
The ms side of things is slow, but they are changing. Iron Ruby is now in the community’s hands and they finally released a few VS tools for Iron Ruby.
NuPack/NuGet will help to foster a more package/gem like environment for .net. Entity Framework "Code First" and rumored migrations library is on the way.
There are a good deal of libraries that people aren’t aware of hiding out on github or codeplex that do make life a lil bit easier.
Ruby has its limitations too. Soap is painful to deal with. It just recently got real threading with Ruby 1.9.x. Many of the third party gems suffer from the typical Open Source issues, documentation, abusing code constructs like yield.
It doesn’t have the greatest solutions for any kind of tabular data or reporting. And until Rails 3, the injected js / dom code was messy. The Rails Engine stuff is somewhat better, though it would be nice if you could isolate migrations batchs unique to each engine.
Maybe you just need a break or recharge from doing .Net for a while? Or maybe its really a time for a complete change.
Even if you could build a killer product and make a fortune, whats the point if your miserable while doing it?
I enjoyed using IronPython through DLR in my grad project last year. With DLR, .Net is working on accomodating dynamic languages as the eco-system keeps evolving, right?