Q:

Are today's general purpose languages at the right level of abstraction?

Today Uncle Bob Martin, a genuine hero, showed this video
In this video Bob Martin claims that our programming languages are at the right level for our problems at this time. One of the reasons I get from this video as that Bob Martin sees us as detail managers and our problems are at the detail level.
This is the first time I have to disagree with Bob Martin and was wondering what the people at programmers think about this.
First there is a difference between MDA and MDE MDA in itself hasn't worked and I blame way to much formalisation at a level you can't formalize these kind of problems. MDE and MDD are still trying to prove themselves and in my mind show great promise. e.g. look at MetaEdit
The detail still needs to be management in my mind, but you do so in one place (framework or generators) instead of at multiple places.
Right for our kind of problems ? I think depends on what problems you look at.  Do the current programming languages keep up with the current demands on time to market ? Are they good at bridging the business IT communication gap ?
So what do you think ?

A:

As a researcher and a scientist, I've learned some simple rules, and the most important one is not to let my imagination set boundaries. What I mean is, the fact that I can't imagine a better way to abstract todays problems doesn't mean that one doesn't exist. It doesn't mean that another approach wouldn't completely alter the way we think about programming and consequently my understanding of abstraction.
In the market sense, it's really about competition. If no one else has the überlang, then of course current languages seem to solve the problems at a market appropriate level. Expectations of reasonable evolve with technology.
If you read some of Paul Graham's essays about Lisp, though, you'll see that he believed that his competitive edge was an überlang, Lisp. You'll also see some pretty strong claims about the level of abstraction provided by Lisp and how it differs from, say, Python. I hesitate to give such claims credence... but he made 48 million dollars writing Lisp code, and I didn't. That adds to his street cred, in my mind.
If we assume that Graham is correct, then we can only conclude that the Fortran family tree of languages is slowly catching up to the level of abstraction available in 1957 to the users of Lisp family languages. That's a bold claim, but if it's true than today's languages (the descendants of Fortran, I mean) aren't quite adequate for today's challenges.
But Graham doesn't have to be right in order for Uncle Bob to be wrong. Uncle Bob is wrong if Uncle Bob lacks perfect knowledge of what is possible. What we need to do is largely a function of the languages that we are using and the paradigm we work in, not the other way around.

A:

I have no problem with the "level" of current languages, and I was a thorough disciple of Lisp-ism, but this whole conversation really bothers me.
It bothers me because the language we're really using is the one that we and others have built on top of whatever the compiler or interpreter provides.
The nouns, verbs, syntax, and semantics consist not only of what came "out of the box" but what libraries we've included, what classes and methods we've defined, what macros we've written, what interpreters we've coded, what parsers and code generators we've written.
There is not a firm dividing line between using a language, and creating a language. It's more like a rocket taking off into outer space. At each point, it is making use of what it built up previously. Just as the rocket accelerates in a specific direction to the exclusion of others, our program/language builds more and more to the specific problem we are solving. It becomes more and more a domain-specific-language (DSL).
So the whole question "are our languages at the right level" misses the point. The point is that whenever we program, we are building a new language, and we should all know good ways to do that, and the base languages should help us.
We should understand that the purpose of a language is not to "do things", "manipulate objects", "control the computer", etc. The purpose of a language is to express our mental models in an effectively computable way.
I know people are going to say "Well, wasn't that what UML was supposed to do?" The answer is it couldn't, precisely because it was pre-ordained. A domain-specific-language is just that - specific. A domain-general-language is only useful if it can be effectively transformed into a domain-specific-language.

A:

I think one of the things that his says is right.

Programming languages today are at the right level of abstraction.

But, I think that although, in the future, we may use the same languages as today, because compilers are getting better and processors are getter faster (as in they can do more computations per second), we may be able to operate a higher-level, where we don't need to worry about performance details.
This has already happened with most tasks and the rise and rise of dynamic languages like python and ruby, but as compilers get better we may be able to start writing things like databases and maybe eventually kernel modules and operating systems in this style.

