Image

Imagerecoder 😡frustrated

Listens: Радио-Т #529

Category:

Magic


Image




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" в цифровой мир!



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



promo Imagerecoder august 1, 2018 12:09 36
Buy for 100 tokens
Не так давно Фейсбук научил меня ещё одной классификации людей, в дополнение к стратегам и тактикам, интерналистам и экстерналистам, и разным морально-политическим приверженцам. Впервые эта классификация описана ещё двадцать лет назад Картером и Сэнджером в книге The Programmer's Stone…