Ruby is, on the surface, not very different from Python. But in terms of philosophy, coding style, and community it is like night and day. There is more to a language than syntax and core libraries. Every language uniquely expresses its communities particular bias on How To Solve That Hard Problem.
In this regard, Python and Ruby could not be more diametrically opposed. Ruby values elegance and terseness, sometimes to the detriment of readability. Python actively eschews some elegant features to ensure readability. They feel very different.
If you want something more esoteric to teach you more purist OO (of which Python is definitely not), then Smalltalk would be the next step forward after Ruby.
I don't mean to diss Ruby too hard, but I don't see the points here as strong enough to detract from an argument for learning C.
And that isn't an argument _against_ C. Everyone needs to learn C. Go for it. But I think that Python and Ruby programmers stand at a distance and both look down on each other, and most of that is because of social and not technical reasons. Pythonistas spout crap about readability and Rubyists spout crap about OO-ness. Both have something to teach.
You might get angry reading this comment and say, "That KirinDave is so arrogant! He's implying I'm _not_ a good programmer and that by learning Ruby I will be a better one." But really you're the one who opened that can of worms by saying "a step backwards for someone who knows Python", and talking about "awkwardness." By saying that, you've basically said that thousands and thousands of smart programmers are totally wrong and wasting their time.
And it's not true. The programming language that's so bad it has nothing to teach is a rare bird indeed. Ruby and Python are so instructive because of how similar-yet-different they are.
eg Ruby has no named params, no biggie, just use the convention that you pass around hashmaps, something like
foo :bar => 42 etc etc....
close enough for rocknroll. In python they wouldn't necessarily like that, and named params are available (I am just making this up, they could have been in there for the start, but my point remains...)
Which part in particular would you like me to reformulate?
I'm down to have the debate in another forum if you'd like. It's a good chance to learn some more about Ruby.
jdennis@gmail
You can even use more than one pair of parens sometimes:
fun()()
(If fun returns a function.)
This is why I reckon it's better to learn C before you learn any of the higher-level scripting-type languages. Same reason you should learn to drive a manual before you learn to drive an automatic.
(Of course in both cases I'm just advising people to do the same thing that I did, which is always the weakest form of advice.)
"Core War (or Core Wars) is a programming game in which two or more battle programs (called warriors) compete for the control of the MARS virtual computer (Memory Array Redcode Simulator). These battle programs are written in an abstract assembly language called Redcode. The object of the game is to cause all processes of the opposing program(s) to terminate, leaving your program in sole possession of the machine."