Одним из контекстов, где я использую термин «черная магия», является манипулирование байт-кодом (в Java) - преобразование программного кода во время выполнения так, чтобы он делал что-то отличное от того, что делал бы простой код. Часто манипуляция с байт-кодом очень полезна, но с ней очень легко выстрелить себе в ногу.
Многие фреймворки и промежуточное ПО используют AOP и манипулирование байт-кодом для реализации сквозных задач. Это уменьшает работу программистов, но в некоторых ситуациях это может затруднить отладку поведения системы. И легко иметь некоторые тонкие ошибки в преобразованиях байт-кода.
Я сам провел некоторые манипуляции с байт-кодом, так что в основном я знаю, как можно изменить инструкции для байт-кода, и для меня это не «волшебство» в том смысле, что я не понимаю, как это работает. Но все же я называю это «магией», потому что она меняет способ, которым код обычно работает, и не видна в исходном коде изменяемых классов.