Ruby and .Net Developers solve two different kinds of problems
blog.nitriq.com
blog.nitriq.com
I think it's a good idea to promote your product with interesting/educational content... though there is nothing to differentiate the pitch from the content here (it's heading towards "advertorial"); and 37signals do this all the time without needing to mix the two.
But it also makes me question the whole post - did it exist purely for the purpose of carrying a sales pitch? And on reflection, I do find the content a bit lacking: "perhaps the language is too verbose" was interesting; and it seems very true that Ruby is used for small projects, and .Net are used for enterprise-size projects; but his conclusion, that "the resulting code is going to be verbose" doesn't connect to the question, which was about the language being too verbose.
A way to connect them is that huge projects have more names, and so you need longer variable/method/class names to distinguish them (I'm including namespaces in name length here); and in huge projects, you need names that are more self-descriptive (because it is so important than someone else will be able to understand it, someone who might not ever get to meet you to ask you) - and self-descriptive names are long. You'd like to reuse this full information without the typing. Hence, intellisense.
btw: keep the paragraph - pimp your stuff by all means - and (eg) a simple bar <hr> would separate it; that's how 37signals and Joel do it (of course, maybe it's just me who was distracted by it). While it is very effective advertising to integrate it into the story (a kind of product placement), it's harder to do both well than focus 100% on the content.
This is just nonsense. I used to be a .NET developer before I jumped to Ruby. The Rails application I develop on now has well over 1000 class files, plus all the associated views, etc. It's at least as complex as this mythical, undefined "enterprise application" ( a meaningless distinction) the author speaks of, and our team of 4 manages just fine using text editors.
The only reason Intellisense is needed in .NET is because it's such a verbose language. If you want to open a file in .NET, you've got to create a FileStream object, and then a StreamReader object, and blah blah blah and before you know it you've got a dozen lines of code. In Ruby, you type "File.open(filename)". Done!
Ruby just gets out of your way, whereas .NET is often an obstacle in the way of what you want to accomplish.
That said, even if the language required more than one line to read a file, that wouldn't be a good example of a language being verbose. That would be an example of a missing shortcut in the standard library, which is an important distinction (the latter is much easier to fix than the former.)
There's a subtlety to API design -- and naming in particular -- that's separate from writing the code and getting it to work. You can get by in .NET development with classes like ObjectFactoryManagerBase, and rely on Intellisense (or, worse, copy & paste); or you can put some up-front thought into designing a usable set of components and giving them clear names.
To .NET's defense, Microsoft seems to be very aware of this. New features in .NET and C# are specifically designed to get out of your way. The language's verbosity is definitely on the decline. It's nowhere near Ruby's level, but for a mainstream, "Fortune 500" platform, it really isn't half bad.
If a project expands to a large number of number of developers, eventually the power to do virtually anything becomes a liability when a lone bad developer can wreak havoc on a project-wide scale by redefining standard functions, or relying on scary monkey patches.
Having static typing helps prevent these massive apps from becoming an even larger cluster.
We can do the "ruby doesn't scale" dance back and forth all day but we're not really learning anything.
In VS.NET, intellesense doesn't just reduce the amount of typing you do. I mean sure, it does and all. It reduces it to pretty much zero. You can put the cursor on an empty line and hit CTRL+space and it will suggest "for". It knows everything about the language, and everything about the class library it's dealing with, and everything about every class in your project, and everything about stuff you haven't even referenced. It knows context too, so it'll figure out what you actually want to see.
But that's not why you need it. It knows your codebase so you don't have to. It knows all the class libraries so you don't need to memorize any of them. It compiles your stuff as it goes so that you can navigate around it like everything was hyperlinked. And it doesn't find things by matching strings, so you can refactor to your heart's content without breaking anything.
All of that is stuff you want to do in Ruby. It's an awesome language and all that, but it still needs to open files and I don't want to keep file opening in my head, so I need a tool that lets me type "File." and pops up a little menu telling me properties of the File class.
So no, it's not that we're doing different things. We're doing the same thing. I just feel like I have a lot more space in my brain to keep domain stuff because it's not filled with the entire content of my codebase.
I agree that .Net projects do tend to differ from Ruby projects. But I'm not willing to be as definitive as the author by saying "Ruby and .Net Developers Solve Two Different Kinds of Problems". That's too black and white for me.
Also, the fact that there are IDE's for Ruby (RubyMine and Netbeans) shows that there is becoming more of a desire / need for an IDE in the Ruby world. Even the good old standard of using TextMate mixed with a zillion plugins / macros shows a need.
Getting back to the point of the tweep's original question though; If a person doesn't understand the value of intellesense, they're not doing it right.
I think the argument against a full-blown IDE which optimizes code-writing is, if it's possible for an IDE to make your code easier to read or write, why isn't it possible to simply improve the programming language itself to make the code easier to read or write? Some sort of automated code translation/compression/generation is improving the coding experience for you, the developer. So why can't that improvement be baked into your compiler/parser/libraries, so the program's code reflects that improvement regardless of the tool you use to view it?
Intellesense does this by letting me type a couple chars of a known method, then pressing tab.
It should also make what I kinda know easier to find.
A good IDE does this by letting me find a method in intellesense and showing me the method description.
I don't buy this argument that "enterprise" software requires enterprise languages and tools either. There are plenty of counterexamples of large, complex systems built in dynamic languages.
Being familiar with .NET and Ruby/Rails, you would be hard-pressed to find .NET development in my org that couldn't be done as well as or better in Ruby/Rails.
The reality is .NET is a "safe" choice for large businesses. The people making these technology decisions do not understand (or care about) the technical aspect of the technology, but rather look for the status quo/known quantity (few large firms want to use 'unproven' technology), support contracts (if something breaks we can at least get the vendor to fix it), available/sustainable (and ultimately off-shoreable) labor, and a "unified platform" (Exchange email leads to active directory leads to MS product A leads to MS product B, etc.).
It comes down to the high-level IT governance, and what IT steering committees are comfortable with staking their reputation/jobs on.
"No one ever got fired for buying IBM (or MS)"
The only reason why .NET and Ruby/Rails developers solve different kinds of problems is because management are large companies are too scared/lazy to try out new solutions, thus Ruby (and many other lang devs) aren't even allowed to solve ".NET problems".
Anyhow - the article was just a nice little PR move anyhow.
OK, so what are some of the .NET enterprise applications that are too complex to be built in Ruby - or at least are better built in .NET?
Why would you think that would be better done in Ruby? (not flamebait, just honest question - never programmed in Ruby)
@viggity ... your friend is right ;)
But it's not the language (C# is decent) ... it's the company behind it, the community, the culture, which ultimately contribute to God-awful libraries.
Also, please don't hide behind the "scalable enterprise applications" argument.
Show me any CRM, and I can make with you a bet that the stuff 37signals does is way harder ... even if their products are simpler in functionality, a small company that sells products straight to consumers has drastic budget and time limitations, not to mention the burden of meeting consumer expectations (which with enterprise apps doesn't happen, because enterprise apps are awful by definition).
Also you want to talk about applications ... but I still haven't found a good CMS written for .NET (commercial or open-source), even though a CMS is nothing new and even though for PHP you can find a dime and a dozen.
Again, it's not the language, it's the culture ... go have a look at http://playframework.org , a gem among piles of shit that are forming the Java ecosystem.
As primarily a .NET developer would love to see the day where I could comfortably ditch VS and use Vim instead. Instead I settle for VsVim. But is that really something MS is striving for? Of course not.
I think the difference lies more in the cultures. .NET was born out of the largest software company in the world with billions at stake. That alone ensures it will be on the conservative side. Whereas Ruby was born more in the open source and start up community, it has more freedom to just go for it. Look at Rails 3, massive changes and a general attitude of "this new way of doing it is better, so buck up." Which is fine, perfectly fine, for Ruby. Microsoft would never get away with that (take ASP.NET 4 for example, they went to exhaustive lengths to make sure it can be ran in "legacy" mode). The jump from .NET 1.1 to 2.0 was a painful one, and so was 3.5 to 4, and Microsoft knows that. Yet they still maintain admirable backwards compatibility despite all of that. They took serious effort to make sure from 4 on, .NET releases can live side by side. I don't think your average Ruby framework/library/whatever would care so much.
I use Intellisense a lot in C#, but oddly I don't miss it when I'm programming in Ruby. And when I'm programming in Clojure, I do have "Intellisense" via SLIME, but I don't actually use it a lot.
I'm not entirely sure why this is the case, but I'd speculate that it's because the REPL takes the place of Intellisense.
In C#, I use Intellisense to remind me how a library works, and to explore the API. In a language like Ruby or Clojure, I have a REPL permanently open, and I use that for exploring the API, or reminding me how something works. It takes a couple more key presses to get to than the Ctrl-Space of Intellisense, but the REPL is more powerful. Also, modern REPLs usually support tab completion, so you can use it like Intellisense.
Come to think of it, I use the SLIME REPL so often I should probably add an explicit keybinding for it.
But no, really: I believe that apart from desktop UI-heavy applications (and I do work on this), Ruby and .Net can be used for exactly the same topics.
It feels a bit like if the headline is intended at reassuring people: you're not doing Ruby ? That's not that bad, it's ok.
My personal belief is a developer that doesn't have a grasp at both static (java/c#) and dynamic (be python or ruby or...) is really losing something there.
- it's ok if you're suffering everyday with over-engineered codebases
- we provide a tool to ease the pain - go buy it!
If people are looking to poke at you, they'll do it, but otherwise, I'd say, yeah, it's a reasonable observation/opinion.