I have a troubled relationship with Ruby. I really like to write it, but it has taken me a while to come to terms with Ruby.

I love to programming, but with a specific twist. One thing to love about programming is the career possibilies available to great programmers. Another is the possibility to produce things that peope love. One reason to love programming is the good that it lets you do for others and have a positive impact on society.

However, none of these really describe me. They each are an important part of why I love programming, but not exclusive or even primary. They each contribute to a fascination with programming as a whole. I believe programming is new thing, which is distinct than any other discipline. To program well is to have a good understanding of writing, design, science, and math. There are also very open questions in our field: How do we write better code? What makes code better than other code? What does code mean about human thought? What can code, thought, and its relatinoship teach us about reality and universe itself?

From this point of view, languages that are high in theory, such as Lisp and Haskell, make sense. They let you explore the nature of programming in ways that more "traditional" langauges do not. Ruby sits at an intersection here. While Ruby does not give you the power over the written syntax, it does give you the power to do quite a bit with what the syntax 'means'. This really requires a larger discussion about Ruby domain-specific languages, however, the essence is that Ruby lets you do The Right Thing as far as DLSs are concerned.

There is one more really important point to this: I am a recovering unix hater. I wont get into the details of my personal unix hatred, as that belongs in another post, but the recovery process has been interesting. Unix-hating is good for sport but poor for productivity. The only real way to get any work done is to embrace it. Ruby has played a pivotal role in this. I don't feel constrained by the language -- whenever I see a problem, the means to solve it the best way I know how are very possible. On the other hand, Ruby feels very natural as a Unix citizen. The cognitive dissonance that arises from working with a Lisp language and working with Unix basically recedes into the background.

If you love Lisp, it is really easy to hate on Unix. If you are one of those haters, Ruby is a really good way to start your recovery, if you are interested.

Basically, it comes down to this: Any programming language involves some tradeoffs. Admittedly, using Ruby means you lose some theoretical possibility for expressiveness. However, for practical, day-to-day, get-it-done programming, Ruby has made those tradeoffs almost perfectly.