title: When talking about programming languages, what is the definition of Magic?
body: <p>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?</p>