The word ‘magic’ gets thrown around a lot here in contexts like ‘language X just has too much magic’, or ‘platform Y generally avoids magic’. However, it seems the term is pretty poorly defined, something people know when they see it. For example, Java is reputed to contain very little magic, but its garbage collector hides a lot from the programmer. If magic simply means abstraction that hides details, then why is it considered a bad thing, given that nobody writes large programs in assembly language anymore? If magic means something more, then what does it mean?
Share
‘Any technology sufficiently advanced is indistinguishable from magic’ — Arthur C. Clarke.
Actually not quite that — magic is used for complicated and hidden rather than advanced (though presumably the designers thought they were being advanced), such as systems which require specific states before procedure calls (COM threading models) as well as ‘automagic’ type conversions (VB variants, Javascript ==, Java autoboxing).
Once systems hide details from the programmer that they are no longer predictable, they become magic. You’re stuck with repeating an invocation in a language you don’t understand because it’s had the right effect in the past. That’s bad magic, or voodoo.
There’s also good magic — http://aggregate.org/MAGIC/