I think the problem is not one of new screwdrivers, but of interdependent screwdrivers.
If you look at C# and compare it to how I learned to program (Fortran 77, 6502 assembly and Basic), there are more differences than just syntax and memory protection. Even moving to my first professional programs, at a very fundamental level, the way I approached programming in DOS on a 386 CPU using C and assembly differs radically from how I program today.
a) I have a relational database that runs independent of my code.
b) I have an operating system that handles half of the infrastructure I used to code by hand.
c) I have libraries that cover the other half of the infrastructure I used to code by hand.
d) I have a GUI builder that makes light work of user interface layout.
e) I have different paradigms (objects, distributed computing, recoverable transactions, etc.) that underly the work itself.
The interesting thing isn’t the toys that allow my focus be laser like on business logic, but the fact that trying revert to “the old ways” the house of cards collapses. The GUI builder relies on partial classes, inheritance and a huge library to make it work. The libraries are possible because objects made organization of complex reusable code blocks easier. The relational database exists because I can afford to burn CPU freely and it in turn relies on the operating system to provide a stable platform to ignore many issues that are abstracted away.
What we have today is built atop the structure that each prior platform gave us. In most cases, the old platforms don’t entirely vanish, but instead act as supports for the new platform until the new platform stable enough to succeed. NTKERNEL still has assembly at the core, and C code around it. Windows is still C with C++. Many applications today are written in higher level languages, but they still require that C/C++ underpinning.
Back on topic, the point is not only we need to acquire and learn new screwdrivers, but those screwdrivers are interdependent in ways that mean you are going to eventually drag the entire infrastructure in a given direction. By using .NET 2.0, I found myself upgrading to the new application blocks, a new version of my object relational mapping tool and SQL 2005 to get the full benefits of the new platform. I didn’t upgrade my screwdriver, I upgraded my toolbox.
As for Ruby, it is an interesting language which has much to commend itself. Likewisem, Rails does much to place the programmer at a higher level of abstraction when dealing with a specific application type (the data driven web app). However, because it is being built “alongside” the powerhouse application stacks I have to wonder about its long term success. Ruby on Rails has to maintain the entire stack above the OS/Web Server level as well as providing a library, which as it grows may be the undoing simply because of the overhead.