I've done Ruby for about 7 years and can tell you that after a while, things fall in place, including (most of) the syntax. For me, the most annoying thing is trying to create and pass around functions -- the syntax for that just isn't as easy as in CL or even Python. Having first class functions and a good function-passing syntax would be a nice addition to Ruby 2.0.
But yeah, marketability notwithstanding, I slightly favor Lisp.
"I've done Ruby for about 7 years and can tell you that after a while, things fall in place, including (most of) the syntax."
I would expect any adroit HN reader to be comfortable in a programming language after 7 years :) What is odd is that you say "most of the syntax". Would you please elaborate (aside from what you said about function creation/passing)? I like ruby, but I'm not to the point where the syntax falls into place as easily I wish it would.
As another data point, I had been doing Ruby for five years when I switched to Clojure. After a single year in Clojure, I knew the language much better than I had ever known Ruby and was able to read the source for the compiler itself and spot issues in it. Common Lisp is a lot more complicated than Clojure, but certainly simpler than Ruby.
Personally I had a hard time remembering the difference between Procs, blocks, and lambdas in Ruby, though I believe this is partly due to the fact that the differences shifted in minor point releases.
The things that I still don't like about Ruby's syntax & semantics (even though it's my second favorite language):
- No keyword arguments
- No good syntax for creating pure functions
- Metaprogramming seems tacked on
- HERE doc manipulation is atrocious
- There is no 'fundamental unit' of a Hash
(other than a destructured key-value pair),
so mapping a function onto hash keys or values
is always a call to #reduce or a Hash[array]
- Creating a Hash with #reduce is not pretty
- Destructuring isn't so sophisticated
- Local variables become defined even if they aren't in your
current code path
- I already mentioned method passing
These are all things, by the way, that Clojure does much, much better.
But yeah, marketability notwithstanding, I slightly favor Lisp.