But when you have 5 functions, all with the same name and there is a bug (it doesn't throw an error, but does something different than you want), how do you go about debugging that?
Generally speaking there is one "master" function, which actually does the work, and has many parameters. The other functions convert data from one format into the form required by the "master" function, and then call it.
The trouble with OpenGL's approach is that it becomes very irritating when there are many variations of the same function, since you have to remember both the function name and the parameters accepted.
With the aforementioned OpenGL functions it is usually quite easy to come up with an intuitive name for the different functions (glVertex2i vs. glVertex2f). But what about more complex differences?
Rect newRect=Rect.createFromCoordinates(x,y,x2,y2)
Rect newRect=Rect.createFromCoordinateAndSize(x,y,size)
Rect newRect=Rect.createFromPoints(pointA,pointB)
Rect newRect=Rect.createFromPointAndSize(pointA,size)
vs:
Rect newRect=Rect.create(x,y,x2,y2)
Rect newRect=Rect.create(x,y,sizeA)
Rect newRect=Rect.create(pointA,pointB)
Rect newRect=Rect.create(pointA,sizeA)
In the end, it does boil down to a convenience issue, but I think it would make a lot of sense in 'Max.