Jason Kester has a very insightful post up on his blog this weekend about the use of the terms “magic” and “smart” to describe software tools & frameworks. And more importantly perhaps, about the features themselves, which are often anything but “magic” or “smart.”
The problem is that these features hide the real operations that are going on under the hood. It makes what are potentially complex, time-consuming and performance killing operations seem like a simple thing. They also make it next to impossible to work out when that is the case and when it isn’t. Since I’ve been looking at Ruby on Rails a little at the moment (it seems to be the most popular choice of web development language at the moment), I was interested to see Rails being listed there as well.
In my past I have seen similar problems with C++ (unexpected calls to copy constructors and conversion operators) and had to create coding standards that helped to catch these sorts of problems at compilation time rather than letting them get into executing code where it becomes next to impossible to track them down. That’s harder to do with things like Hibernate where the problem is caused by the abstraction itself, and it not just a symptom of powerful language features.