Let’s look at the Array class and start with method aliases.
There are two aliases : .to_s <=> inspect , .size <=> .length , index
<=> find_index. I understand the need for the first one, since sometimes
the two don’t return the same thing depending on the class. But why have
size/length do the exact same thing…? This is one pretty intuitive so
it’s not that bad.h
Then we have methods that are defined together, but with different names
: collect <=> map ,  <=> slice <=> at.
Next we have methods that seem to be doing the same thing, but are
implemented differently : keep_if <=> select! , reject! <=> delete_if ,
delete_at <=> slice! <=> shift
Next are the nearly identical methods. They are the same except one does
a little : count <=> length/size
Useless methods? : replace. Why do you need an explicit method for this.
Can’t you just use the assignment operator ?
These are just the ones I remember/found. I’m sure there are many more
examples in this class and others. Doesn’t having multiple names for the
same thing make it confusing when collaborating ? Is there any reason
for this ? What is your take on the matter ?