The goal of separation of concerns surely lead to higher abstraction levels in programming languages. These more abstract languages are in some way difficult to maintain.
Examples are the inheritance concept in the OO world and the logical programming languages like Prolog. There only little academic tasks may be solved easily - in general the higher abstraction levels lead to higher maintenance problems.
On my opinion there is a need to provide abstract but task oriented programming environments. From this point of view, AOP is only a base technique for GP (Generative Programming), which I would suppose to be the right direction. The abstraction gap between the programmer's view of the things and the programming language techniques can only be closed by generators. So, AOP is a first step towards GP.
The goal of separation of concerns surely lead to higher abstraction levels in programming languages. These more abstract languages are in some way difficult to maintain. Examples are the inheritance concept in the OO world and the logical programming languages like Prolog. There only little academic tasks may be solved easily - in general the higher abstraction levels lead to higher maintenance problems. On my opinion there is a need to provide abstract but task oriented programming environments. From this point of view, AOP is only a base technique for GP (Generative Programming), which I would suppose to be the right direction. The abstraction gap between the programmer's view of the things and the programming language techniques can only be closed by generators. So, AOP is a first step towards GP.