I smelled smoke 4 years ago and promptly evacuated (to rails). Rob Conery was always my favorite asp.net open source dev, I hope he's able to teach the Microsoft community what exactly they are missing.
That article taught me nothing about what I'm missing. Why write something like that and not fill it with examples? Show me what you can do in rails that is a pain in asp.net mvc.
This is an honest question, not snark: has ASP.Net MVC got anything like cucumber available to it out of the box? Or rubygems, for that matter?
I did suggest to Sara Ford at a MixUK conf a couple of years ago that a Visual Studio plugin that would search for and import projects from CodePlex straight into your project would be pretty awesome; I never followed up on it, and I've been out of Windows dev since then so I haven't heard if anything similar exists. I still think it would rock :-)
> has ASP.Net MVC got anything like cucumber available to it out of the box?
Cucumber isn't strictly speaking out of the box - it's dead easy to install of course, but it's not part of the rails core distribution. Rails still uses Test::Unit by default.
Specflow (http://www.specflow.org/) is a .Net oriented BDD framework that uses Gherkin - essentially Cucumber for .Net.
It would be super-awesome if I could see the talk that he's referring to. As it is, this article is a bunch of chest-puffing about how he shouldn't have to apologize to a bunch of people that disagree with him.
The way I've viewed it is WebForms is what you learn when you're starting out, and when you want more advanced features that are built for websites people actually use, you use something more sane, like MVC.
In my experience, "vanilla" Asp.NET (with WebForms) makes a ton of assumptions on how it should be styled, based on...I'm not really sure. The Visual Studio project team's intranet or something. MVC is slightly better with CSS adapters and the like, and provides a more robust routing mechanism that we've used on a few sites.
Why is this a debate, other than being more platform religion?
It would really help if you watched the video. As I've been saying, this post is in support of the video. I spent 45 minutes laying out all the details.
If you don't want to - that's great but you're comments have no context.
One thing that's easier to do with Rails than .NET is get a job at a startup after your current job. No startup worth their salt is on the MS stack. I have a friend who's a good developer looking for work but has 5 years of .NET on his resume and is getting passed over time and time again at "hot" startups because you can't compete with people that have been keeping up with the latest tech (which usually means Rails, but even PHP is more marketable at this point).
What's the allure of getting a job at a startup? Founding, sure, but just working for one? Probably low pay, certainly long hours for a (small) chance at a decent payout at some future date?
If you want to make consistent good money it's in consulting for firms, and that's going to be almost exclusively C# and Java.
This is a religious war. However, innovation in the C# language places it as the most advanced production level language on the market (IMHO).
Form validation (client and server side with the same code) is still a killer feature. Easy deployment as there is only IIS, no decisions about fcgi, mogrel, keeping your processes running, etc.
I don't really see his point. You've got one of (if not THE ) best IDE's with easy debugging, intellisense, etc. You've got a super stable platform (IIS 7), some of the best documented API's and code in existence and you want what?
I guess I don't get what he wants? Is there some missing feature or just sad that he can't be one of the cool kids?
Deployment is easy? Ok, what do you do to deploy a C# application that makes it so easy? I run two project right now, one is Rails which we have setup with Capistrano for one command deployment. The other is a C# app and I haven't found anything that can do what Capistrano can do for me, and don't say MSDeploy because that is a total mess.
Also, testing. Try testing in C# vs. Ruby or any other dynamic language.
I don't know anyone who uses the built in Form Validation, you would only use that if you don't care about your client-side code.. for people who care we still end up doing both by hand.
These features are designed so that the validation logic is always enforced on the server, and can optionally also be enforced on the client via JavaScript. The validation infrastructure and features in ASP.NET MVC 2 are designed so that:
1) Developers can easily take advantage of the DataAnnotation validation support built-into the .NET Framework. DataAnnotations provide a really easy way to declaratively add validation rules to objects and properties with minimal code.
2) Developers can optionally integrate either their own validation engine, or take advantage of existing validation frameworks like Castle Validator or the EntLib Validation Library. ASP.NET MVC 2’s validation features are designed to make it easy to plug-in any type of validation architecture – while still taking advantage of the new ASP.NET MVC 2 validation infrastructure (including client-side validation, model binding validation, etc).
1) Build -> Publish might work for the simplest of scenarios but not if you have any sort of real infrastructure.
2) To use it you have to use strongly-typed views, and HTML helpers I believe.. which again I don't care for since it is taking the markup out of your hands.
I totally agree with #1. Deployment is a real weak point. It can be done, even using Capistrano if you're willing to put up with it, but it's nothing like what it could be.
With respect to #2, I strongly suggest you reevaluate. Strongly-typed views will save you a lot of boilerplate code in your controllers and HTML helpers only interfere with your markup to the extent you want them to. Most of them are super minimal and easily styled or manipulated. I expected that the helpers would just be different ways of getting into the same mess you encounter using things like server controls in webforms but I was quickly shown otherwise.
> innovation in the C# language places it as the most advanced production level language on the market (IMHO).
On a scale of 1 to 10 of vagueness/subjectiveness, this would be a 30.
I like the new additions, like Linq or the properly done closures or generics.
But throwing words like "innovative" or "advanced" for techniques used from the late '70-ties brought together in a language with the same corporate-stinch of Java or Cobol?
Yeah, right.
> Form validation (client and server side with the same code) is still a killer feature.
Form validation is a hard feature to get right. I do not agree that the validation done in ASP.NET MVC is a "killer", especially since I've hit hard limitations in the first hours of me trying it.
In case you're wondering about what limitations I'm talking about ... try building a dynamic forms system that gets stored in the DB (fields, references to validation rules) allowing a user to build some forms and for another user to supply values for those forms.
The only validation system I've seen that's reasonably productive and that works in most cases is the one in Django, but even that is lacking considering you have to add your own code to have client-side validation and keep it DRY (although that happens due to Django's policies, not due to bad design, and really it's not that big of a deal to add something that works well in most cases ... bringing server-side validation to client-side is an easy to solve problem, unless your framework is fucked-up).
> Easy deployment as there is only IIS
You are probably kidding, although I'm happy they finally discovered the virtues of text configuration files.
> no decisions about fcgi, mogrel, keeping your processes running, etc
Not every platform is as fucked-up as Rails ... mod_wsgi for Django (or any wsgi compliant Python framework) just works with no headaches.
It takes me 20 minutes flat to manually get an EC2 instance up and running with everything needed. And I can quickly automate that in a way Windows devs cannot begin to dream of.
> You've got one of (if not THE ) best IDE's with easy debugging, intellisense
Sometimes I miss that, but not that much, mostly because I need the flexibility to use the best tool for a certain job, not to mention that sometimes I don't have a choice in the tools I use.
That's why I'm using Emacs ... the flexibility I gained made me several times more productive than a clicky-clicky IDE.
If you don't believe me, try working with Python from VS.NET, while using pychecker/pylint to automatically check your code (let's say it's a company policy) and to also use ReviewBoard in combination with a Git repository.
Or better yet, try debugging with VS a production environment.
> some of the best documented API's and code in existence
In comparison with Django it pales.
Not only does it have good documentation, but when it's lacking the clarity of the actual code is breathtaking ... yes, devs using Django are actually looking at its source-code and I have quite a few friends developing on top of ASP.NET ... none are doing that.
Maybe it's a cultural thing, maybe it's because ASP.NET is proprietary, the end-result is the same though ... the Django devs I know have intimate knowledge of Django's internal mechanisms, while ASP.NET devs do not.
> Is there some missing feature or just sad that he can't be one of the cool kids?
HN has degraded a lot recently. I see many comments containing ad hominems that are getting upvoted.
I think there is room to acknowledge the strengths of one product and another. You don't have to tear down ASP.NET for Django to "win." I like Python, I don't have to see MSFT headquarters burn to the ground so that I can also use Python.
I'm an advocate for technology I like. I like postgres, python, and nginx, but that doesn't mean ASP.NET is crap.
>> Is there some missing feature or just sad that he can't be one of the cool kids?
> HN has degraded a lot recently. I see many comments containing ad hominems that are getting upvoted.
The cool kids part was a reference back to the title of the talk. On a different note I've found way more ad hominems in your post than the parent post.
> try building a dynamic forms system that gets stored in the DB (fields, references to validation rules) allowing a user to build some forms and for another user to supply values for those forms
this is fairly trivial. one area where the static typing really helps. the type system is the dsl.
To reply to the rails deployment thing, you can just go with passenger and then you only need to pick between nginx and apache which really comes down to plugin support. (Provided you don't mind compiling nginx to change plugins. You can hot-swap the binary so downtime isn't an issue.)
This is a great example of why I'm wary to get into iOS development. Companies like Apple and Microsoft have the resources and talent to make great platforms, and the control they have allows for really polished tools. The allure of the integrated ecosystem is strong, but then if they fall short in some critical way, or become irrelevant over time you have to either start begging the vendor for change or else chuck your whole time investment.
In the open source world things are often buggy and rough around the edges, but the cross-polination of ideas happens faster, coupling is looser, and the cost of switching is lower.
I'll still probably pony up for the damn ipad sdk, but hopefully I'll know better than to pin my career on it.
31 comments
[ 3.2 ms ] story [ 74.0 ms ] threadI did suggest to Sara Ford at a MixUK conf a couple of years ago that a Visual Studio plugin that would search for and import projects from CodePlex straight into your project would be pretty awesome; I never followed up on it, and I've been out of Windows dev since then so I haven't heard if anything similar exists. I still think it would rock :-)
Cucumber isn't strictly speaking out of the box - it's dead easy to install of course, but it's not part of the rails core distribution. Rails still uses Test::Unit by default.
Specflow (http://www.specflow.org/) is a .Net oriented BDD framework that uses Gherkin - essentially Cucumber for .Net.
The way I've viewed it is WebForms is what you learn when you're starting out, and when you want more advanced features that are built for websites people actually use, you use something more sane, like MVC.
In my experience, "vanilla" Asp.NET (with WebForms) makes a ton of assumptions on how it should be styled, based on...I'm not really sure. The Visual Studio project team's intranet or something. MVC is slightly better with CSS adapters and the like, and provides a more robust routing mechanism that we've used on a few sites.
Why is this a debate, other than being more platform religion?
It's not a debate. The point is to ask Microsoft to stop being afraid.
If you don't want to - that's great but you're comments have no context.
I guessed that the post supported the video, but lacking a video, commented on the post instead.
If you want to make consistent good money it's in consulting for firms, and that's going to be almost exclusively C# and Java.
Form validation (client and server side with the same code) is still a killer feature. Easy deployment as there is only IIS, no decisions about fcgi, mogrel, keeping your processes running, etc.
I don't really see his point. You've got one of (if not THE ) best IDE's with easy debugging, intellisense, etc. You've got a super stable platform (IIS 7), some of the best documented API's and code in existence and you want what?
I guess I don't get what he wants? Is there some missing feature or just sad that he can't be one of the cool kids?
Also, testing. Try testing in C# vs. Ruby or any other dynamic language.
I don't know anyone who uses the built in Form Validation, you would only use that if you don't care about your client-side code.. for people who care we still end up doing both by hand.
Build --> Publish. Done.
Validation: http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mv...
These features are designed so that the validation logic is always enforced on the server, and can optionally also be enforced on the client via JavaScript. The validation infrastructure and features in ASP.NET MVC 2 are designed so that: 1) Developers can easily take advantage of the DataAnnotation validation support built-into the .NET Framework. DataAnnotations provide a really easy way to declaratively add validation rules to objects and properties with minimal code.
2) Developers can optionally integrate either their own validation engine, or take advantage of existing validation frameworks like Castle Validator or the EntLib Validation Library. ASP.NET MVC 2’s validation features are designed to make it easy to plug-in any type of validation architecture – while still taking advantage of the new ASP.NET MVC 2 validation infrastructure (including client-side validation, model binding validation, etc).
2) To use it you have to use strongly-typed views, and HTML helpers I believe.. which again I don't care for since it is taking the markup out of your hands.
With respect to #2, I strongly suggest you reevaluate. Strongly-typed views will save you a lot of boilerplate code in your controllers and HTML helpers only interfere with your markup to the extent you want them to. Most of them are super minimal and easily styled or manipulated. I expected that the helpers would just be different ways of getting into the same mess you encounter using things like server controls in webforms but I was quickly shown otherwise.
On a scale of 1 to 10 of vagueness/subjectiveness, this would be a 30.
I like the new additions, like Linq or the properly done closures or generics.
But throwing words like "innovative" or "advanced" for techniques used from the late '70-ties brought together in a language with the same corporate-stinch of Java or Cobol?
Yeah, right.
> Form validation (client and server side with the same code) is still a killer feature.
Form validation is a hard feature to get right. I do not agree that the validation done in ASP.NET MVC is a "killer", especially since I've hit hard limitations in the first hours of me trying it.
In case you're wondering about what limitations I'm talking about ... try building a dynamic forms system that gets stored in the DB (fields, references to validation rules) allowing a user to build some forms and for another user to supply values for those forms.
The only validation system I've seen that's reasonably productive and that works in most cases is the one in Django, but even that is lacking considering you have to add your own code to have client-side validation and keep it DRY (although that happens due to Django's policies, not due to bad design, and really it's not that big of a deal to add something that works well in most cases ... bringing server-side validation to client-side is an easy to solve problem, unless your framework is fucked-up).
> Easy deployment as there is only IIS
You are probably kidding, although I'm happy they finally discovered the virtues of text configuration files.
> no decisions about fcgi, mogrel, keeping your processes running, etc
Not every platform is as fucked-up as Rails ... mod_wsgi for Django (or any wsgi compliant Python framework) just works with no headaches.
It takes me 20 minutes flat to manually get an EC2 instance up and running with everything needed. And I can quickly automate that in a way Windows devs cannot begin to dream of.
> You've got one of (if not THE ) best IDE's with easy debugging, intellisense
Sometimes I miss that, but not that much, mostly because I need the flexibility to use the best tool for a certain job, not to mention that sometimes I don't have a choice in the tools I use.
That's why I'm using Emacs ... the flexibility I gained made me several times more productive than a clicky-clicky IDE.
If you don't believe me, try working with Python from VS.NET, while using pychecker/pylint to automatically check your code (let's say it's a company policy) and to also use ReviewBoard in combination with a Git repository.
Or better yet, try debugging with VS a production environment.
> some of the best documented API's and code in existence
In comparison with Django it pales.
Not only does it have good documentation, but when it's lacking the clarity of the actual code is breathtaking ... yes, devs using Django are actually looking at its source-code and I have quite a few friends developing on top of ASP.NET ... none are doing that.
Maybe it's a cultural thing, maybe it's because ASP.NET is proprietary, the end-result is the same though ... the Django devs I know have intimate knowledge of Django's internal mechanisms, while ASP.NET devs do not.
> Is there some missing feature or just sad that he can't be one of the cool kids?
HN has degraded a lot recently. I see many comments containing ad hominems that are getting upvoted.
Pity.
I'm an advocate for technology I like. I like postgres, python, and nginx, but that doesn't mean ASP.NET is crap.
The cool kids part was a reference back to the title of the talk. On a different note I've found way more ad hominems in your post than the parent post.
this is fairly trivial. one area where the static typing really helps. the type system is the dsl.
erm... Phusion Passenger is the deployment platform of choice for Rails (Rack) applications. It's even easier than mod_wsgi.
Thanks for the tip,
There is a torrent of 33 talks from NDC2010: http://dl.dropbox.com/u/757631/NDC2010/NDC2010%20Part1.torre... Rob's talk is in there.
In the open source world things are often buggy and rough around the edges, but the cross-polination of ideas happens faster, coupling is looser, and the cost of switching is lower.
I'll still probably pony up for the damn ipad sdk, but hopefully I'll know better than to pin my career on it.