I have just recently read an old paper by Wirth "On the Design of
Programming Languages", which started me thinking about dynamic typing.

One of the lessons he enumerated:

"Design languages such that most checking operations can be performed at
compile time, and need not be deferred until execution. The concept of
static data types of variables is essential in this respect, and enhance
both programming security and system efficiency."

Hoare also has similar comments about static typing.

Now, given that ruby is interpreted, much of the efficiency and type 
safety aspect might not matter (though, if/when it gets bytecode 
compiled, I can see that static typing can improve both).

However, it seems that dynamic types can be more error prone and harder
to read, since we can't be sure what type of object a variable holds. I
guess what I'm asking is: given the advantages of a statically typed
language, does dynamic typing offer any benefits? What is the reason
behind ruby's dynamically typed variables?