I realize I'm late to the party, but... On Tuesday 02 February 2010 09:19:32 am Jim Maher wrote: > I've asked several friends and associates (application developers) what > programming language they recommend for new development. The most > prevalent answer was Ruby (with Ruby-On-Rails a close second). This was > surprising to me, since my understanding is that Java and C (et al) are > most prevalent. Quite possible, but it depends entirely what you're doing. > Is Ruby a good programming language for general purpose usage? That depends what you're trying to do. > I don't want to skew responses by specifying a particular application or > usage. However, please DO respond with qualified answers if you feel > that is appropriate. A quick analysis of Ruby's weaknesses: - Even once you hack in support for Lisp-like macros, it's likely not going to feel as natural as Lisp. - Slow. Not as slow as people suppose it is, but it's not C, or even Lisp. - Can be difficult to bundle into one exe, so it _may_ be difficult for Windows desktop applications. Now, I never got enough into Lisp to get really good at macros, and Ruby's syntax is still flexible enough to do interesting things with it -- in fact, at least a few of the great examples I've seen of Lisp macros can be done in Ruby, though they obviously aren't Macros in Ruby. So my answers are mostly going to be qualified by the other two concerns. Ruby is my favorite language in every other respect, so I'm going to say, choose Ruby for everything except places where you actually need vertical performance (performance on a single machine) -- but actually measure it, don't just assume! -- and for places where your target output is a single .exe, unless you can figure out a better way to bundle a Ruby app for Windows. This does mean, by the way, that Ruby is ideal for web development. You control the installation (so you just make sure to get a web host which supports Ruby, or which gives you enough control to use it), and you can always throw more hardware at it, which is cheaper than developer time. There are exceptions to this rule, but when you actually get to the point where you're so big that it's worth a few months of developer time to shave 10% off in performance, that's a nice problem to have, and it's worth getting there before your competitors do. > That is, > is it worth the time and effort to become proficient? That's a different question. I never use Lisp, and I still consider it worth the time and effort to at least learn the language. Ruby is very easy to pick up, and you should be able to see very quickly whether or not it's worth the time and effort to become _more_ proficient. If you already know Java, many concepts will translate right over, but the beauty of Ruby's syntax will make it hard for you to look at a Java program again. The biggest reason you should learn Ruby is to understand what it means for code to look pretty, and why you might want your code to look pretty. Look at some Ruby on Rails examples, and try to keep in mind that Rails is written in pure Ruby -- that is, Rails is a Ruby library that adds this kind of thing: 30.seconds.from_now However... > Again, I don't want to sway responses by > specifying a background for the learner. Might be a relatively new > student of programming, might be an old-timer with decades of > development experience. This is also not something you can remove from the question. Again, if you already know Java, some of the object model will be easier to understand, like the concept of object references. If you know C++, it may take a bit for you to understand why it's weird to ask about "passing by value" in Ruby, versus "passing by reference". Similarly, if you're just starting out, it depends who you ask -- I would say you should learn Ruby, so you get excited about programming, and so you actually start programming faster, without having to learn about nasty low- level things like pointers and memory allocation. Others would say just the opposite -- you should start low-level, so that by the time you get to Ruby, you understand exactly what the language is doing under the covers. Either way, you should eventually learn both high-level and low-level languages, for the same reason -- you want to understand just what you're asking the language to do for you. On the other hand, if you are already incredibly proficient in something like assembly language or COBOL, you might find that you've already found your niche, and your job will likely not become obsolete -- so you might want to learn Ruby as a curiosity, but it's questionable how useful it will be to the actual work you do. If you're already incredibly proficient in Lisp, Ruby might be a hard sell, because there are specific, measurable ways that Ruby is less powerful than Lisp -- the biggest reason I prefer Ruby is syntax, and most Lisp people _like_ s-expressions.