Discuss Ruby Or Python in the Ruby Programming forum on Dev Shed. Ruby Or Python Ruby and Ruby on Rails programming forum covering Ruby Tips and Tricks, Best Practices, and agile development with Ruby on Rails.
Posts: 5,573
Time spent in forums: 1 Month 11 h 9 m 33 sec
Reputation Power: 406
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?
Posts: 10,101
Time spent in forums: 3 Months 3 Weeks 6 h 8 m 34 sec
Reputation 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.
Posts: 5,573
Time spent in forums: 1 Month 11 h 9 m 33 sec
Reputation Power: 406
Quote:
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
Posts: 10,101
Time spent in forums: 3 Months 3 Weeks 6 h 8 m 34 sec
Reputation 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 ; .
Posts: 149
Time spent in forums: 1 Day 19 h 59 m 13 sec
Reputation Power: 20
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
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
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.
Posts: 989
Time spent in forums: 2 Weeks 2 Days 22 h 45 m 6 sec
Reputation Power: 362
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.
Posts: 1,585
Time spent in forums: 2 Weeks 4 Days 2 h 58 m 23 sec
Reputation Power: 1372
Here is a comparison of LinuxPenguins examples and the Python equivalent.
Quote:
Originally Posted by LinuxPenguin
File("/path/to/file") {|x| puts x}
python Code:
Original
- python Code
for x inopen("/path/to/file"): print x
Quote:
Originally Posted by LinuxPenguin
x =~ /([a-z]+)/
print $1;
python Code:
Original
- python Code
importre
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.
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
Last edited by DevCoach : March 14th, 2006 at 05:01 AM.
Reason: added code highlight tags
Posts: 5,538
Time spent in forums: 1 Month 3 Weeks 1 Day 19 h 30 m 28 sec
Reputation 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