Magic
© Arthur C. Clarke
Программирование собственно и прекрасно своим 100% детерминизмом. Случайности же проявляются только тогда когда их привносишь в систему (явно ли через rand() или неявно через неинициализированные переменные). Всегда можно спуститься вниз по лестнице абстракций и в конечном счёте добраться до сурового метала, где тоже всё детерминировано. Почти математическая красота!
Обвинения в "магии" же возникают там, где программист встречает что-то непонятное. Причём не просто встречает что-то непонятное - learning curve на то и кривая, потому что всегда и везде в чём-то надо разбираться - а видит что-то непонятное и опускает руки. Единственно верная реакция на непонятное - это сесть и разобраться. Так что IMO любое обвинение в "магии" - это банальное нежелание шевелить мозгами. Магглам такое нежелание простительно, а программистам - нет.
Есть конечно аспект сложности (complexity) систем. Сложные задачи могут решаться сложными способами (энтропия, бессердечная ты сука!), но не всякая сложная задача решается сложно. Хорошими абстракциями сложность можно свести к минимуму. А плохими абстракциями сложность системы можно довести до совершенно неоправданного уровня.
Абстракции традиционно ведут к конвенциям (conventions), а конвенции - это как один из ингредиентов "магии". Хорошие конвенции (как и прочие мета-конструкции вроде const) закладывают в коде эдакий фарватер, в котором двигаться легко и удобно, а попытки выбраться из него сложны и болезненны. Отсутствие же фарватера в совокупности с низким порогом вхождения неизбежно приводит к набегу пионеров и постоянно незрелому софтверному зоопарку (см. PHP или JS экосистемы).
Вот поэтому я всегда косо смотрю на ругающих "магию" и на окружения проклинающие "магию". Да-да, я косо смотрю на тебя, Python. Да-да, я с ненавистью уставился на тебя, Go! Нельзя же тащить ядовитое "ignorance is strength" в цифровой мир!
Справедливости ради, надо конечно заметить что настоящая магия всё-таки существует и существовала с незапамятных программистских времён. Но эту магию обычно никто и не имеет в виду.

no subject
Или вот в системный вызов reboot нужно передать целых два магических числа, первое 0xfee1dead, а за вторым нужно лезть в ман к конкретной версии ядра. Защита от случайного вызова.
no subject
no subject
Также как и магия по вашей ссылке в последнем абзаце - несколько тактов оно когда-то экономило, но с переносимостью там беда в большинстве случаев.
no subject
no subject
no subject
Ну так и в магии случайности только привнесённые. Разница не в детерминизме, а в наличии/отсутствии достаточно полной модели в голове практикующего. Об чём и закон Кларка намекает.
no subject
no subject
no subject
no subject
Explicit is better than implicit." из PEP20. Остальной PEP весьма неплох.no subject
А во-вторых: ты что, не согласен?
no subject
no subject
Вот, скажем, temporary copies в С++ имплицитны, и постоянный источник проблем. Или финализаторы в джаве, которые оттуда де-факто были с позором изгнаны.
А насчёт "много понаписано" — я лично считаю, что идиоматический код на питоне весьма компактен.