As it stands, I still place Erlang as next best hope for making development teams more effective at delivering solid products.
I have had doubts now and then about this conclusion, but ultimately it comes down to experience. With an incredibly limited amount of experience I was able to write effective and useful systems with Erlang. No language other than C has ever made that possible for me.
It may be simply that abstractions act more as distractions for me. Their presence calls out to me to incorporate them in my designs and this siren's call drags me aground over and over again when I write Java applications. Given my extensive professional and personal experience with Java I am adept at overcoming this simply by brute force. However, I have found that languages offering more abstractions than Java make this problem far worse for me.
Another big worry I have about highly abstraction-oriented programming languages is the flexibility of expression. This flexibility beckons each developer on a team to choose wildly different ways of expressing the same intent. Certainly, this problem exists in all languages, but room for unusual diversions is narrow in Erlang and the benefits meagre.
Diversity of expression is generally desirable in an artistic medium, but it can also confuse and be misinterpreted by other members of your team. Shouldn't coding conventions cover this? Definitely, they should, but coding conventions are like a small footwall compared to the mountain of abstractions at hand in language like Java. And Java is a lightweight in this arena. The trend is towards even more abstract programming with languages like Scala and Ruby at the vanguard.
However, I believe that discouraging the use of abstractions in a language like Java, Ruby or Scala cripples the developer and defeats the purpose of those languages. However, I also believe that such abstractions are not only inherently unnecessary for building applications, they are actually detrimental to timely delivery. Abstractions encourage upfront design, upfront design encourages future creep, future creep enourages scope creep and scope creep delays delivery. Not exactly scientific, but it's what I feel is going on... at least for me.
Many people burst onto the Erlang scene quickly with compelling open source and commercial products shortly after having just learned the language. Surely this speaks volumes for considering its more direct and concise approach to programming?
I like Erlang... it speaks to me. When it does, it says:
"Stop designing your programs and start freaking writing them!!!"