I'm going through these weblogs. Sorry for bringing up an old one, especially years after.
I think the way programming languages are thought of today is incorrect. People are stuck in this OO vs. functional vs. aspect vs. contract methodology. That's not what programming is about. Programming is about getting things done.
Assembler gave us the spokes of the wheel. It was hard to make a wheel, but you could do it. Your wheel ended up being very unique most of the time though.
C gave you tons of wheels, but it left you the ability to make new wheels with the spokes. You lost SOME spokes, but most of them were still available.
C++ gave you a carriage, but oftentimes you never knew what was pulling it.
Java took away the spokes, so this more than anything will spell its doom. I predicted this in 1994 when I first heard of Java. Any language where you can't change something if it doesn't work is bound for failure (as a general purpose language).
The next language will be one that lets you use new spokes while letting you build a mass super-transit system.
The problem with new languages is that they block you from the low level stuff (spokes). People think that forcing you to use something or blocking you from this is the right way. Not so. If you do this, your language will fail unless it's for a specific niche. The next language will be one where you can program at any level of abstraction. People who make lots of mistakes with types and whatnot, you people stay on the high-level. But people who know what they are doing should be able to code at a lower level to implement things like video codecs and drivers for example. All the way down to assembler if necessary.
It's like I always say (and apologies for quoting myself): "Technology always comes in the form of hardware. How are we to become more technologically advanced if we are blocked from it?"