Does Ruby Need More Opinions?
Today I read JesusPhreak's "Of snakes and rubies; Or why I chose Python over Ruby" and it highlighted a few of the feelings that have been running around in my head lately regarding Ruby. He points out Python's wealth and depth of libraries, style guides, and how Python is wider used and less dependent on a single technology to promote it. While Rails is good, he seems to feel that Rails is defining the entire Ruby experience too much. I'm inclined to, sadly, agree.
While Ruby has a large life outside of Rails, Rails tends to define the experience for a great deal of new users. Whereas many newcomers to Python move to the language because of the language, a lot of people are only trying Ruby because of Rails. As matz has said, Rails is Ruby's killer app, but don't we need a much larger collection of solid systems and apps than a single killer app? Even amazing tools and libraries (Mongrel, for one) for Ruby tend to written with Rails in mind. Rails has a significant impact on the Ruby environment, and as opinionated software that means a single world-view is also being brought in.
I guess this post is my first step to thinking about the answers to all of this. I am using Ruby outside of Rails a great deal now and can see how powerful it is, but Python coders (and Perl coders, of which I am one also) certainly have a good point when pointing to the lack of a larger ecosystem with Ruby. It feels like the Ruby community agrees too much and prefers to centralize around existing projects than to reinvent the wheel. Reinventing the wheel feels like you're violating DRY, but.. just because the Rails opinion works for Rails, does it have to work for everything else?
I'd hate to have to learn Python to feel like I'm progressing as I've fallen in love with Ruby. So, is it possible to knuckle down, keep producing code, and end up with a development ecosystem as rich as that of Python or Java, or should we be looking to maintain a foothold in several languages, use the best features of each and tie them together with Web Services and the like?