Earlier quoted context omitted.
It takes a while to get used to the idiomatic constructs of a language. Luckily it's much easier than with natural languages. My first Ruby programs were very Java like. I doubt that my first Java programs were C like, if you use classes and methods it just can't be. No problem with using Python and Ruby together. They are maybe like German and English, close but clearly distinguishable. And Javascript, Perl, PHP, El…
The first one is neither - it's string.join(iterable). If you keep that in mind then the design becomes clear - it would have been weirder to force every iterable to have some string-related method. Better to put it on string, where it more reasonably belongs. The second one is the typical OO pattern where you ask an object to perform some operation on itself. This is how split works in just about every OO language -…
Ruby's range must be converted to Array.
> (1..20).to_a.join(",")
"1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20"
Python's range must be converted to a list of strings. > ",".join([str(i) for i in range(1,21)])
'1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20'