Магия очень зависит от вашего понимания.
Я написал довольно много Си и Си ++, прежде чем начал писать на Java. Я должен был распределить и освободить всю мою память. Это было не очень весело, когда у меня начались утечки памяти. Как только я начал писать на Java, я знал (в основном), что происходит за кулисами, чтобы создать все мои экземпляры объектов. Таким образом, для меня это не так много волшебства (я сделал распределение, но как он на самом деле хранит объекты и знает, когда освобождать их, немного более "волшебно" для меня), чем для кого-то, кто начал на Java (которому никогда не приходилось обращаться с памятью вручную.)
Другой пример - ORM. Я развернул свою временную структуру Object Relational Mapping в начале проекта, пока у меня не было времени, чтобы по-настоящему разобраться и изучить Hibernate или что-то подобное. Мне приходилось писать в таких вещах, как картографы ResultSet, Lazy Loading и базовое кэширование Теперь, когда я вернусь и заменю этот материал более зрелыми объектами, отображаемыми в Hibernate или JPA, у меня все еще будет базовое понимание того, что происходит. Если вы никогда не использовали JBDC или что-то подобное, все, что вам нужно знать, это то, что данные передаются из базы данных в объект и обратно.
Каждый имеет дело с определенным уровнем магии в своей карьере. Мы не можем знать все. Магия действительно может быть синонимом абстракции. Когда это становится «слишком волшебным» - это когда Абстракция начинает скрывать вещи, которые вы должны уметь контролировать. Примером на днях было то, что в программе JSF я не знал, как запустить контекст JSF. JSF просто делает это, когда вы впервые переходите на страницу JSF. Мне нужно было начать контекст с обычного сервлета. В итоге мне пришлось создать фиктивную JSF-страницу, чтобы справиться с ней. У меня просто не было времени в этом проекте, чтобы изучить «магию» JSF-управления контекстом.