Thread: Ruby Or Python

Page 1 of 4 123 ... Last
  • Jump to page:
    #1
  1. Only the strong survives!!.
    Devshed God 1st Plane (5500 - 5999 posts)

    Join Date
    Feb 2003
    Location
    A World of wonders.
    Posts
    5,583
    Rep Power
    407

    Ruby Or Python


    I dont know if this has been posted before... but.. i wanted to know... if it is worth learning ruby or python first? i mean.. i know some pythong... and i actually never tried ruby yet.. but what are the advantages of me learning ruby?
  2. #2
  3. Only the strong survives!!.
    Devshed God 1st Plane (5500 - 5999 posts)

    Join Date
    Feb 2003
    Location
    A World of wonders.
    Posts
    5,583
    Rep Power
    407
    Fine then.. i will stick with python
  4. #3
  5. (retired)
    Devshed Supreme Being (6500+ posts)

    Join Date
    Dec 2003
    Location
    The Laboratory
    Posts
    10,101
    Rep Power
    0
    I was waiting for this question to start a flamewar. How boring

    Oh well, here I go: in my opinion, Python is far more useful than Ruby because it's got the libraries, it's got the large developer community, in short - it's USEFUL. The only thing Ruby is used for at the moment is Ruby on Rails.

    HOWEVER - I'm not saying that Ruby is crap - far from it ( although I DO get sick of ROR fanboys ), and learning a new language is always a good thing. For that matter, I think both Ruby and Python are very similar in syntax and in design principles, and aren't terribly different at all.

    --Simon
  6. #4
  7. Only the strong survives!!.
    Devshed God 1st Plane (5500 - 5999 posts)

    Join Date
    Feb 2003
    Location
    A World of wonders.
    Posts
    5,583
    Rep Power
    407
    Originally Posted by SimonGreenhill
    I was waiting for this question to start a flamewar. How boring

    --Simon
    Hehe how evil... its probably because they all know that i never tried ruby before.. or never actually seened it in action ( that i know of ) but.. thanx... my last decision was py , although the flame war would of been good hehe
  8. #5
  9. fork while true;
    Devshed God 1st Plane (5500 - 5999 posts)

    Join Date
    May 2005
    Location
    England, UK
    Posts
    5,538
    Rep Power
    1050
    disagree. not going to start a flamewar about it but even in the core ruby libraries there's enough to make python jealous.

    and there's something about being able to read and process a file in one line that's kinda cool

    Comments on this post

    • netytan agrees
  10. #6
  11. (retired)
    Devshed Supreme Being (6500+ posts)

    Join Date
    Dec 2003
    Location
    The Laboratory
    Posts
    10,101
    Rep Power
    0
    I'm sure you could write an entire operating system in a perl one-liner. This does not mean that it's cool ( well THAT would be, but LOC counts are not a good indicator of readability or power of language ). For that matter, I'm sure I could do the same in python, by using the ; .

    So - sell Ruby. What does Ruby do better?

    -Simon

    Comments on this post

    • Yawmark agrees
    • netytan agrees
  12. #7
  13. Only the strong survives!!.
    Devshed God 1st Plane (5500 - 5999 posts)

    Join Date
    Feb 2003
    Location
    A World of wonders.
    Posts
    5,583
    Rep Power
    407
    Originally Posted by SimonGreenhill
    So - sell Ruby. What does Ruby do better?
    -Simon
    thats what i want to know
  14. #8
  15. Contributing User
    Devshed Newbie (0 - 499 posts)

    Join Date
    Aug 2003
    Location
    Zomergem (Belgium)
    Posts
    149
    Rep Power
    21
    I've been in the same position as you and I decided to learn whichever I found a good book for first. Which ended up being Python. But still, while Python has a lot of good stuff I like Ruby's syntax more, it's cleaner and more readable imho so I ended up gong back and trying to learn Ruby ...

    Also I like Ruby's documentation better, even though there's less of it what there is is written in a much clearer fashion leaving for less time wasted trying to figure out how some method works.

    Python's integration with GTK is in fact what drove me back to Ruby, the way Python structures this GUI code feels just plain awkward to me, the way ruby deals with it felt quite a bit more natural...

    (I'm not talking about ROR, I've never used that, nor do I really intend to)

    All of this is my own opinion though. But honestly I'd take a look at both and see which one you like best, they're not that hard to learn if you have a little bit of time
  16. #9
  17. fork while true;
    Devshed God 1st Plane (5500 - 5999 posts)

    Join Date
    May 2005
    Location
    England, UK
    Posts
    5,538
    Rep Power
    1050
    ruby? i'll sell it

    Say you've got to process a file, you'd do it like this in perl (my python sucks, you don't wanna see it)

    open(INFILE,"</path/to/file");
    while (<INFILE>) {print $_;}
    close INFILE;

    or something similar.

    In ruby

    File("/path/to/file") {|x| puts x}

    now understand that's a grossly simplified example. But note that it takes care of allocating and deallocating the filehandle for you.

    Now let's try some string manipulation...

    We have inline regexps, perl style, lovely, unlike ****ing with the python regexp objects.

    x =~ /([a-z]+)/
    print $1;

    something like that. Saves a lot of time over the python version

    Then there's all the lovely methods attached to objects

    puts "blah".reverse
    print ("2122".reverse.to_i - 100)

    see that, i reversed it and then converted it to an integer, all in one statement. quick and easier to follow

    The classes that come with ruby are more logical and easier to use, and they have a lot of nice functionality, and many shortcuts. An example is the Marshal class. Being a python god you'll know all about saving dictionaries to file, i presume. Well the marshal class saves any object in a marshalled form that you can get easy access to. Imagine sending it over the net and being able to take it apart again nicely Well it's a good example

    require 'Marshal'
    marshalledhash = Marshal(myhash)

    now, we could have passed in a second parameter, filename, which would save us writing this to file, since that's one of the common things you want to do with marshalled objects. Every core class is like this, and other classes try to be like this. An example is ruby-gnome2, which is ridiculously easy to use. Cool, I swear.

    Ruby also excels when it comes to hashes (dictionaries) and lists (arrays).

    Try this for size

    {x=>5,y=>8,z=>9}.each {|x,y| print "#{x} = #{y}"}

    that #{} business was interpolation, btw, interpolating the variables into the string.

    other methods on hashes include the standard python kit i suppose, keys, values, etc.

    what python doesn't allow you to do is construct a simple loop like that with a passed in lamda (the block in brackets is a lambda function, called a block that is activated within the class in a special way). python's lambdas really suck ***, only allowed to be one statement and all... Try this for size

    myarray.each do |x|
    x.chop!
    print x[4]
    end

    That was two statements, counting as a block too, and i could have done more. And you'll also notice i used array notation on a string. that gets the character at that position, like you'd use on a python list to get a member. you can also use the python syntax to get a subset of the results

    x[1...3]

    x[-3...-1]

    etc.

    there are just so many neat things built in, y'know...

    creating your own functions that accept blocks is easy too

    def myfunc (x,y)
    yield #This is what calls the optional lambda block there.
    end

    if it suits you, you CAN also pass a lambda directly as an argument if that's what the function expects

    myfunc(x, lambda {|x| puts x})

    but seriously, me talking about it won't do a thing to convince you, you've gotta try it to know.
  18. #10
  19. Only the strong survives!!.
    Devshed God 1st Plane (5500 - 5999 posts)

    Join Date
    Feb 2003
    Location
    A World of wonders.
    Posts
    5,583
    Rep Power
    407
    Originally Posted by LinuxPenguin

    File("/path/to/file") {|x| puts x}

    now understand that's a grossly simplified example.
    Yes it is lol
  20. #11
  21. No Profile Picture
    Contributing User
    Devshed Novice (500 - 999 posts)

    Join Date
    Jan 2004
    Location
    Constant Limbo
    Posts
    989
    Rep Power
    363
    You may want to consider that python (by design) does not provide protected/private data members - ruby does.
    And since it has been mentioned, if you are familiar at all with perl, the transition to ruby may be easier on you: Ruby supports the $_ and such global variables used in mostly the same way (although it is depreciated).

    Both ruby and python are capable of / do mostly the same things and have similar (not very similar) ideas. They are both fully object oriented. They both provide internal unit testing. They both present a much cleaner approach to learing a programming language (as compared to something like C).

    Ruby has a more flexible syntax. Python has a larger user/support base, but ruby is growing steadily. For current web development, ruby might do you better.

    As far as performance, they are about equal and each have internal packages/libraries for testing and monitoring this performance.

    Learning each will not make you more qualified at anything per se, as you will still need to use your brain to figure out the problems before implementing the solution.

    My suggestion is to try both, see what fits you best and learn that fully. Do not, however, disregard the other as it is always helpful to have another card up your sleave.
    True happiness is not getting what you want, it's wanting what you've already got.

    My Blog
  22. #12
  23. No Profile Picture
    Contributing User
    Devshed Intermediate (1500 - 1999 posts)

    Join Date
    Feb 2004
    Location
    London, England
    Posts
    1,585
    Rep Power
    1373
    Here is a comparison of LinuxPenguins examples and the Python equivalent.

    Originally Posted by LinuxPenguin
    File("/path/to/file") {|x| puts x}
    python Code:
    for x in open("/path/to/file"): print x


    Originally Posted by LinuxPenguin
    x =~ /([a-z]+)/
    print $1;
    python Code:
    import re
    match = re.search("([a-z]+)")
    print match.group(1)


    This is a little more verbose since Python does not have the perl-style $ variables that are set as a side effect of certain operations. However I have read that these are now regarded as bad style in the Ruby community and may be removed in Ruby 2.0.

    Originally Posted by LinuxPenguin
    puts "blah".reverse
    print ("2122".reverse.to_i - 100)
    python Code:
    print int("2122".reverse())


    Originally Posted by LinuxPenguin
    require 'Marshal'
    marshalledhash = Marshal(myhash)
    The pickle module does the same thing:

    python Code:
    import pickle
    # save object to a file
    pickle.dump(object, filename)
    # create a pickled object in a string
    pickledObj = pickle.dumps(object)


    Pickle will work with pretty much any type of Python object, just like Marshal.

    Originally Posted by LinuxPenguin
    {x=>5,y=>8,z=>9}.each {|x,y| print "#{x} = #{y}"}
    python Code:
    for (x,y) in {'x':5, 'y':8, 'z':9}.items(): print '%s = %s' % (x, y)


    Originally Posted by LinuxPenguin
    myarray.each do |x|
    x.chop!
    print x[4]
    end
    python Code:
    for x in myarray:
       x = x.rstrip()
       print x[4]

    [/QUOTE]


    Originally Posted by LinuxPenguin

    def myfunc (x,y)
    yield #This is what calls the optional lambda block there.
    end
    Python generators provide roughly similar functionality, but in a different way. Generators yield a sequence of values that can be passed to a block of code in a for loop. Generators are currently less powerful that ruby blocks since the information can only go from the generator to the block, and not back the other way. This will be fixed in the next version of Python.


    Dave

    Comments on this post

    • Yawmark agrees : Nice examples.
    • xlordt agrees : I guess your back from the dead heh :)
    • Dietrich agrees : Python is right up there, and easier to read than Ruby!
    • LinuxPenguin agrees : Not bad at all, although you're still missing some bits ;)
    • netytan agrees : It's a personal choice ;).
    Last edited by DevCoach; March 14th, 2006 at 05:01 AM. Reason: added code highlight tags
  24. #13
  25. fork while true;
    Devshed God 1st Plane (5500 - 5999 posts)

    Join Date
    May 2005
    Location
    England, UK
    Posts
    5,538
    Rep Power
    1050
    ruby beats python on iterating though each character in a string, i don't think python has a really simple way of doing that.

    ruby: "blah".each_char {|ch| puts ch.ljust(500)}

    The classes in python don't have protected and private members in python either, which is a pain, and your use of the pickle class shows that it isn't quite as simple as the ruby one, where you get an optional parameter for filename. If it's provided, it writes to file, if not it returns a string, but in yours, you have to use another function.

    Don't get me wrong, python's an alright language, and the if-name-main trick looks like crap in ruby, but i prefer ruby overall
  26. #14
  27. Contributing User
    Devshed Novice (500 - 999 posts)

    Join Date
    Feb 2005
    Posts
    588
    Rep Power
    64
    Ruby has a few nice Perl-like tricks! On the other hand, Python was written to get away from the complexity of Perl.
    Real Programmers always confuse Christmas and Halloween because Oct31 == Dec25
  28. #15
  29. fork while true;
    Devshed God 1st Plane (5500 - 5999 posts)

    Join Date
    May 2005
    Location
    England, UK
    Posts
    5,538
    Rep Power
    1050
    Well I'm a perl lover, so that might be why i like ruby some

    i think a hybrid of the two languages is called for. overall i prefer ruby, but there are some things that just look nicer in python
Page 1 of 4 123 ... Last
  • Jump to page:

IMN logo majestic logo threadwatch logo seochat tools logo