I see this as both a step forward and a step back. On one hand
you have one of the first large collections of reusable aspects to choose
from, but on the other hand the message is that aspects are probably beyond
the average developer. This issue of complexity just keeps coming back again
and again whenever AOP gets mentioned.
I feel
the above point is quite crucial. Indeed, there is often a general feeling
that aspects are beyond the average developers just like reflection became
(and largely remains) the tool of advanced developers. I feel that this
"myth", that surrounds all new software development techniques, is a
critical bottleneck in the adoption of AOP (and AspectJ) too. I fully agree
with Ron that developing reusable libraries of aspects is critical (we
should maintain an up to date repository as Merrick suggested).
However, at the same time, it is important to help the developers think in
an aspect-oriented fashion. Before the days of OO, developers mainly used
to think one-dimensional i.e. procedural. OO introduced more of a
two-dimensional thinking. Aspects introduce a third dimension to this
thinking. Those who went from doing procedural programming to OOP
have some experience of such a transition. But the significant
body of first generation OO programmers do not. I am not suggesting that
everyone finds it hard to transition to a different, improved way of
looking at the concerns in a system. However, most people are likely to find
it difficult to alter a mindset they have used for several years. Does this
mean AOP is not for the average developer? Certainly not. AOP, especially
AspectJ, is very intuitive once you are willing to think out of the
conventional OO decomposition. At Lancaster, our undergraduate students (with
moderate Java programming skills) get up to speed with AspectJ in about
two weeks. However, it takes a while before they fully start
to consider the decomposition in their systems in
an aspect-oriented way.
Awais.