Magic, in the context of software development frameworks, is behind-the-scenes logic that looks after low-level details for you.
I have a love/hate relationship with magic. When it works for you, it's beautiful, but when it doesn't it's intensely frustrating.
Drupal and Rails are magic-driven development frameworks. Django, on the other hand, takes a minimalist approach largely free of magic.
One of the reasons Drupal has been widely adopted is that it makes it easy to create database-driven websites. CCK and Views in Drupal enable savvy end users to create simple web applications without programming. Conversely, Django has seen favour in the web standards community because it forces you to be explicit about what you want to do. Drupal is analogous to Microsoft Word while Django is analogous to Adobe Illustrator.
In general, these are what I see to be the pros and cons of magic.
- rapid prototyping
- forces communities to work together to find universal solutions
- lowers barrier to entry, enriching development culture (this is seen as a con to some people)
- complexity: subtle changes in underlying magic can have unpredictable consequences
- opinionated: instead of explicitly telling software what to do, often have to tell it what not to do
- dependency: users are consumers of end result of magic, don't understand underlying system and thereform can't fix own problems
What do you think?