Second, I have read a lot of good C++ books and I'll even admit that I take some perverse kind of pleasure from template acrobatics as presented in Alexandrescu's Modern C++ Design for instance. But in 1995 - 1997 I was overwhelmed by the complexity of C++ and Java was a relief for me and many others. Yes it was naive, and yes every ex C++ programmer started to miss things very soon. But even after learning so much more about C++, I still feel the complexity/power ratio of C++ is awful.
In 1995, when Java came along, C++ was less powerful. There was no proper template support, no standard library, not even a string class. You had to use evil stuff like MFC to get anything done at all. And it took until the early 21st century for anyone to really grasp templates and write good books about how to use them. So, that's why I still understand the gut reaction of relief when Java emerged. But, as I said, I regret to have reacted in a such a purely emotional way without checking out other options. You apparently did, and you have my respect for that.
No statically typed language without powerful template system nor multiple inheritance of some sort should be considered usable in this age and time. Java/C# (same shit) was designed for "enterprise software" development, something a CS grad should never, never, never consider doing.
Ruby is the opposite of all that - Ruby represents ultimate freedom of expression. C++ runs circles around Java in that regard. Ruby only takes it several levels higher. In Ruby you really do feel like changing the world, as long as your world is written in Ruby as well. It's sad you missed it as the main point of the great post.
P.S. Go get yourself some decent C++ book.