Ask and ye shall recieve

A few posts back I complained about Ruby on Rails in general, partially because its got the buzz and I just don't see why.  In a comment in one of the Ruby stories over on DotNetKicks I said

I must be a complete loser, because I can't see where Ruby is such hot shit. I'd love to read a story, "What you're not getting about Ruby and why its the tits."
Well, my eloquent cries for help were heard.  Scott Hanselman posted what he thought I was looking for:  Programmer Intent or what you're not getting and why its the tits

Scott's post is good, but I'm afraid that it doesn't exactly answer my question.  He does answer two different questions, both of which are entirely valid:  Is it important to learn new programming languages, and is expressiveness in a programming language important?

The first question is an obvious yes.  In our profession, technology is always advancing.  It cannot hurt to explore new ways of doing things.  In fact, if you don't, you'd better find a new job 'cause yours will be obscelete (and deprecated) within five years.  So I don't think there is anything wrong with expanding your horizons.  As long as balls don't touch.

The second question I'd answer with a maybe.  Expressiveness in a language may seem like a good thing at first, and Ruby is definitely expressive, but there are some hidden costs that need to be accounted for.  Almost every post I've read about Ruby by its fanboys is about its "Syntactic Sugar", or expressiveness.  I've commented on the sugar of Ruby before here and in other places.  While it does allow you to do cool stuff that is pretty clear in intent such as: 

you_are_fubar if @you.screwed? && @you.lackey?
is it worth the costs that come with such expressiveness?  With Ruby, those costs seem to be the speed penalty and harder maintainability.

Ruby on Rails, being an interpreted language, incurs a speed penalty during execution.  This is because the program is interpreted, which means the execution engine of Ruby must read high level code and translate it into machine instructions at the time of execution, every time it is executed.  This is in contrast to compiled languages, which are interpreted once and translated into a low (or lower level) machine language which executes much faster.  Of course, this depends on the particular implementation of Ruby you're using.  I'm definitely no expert on the subject, but I believe there is no reason why this must be true.  Certainly the various Rails implementations in the .NET platform will be compiled into IL like any other language run on the CLR.  But until Ruby is compiled this fact is going to be the turd in the punchbowl for developers seeking to make scalable web applications.

The second cost is that Ruby appears to be harder to maintain due to the complexity of the language.  K, I'm stretching on this one a little;  I have to add the disclaimer that I have not used RoR to create a web app, nor have I attempted to maintain a RoR app written by another developer.  I'm probably talking out of my ass, but the issue of maintainability has been concerning me, as a .NET developer, for awhile now.  Microsoft is throwing a lot of new shit into the .NET platform, if you haven't noticed.  While some of it is awesome (LINQ), other bits are friggin scary (lambda expressions, anonymous types).  I dread coming behind a developer who has written his entire application using lambdas and anon types.  While you can certainly do some amazing stuff with them and reduce cyclomatic complexity, at the same time your code actually becomes less expressive.  Writing code that can be easily read and understood by others is almost as important as writing code that does what it is designed to do without error..  This becomes harder as the complexity of a language increases.  By complexity, I mean how many different ways can you do the same thing.  And, it appears to me at least, Ruby is one of those languages that is chock full of complexity.  Again, its not necessarily a bad thing to have the option to perform a task ten different ways, but when you use each one of them in your program you've made the task of maintaining it exponentially harder.

Is it worth it?  I still don't know.  Rail's bandwagon is nice and shiny and looks like its chock-a-block full of hot chicks.  But you know how some chicks look hot from a distance, but when you get up close to them you see that they're busted.  Kinda like Lindsay Lohan at 3am on a Saturday.  I get the feeling that a lot of people are tagging it just so they can tell their friends they did afterwards... 

Programming Post by: McGurk at 01:55 PM | 1  Reply | Reply
Kick this post:

Here here.

1 Posted by Lee Richardson on May 24, 2007 05:18 PM (eKhah)

Hide Comments | Add Comment

Press butan, recieve imagelet. Hover for preview. Imagelets are pasted at the end of your comment. Think ahead.


Post is locked.