Can’t find the Ruby Kool-aid

I picked up the Apress book about Ruby for Systems Administrators, because I plan on learning enough about Ruby to make it a viable tool that I can use if I have to use it at some point. I still plan on doing that, but in reviewing the first couple of chapters, I don’t think I’m going to like Ruby very much, and I think I’ll have to be dragged kicking and screaming to use it. Maybe as I gain some practical experience with it this feeling will subside.

I should say that I did all of my sysadmin programming in shell and perl for many years. I still use them somewhat regularly, if only to maintain existing code or to write code for clients who require Perl, or to work on systems that don’t have Python installed (yes, these exist. Basically, unless you’re using Linux, Python is not “just there”). If I have a choice or some say in the matter, I’ll tend toward Python if I’m writing new code. I’m pretty sure that all of the non-web code that I’m writing for AddThis, for example, is Python (web code is in PHP, and I do database development using straight-up SQL, because we’re using MySQL – if I were using PostgreSQL, there’s a chance I might use Python for that as well).

When I started using Python, I also looked at Ruby. It was one of those periods of time where I was pretty much out looking for a language to add to my repertoire. I had experience with Java, C/C++, PHP, Perl… enough languages that at this point I knew exactly what I wanted in a language: I wanted a language that I could use no matter what I was doing. Of course, I do mostly systems coding, but I wanted a language that would be enjoyable enough to use, and agile enough, and capable enough, and available on enough platforms, and <long list here> that I could use it for web and perhaps even GUI scripting as well (I tend to avoid scripting GUIs in any language because I just think going straight to the web skips an oft unnecessary step in the evolutionary cycle).

Turns out, Python won because it happened to be in heavy use on a couple of projects I was loosely involved in at my job at the time. However, I’ll state that I volunteered to be involved in them so I could get a better grasp of Python, and I’m glad I did. My feeling at that time was that Ruby looked too much like Perl to me, and I was really making an effort to move away from Perl, because after 10 years of coding in a language, you should not still feel like a complete neophyte every time you have to use it.

After more reading about Ruby, I’ve discovered that, due to the fact that Ruby supports things that don’t exist in Perl, yet tries to adhere to a Perl-ish notion that symbols are good visual indicators of various things (though the same symbols mean completely different things between the two), it actually looks even more cryptic to me than Perl does.

This is completely a “doesn’t fit my brain” thing. I’m sure Ruby is a fine language, and if I made regular enough use of it, I’d probably get used to parsing all of the symbols (though the same could be said for Perl and even shell as well). Python has some weirdness to it as well, which also took some getting used to. Unfortunately, I don’t really have a project to use Ruby on right now, and nothing forcing me to use it, and no existing projects that would be easy for me to involve myself in. I guess I’ll just have to find some sysadmin task that needs doing and see how Ruby works out. My primary language, though, is likely to remain Python, as I find it about 60 million times easier to read than Perl, and 100 million times easier to read than Ruby. I learn a lot by reading code, so I guess the ability to parse it readily is of primary importance to me in picking up a new language.

  • Rick Harding

    I looked at ruby a while ago and I came to the same conclusion with regards to the symbols. I’m just not a fan of that. I’ve never been a perl guru/fan so that made it all the worse for me. Python just seems to make a ton of sense, especially for sysadmin stuff.

  • Robin

    What symbols are you talking about? Perl requires much much more usage of symbols than Ruby. The only ones you’ll use most of the time are @instance_variable and |block_var|. Things like $_ are deprecated and their usage is frowned upon.

    I know and use both Python and Ruby and find them equally beautiful. What I like more about Ruby is its OO system (only message sends, no distinction between attributes and methods) and blocks. In Python I like the explicitness, the one way to do it, its syntax (named arguments, etc.) and functional properties (constructors are functions, yay).

    What I don’t like about Ruby is the Perl heritage and about Python its inconsistencies in naming functions (assertEquals), but that’s hopefully going to be better in Python 3 and with more widespread adoption of PEP 8.

  • rgz

    There is what I call the Python-Ruby paradox. It is said that in order to choose between Python or Ruby you must learn both but this beats the greatest advantage of Python the speed of learning. With Python you can get productive from day one thanks to the many thing you DON’T have to learn in order to use the language.

  • m0j0

    Interesting to hear, Robin – the book I’m reading makes pretty good use of $_, in addition to the others you mention, as well as @@ for (iirc) class variables, and it also mentions that you have to use [] for arrays in some instances, which seemed odd (why *sometimes*?), and this is in addition to perl-isms like =~

    It’s not a matter of not being able to cope, mind you. It’s just that the lack of this stuff – which is to say, the explicitness of Python is what I found most refreshing when I made the move.

    Well, that and a distinct lack of braces. I have a bad schizophrenia with braces. I use allman-style braces, which means a brace gets it’s own line. It’s the only way my brain can parse scope. But I *hate* wasting all of that space! So I’d come up with crafty one liners to reformat my braces. I guess I’m in the minority, but I found the significance of whitespace in Python to be a big win ;-P

  • Robin

    Class variables are a design wart in Ruby, they have strange behaviour. As for $_, I have never used it once in my code. For the regular expression things, there are OO alternatives, like “string”.match(/i/) (instead of =~) which returns a MatchData object (or nil if it didn’t match).

    You don’t have to use braces in Ruby, use do … end. Well, hashes use braces too, but that’s the same as in Python.