Magic

Jan. 19th, 2017 11:24 am
recoder: (masked)
[personal profile] recoder

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

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

Date: 2017-01-19 05:29 pm (UTC)
From: [identity profile] vanxant.livejournal.com
К последнему абзацу стоит добавить магические числа, широко распространенные, например, в ядре линукса. Так, например, модули ядра (т.е. драйверы) огорожены от неправильной загрузки не только номером версии, но и магическим числом, генерируемом при каждом билде. Соответственно, modprobe не даст загрузить модуль от другого ядра (другой сборки), даже если он имеет тот же номер версии - на случай разницы в конфиге. (Впрочем, если совсем приперло, insmod воткнуть такой модуль позволит).
Или вот в системный вызов reboot нужно передать целых два магических числа, первое 0xfee1dead, а за вторым нужно лезть в ман к конкретной версии ядра. Защита от случайного вызова.

Date: 2017-01-19 05:47 pm (UTC)
From: [identity profile] vanxant.livejournal.com
Ну с этой точки зрения "магические методы" в каком-нибудь пыхе тоже никакой магии не содержат. Так, синтаксический сахар... Другой вопрос, что злоупотребление сахаром приводит к ожирению и диабету.
Также как и магия по вашей ссылке в последнем абзаце - несколько тактов оно когда-то экономило, но с переносимостью там беда в большинстве случаев.

Date: 2017-01-19 07:56 pm (UTC)
From: [identity profile] juan-gandhi.livejournal.com
А как же а) свободные монады, б) волшебное число для извлечения квадратного корня?

Date: 2017-01-19 10:20 pm (UTC)
From: [personal profile] alll
> Случайности же проявляются только тогда когда их привносишь

Ну так и в магии случайности только привнесённые. Разница не в детерминизме, а в наличии/отсутствии достаточно полной модели в голове практикующего. Об чём и закон Кларка намекает.
Edited Date: 2017-01-19 10:21 pm (UTC)

Date: 2017-01-21 07:43 pm (UTC)
From: [identity profile] the-drmad.livejournal.com
Хотя программы суть "идеи", выполняются они на "материальном" железе. А весь материальный мир живет, увы, по вероятностным законам. Пролетит через процессор какой-нибудь высокоэнергетический протон, исказится какой-нибудь битик и кирдык детерЬминизЬму.
Edited Date: 2017-01-21 08:02 pm (UTC)

April 2017

S M T W T F S
      1
23 456 78
9101112131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 22nd, 2017 06:56 pm
Powered by Dreamwidth Studios