From the tagline of James's blog: "James McGovern is an industry thought leader whose focus is on the human aspects of technology around open source, enterprise architecture and agile software development."
I suppose that anybody can call themselves a thought leader, and, as I can readily attest, anybody can write a book. But it takes major cajones to be both antagonistic towards and completely ignorant of a technology while calling yourself a thought leader.
James is on a double rant against Ruby as not being ready for the enterprise. Others, such as DHH, have addressed his convoluted logic with respect to architecture in previous posts. But James's latest missive, whereby he demonstrates that Ruby isn't even technically ready for the "enterprise", is so funny that Carrot Top wouldn't be allowed to use it as a joke.
Let me just take his points on one at a time:
1) "Let's say I decide to hire folks from one of the more prominent agile consulting firms who will charge me a higher hourly rate and uses Ruby whereas the other insulting firm who practices Java and Agile Methods but is from India takes a lot longer but has cheaper hourly rates, which one will be cheaper? The real answer is when I receive the "bids" from both parties, they will be competitive."
We here at Relevance have already thoroughly answered this. We can charge more and STILL be cheaper. Simple as that.
2) "Costs within the enterprise are not in software development anymore. Have you seen the electrical costs within most data centers do to all those inefficient but rapidly coded applications? Maybe you have figured out that within most large IT shops that if only 25% of the folks there know how to code then productivity gains here aren't as significant as say realizing savings from say operations where more folks reside. How does one save on operations costs? The answer is easy, one may choose languages that exhibit better performance and scalability characteristics than one that doesn't."
If he's serious, we can all stop thinking about agile software. For that matter, we can quit wasting time on Six Sigma, ISO90001000001010230231013, streamlining the sales process, getting better phones, and hiring smart CEOs. I suppose he has a point, though: ask the guys from Enron if the power bill is the only thing that matters in a company.
3) "Continuing the thought, Ruby currently doesn't realize the above characteristics. Maybe if it added native thread support, this aspect may go away."
Even if you assume that his point #2 is true, native threading is hardly the first place you would go to make Ruby more efficient. Try having a compiler, or more caching, or, well, almost anything.
4) "Another deficiency that Ruby needs to consider is that not everyone on the planet speaks the same language. Enterprise applications (I really should post a definition for this but will save for another blog entry) in many shops and as written by many large software vendors need to support multiple languages simultaneously. Ruby needs to address multilingualization quickly."
Well, he's right, Ruby is deficient in this area. Score: James - 1, Sanity - 3.
5) "In my career, I have noticed that folks who know Visual Basic tend to not get multiple threading architectures and will make design level mistakes. Ruby folks as another predictor (different from guarantee) tend to not design (Yes, I know the agile party line here) and are successful in getting applications to work quickly but tend to skip out on long term maintainability. Maybe the best thing that Java folks can do for the Ruby community is to bring more of a software engineering mindset to development."
Wow. I didn't know that the Ruby community was made up of ex-VB developers. Exactly who does he think makes up the Ruby programmers of the world? I will be willing to bet a year's salary that a higher percentage of Ruby developers know how to design a reasonable application than Java developers. Ruby programmers that I know tend to come from Unix and C/C++ backgrounds, and have a pretty deep understanding of how software works. There are a lot of Java programmers who can't even compile a program without Eclipse.
6) "Ruby is going down a path of creating their own Virtual Machine. It seems to me, that they should simply put Ruby on the Java VM and not waste efforts in reinventing the wheel."
WTF?? JRuby?Ruby.NET? Here's an idea: open Google. Type "ruby jvm" or "ruby clr" into the little white box in the middle of the page. Press "Enter". Read about JRuby, Ruby.NET or even possible Parrot integration. Then get back to me.
7) "Ruby should support the notion of being about to be embedded into other platforms vs. simply being standalone."
Isn't this is point #6, but shorter?
8) "Ruby seems to be missing something that is otherwise fundamental in other languages which is support for Regular Expressions."
Ho. Ly. Crap. Ummm --- James, Ruby not only has a RegExp class you can use to model regexes and match them but also has the good old
/^[aeiou].*/g style constructs to boot. And, you know how you could have found out about that? By opening up one of those "mediocre" books about Ruby, turning to the index, and looking under "R".
9) "Does anyone agree that the notion of packages / namespaces should be a part of every modern language?"
Ruby has an explicit construct called a Module. The entire purpose of a Module is to provide lexical scoping for classes, variables and functions and act as a unit of deployment. It has no other purpose, it is the purpose for which it was intended. Again, want an easy way to verify this? Open up the index of Programming Ruby. Look up the word "Namespace". You will see the following entry:
"Namespace. see Module."
It doesn't get any more succinct than that.
10) "I also couldn't find the equivalent of instance variables. Wouldn't that make reuse at an enterprise-level somewhat problematic?"
I think this is just a translation problem. Let me tell you what James was actually trying to say: "I've never looked at Ruby, written a line of code in it, or read a blog entry about it. It threatens my Java-based hegemony, though, so I'd better get out in front of the issue right away."
Because there is no other possible explanation for being a "thought leader" on software and being unable to ferret out the exemplars of the Big Three (inheritance, polymorphism, encapsulation) in any object oriented language in under 30 seconds.
Who IS this guy?
11) "Shouldn't the notion of methods being public, private and protected also be a part of every modern language?"
Yes, which is why Ruby has them. All three. Although, I can totally understand how he missed them. They're called "Private", "Protected" and "Public" in Ruby.
12) "Let's say that Ruby steps up to all of the things I listed above and does so in a rapid manner, wouldn't that break all applications that used Rails? I believe the answer is that it would cause a trainwreck for any enterprise application that was built on top of it?"
There isn't anything, not a SINGLE THING, that he's suggested that would break Rails, because Rails is already dependent on every single one except native threading, which wouldn't hurt to have but certainly wouldn't hinder Rails apps in any way.
It really looks like he thinks Ruby is some kind of hybrid of bash scripting, BASIC and Lincoln Logs, that Rails is nothing but a naming convention built on top of it, and all of it is used by monkeys with pointed sticks. Its as though he's completely and totally ignorant about anything and everything in Ruby and Rails, but feels confident in declaring it unfit for "real companies".
13) "Does anyone in the community acknowledge that software vendors and even many large enterprises don't build on top of scripting languages because they don't want their intellectual property so discoverable?"
Yes, that's why Java is such a great alternative! Because bytecode totally hides programmer intent! (Forget about all those reverse engineering tools, because there are obfuscators too!) I won't even mention that most "enterprise" code lives entirely within the enterprise that wrote it, so from whom are they hiding it?
Look, I like Java. A lot. And, I like .NET. A lot. I think they're great. I also think Ruby is great. And VB6. And bash scripting. And Python. And Perl. And even Lisp. So, don't get me wrong, here. I'm not saying that there is no argument that can be made against Ruby in the enterprise.
I just wish that the people making those arguments would either know what the hell they are talking about, or admit that they are ignorant and just out for your money. I am sorry that this blog post seems angry and tense. But, really, if nothing else, this guy makes us other Java people look bad.