It's kind of Ruby to helpfully report the typo of 5 instead of "5" only when you manage to generate a test case that exactly goes through that chain, rather than just telling you that you did a typo up front. Your customer also gets to appreciate the benefits of dynamic languages when he can't get his work done because of your "500 server error" caused by the error being detected only when he tries it.
In C# my compiler didn't let me deploy your broken code. Therefore there was never a NoMethodError thrown when my customer visited my webpage.
Result: I sleep easier and my customers are more happy.
Yay for statically typed languages.
My point is that your statement was wrong. Not 20% wrong, not 90% wrong. 100% wrong. So maybe try to be a little more accurate in your criticisms next time.
Yeah sure, the magic of C#'s compiler catches bugs before you deploy. So you're saying with C#, I'd never have need a static verification tool like Ruby/JSLint, because the compiler is just that awesome. Okay.
Wow, that shouldn't have happened
We're sorry. Something has gone terribly wrong.
If you would like to let us know about this, please Contact Us and let us know what happened.
Well you should tell Channel9 team that because I keep getting this like 20 times in this thread so far via their superior C# codebase. To be fair this is the only website I regularly visit written in C# (they are hard to come by, with bigger ones like MySpace failing and all despite using happy customer C# code), so the sample size is small. But it doesn't sell the compiler anti-bug technology to me very well.
Ruby OR C#, hopefully you have integration/unit tests that do more than load your page or something. Hopefully you are using a static verification tool (!= compiler), code coverage tool and a tool to run your unit tests BEFORE you deploy (realistically, BEFORE you check in). None of this is ever optional in the real world(tm)!
But really, if you want code contracts, use code contracts (in Ruby even!). Don't try to pass type decorations like they are code contracts.
Anyway the point of this conversation for me was to try and see if I can learn anything new or interesting about static languages. Something to objectively show that static languages are superior. That WOULD be interesting. But it's not really working. All I am getting in a genuine confusion about the difference between weakly typed and dynamic typed. So uh, good luck.