The important thing to remember about Ruby is that there isn't a big
difference between ``compile time'' and ``runtime.'' It's all the
same. You can add code to a running process. You
can redefine methods on the fly, change their scope from public
to private, and so on. You can even alter basic types, such
as Class and Object.

Once you get used to this flexibility, it is hard to go back to a
static language such as C++, or even to a half-static language such as
Java.