Magic

Jan 19, 2017 11:24





Any sufficiently advanced technology is indistinguishable from magic.
© Arthur C. Clarke Не в первый раз слышу в программерских кругах обсуждения "магии" в разных местах: в языках, во фреймворках и библиотеках, и т.д. И каждый раз мне хочется встрять в это обсуждение и рявкнуть: в программировании магии нет!

Программирование собственно и прекрасно своим 100% детерминизмом. Случайности же проявляются только тогда когда их привносишь в систему (явно ли через rand() или неявно через неинициализированные переменные). Всегда можно спуститься вниз по лестнице абстракций и в конечном счёте добраться до сурового метала, где тоже всё детерминировано. Почти математическая красота!

Обвинения в "магии" же возникают там, где программист встречает что-то непонятное. Причём не просто встречает что-то непонятное - learning curve на то и кривая, потому что всегда и везде в чём-то надо разбираться - а видит что-то непонятное и опускает руки. Единственно верная реакция на непонятное - это сесть и разобраться. Так что IMO любое обвинение в "магии" - это банальное нежелание шевелить мозгами. Магглам такое нежелание простительно, а программистам - нет.

Есть конечно аспект сложности (complexity) систем. Сложные задачи могут решаться сложными способами (энтропия, бессердечная ты сука!), но не всякая сложная задача решается сложно. Хорошими абстракциями сложность можно свести к минимуму. А плохими абстракциями сложность системы можно довести до совершенно неоправданного уровня.

Абстракции традиционно ведут к конвенциям (conventions), а конвенции - это как один из ингредиентов "магии". Хорошие конвенции (как и прочие мета-конструкции вроде const) закладывают в коде эдакий фарватер, в котором двигаться легко и удобно, а попытки выбраться из него сложны и болезненны. Отсутствие же фарватера в совокупности с низким порогом вхождения неизбежно приводит к набегу пионеров и постоянно незрелому софтверному зоопарку (см. PHP или JS экосистемы).

Вот поэтому я всегда косо смотрю на ругающих "магию" и на окружения проклинающие "магию". Да-да, я косо смотрю на тебя, Python. Да-да, я с ненавистью уставился на тебя, Go! Нельзя же тащить ядовитое " ignorance is strength" в цифровой мир!

Справедливости ради, надо конечно заметить что настоящая магия всё-таки существует и существовала с незапамятных программистских времён. Но эту магию обычно никто и не имеет в виду.

coding

Previous post Next post
Up