ReCoder (recoder) wrote,
ReCoder
recoder

  • Mood:
  • Music:

Magic

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

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

Tags: coding

Posts from This Journal “coding” Tag

  • JSON APIs

    А подскажите мне, коллеги-программисты, какой нонеча самый кошерный способ правильно описывать HTTP APIs? Ну вот так, чтобы свой обычный REST…

  • Приходил тут к нам Python, ел на завтрак JSON

    Случилась тут у нас на работе загогулина. В процессе декомпозиции всех наших проектов на микросервисы решили мы воспользоваться шансом и…

  • Прикладной JavaScript

    Сижу, изучаю очередной JavaScript-фреймворк. На этот раз YUI3. Раньше приходилось покопаться в Dojo, была задача за пару месяцев изучить ExtJS…

  • Программерские песочницы

    Люблю в своей профессии периодически обнаруживать маленькие бриллиантики программерской мысли, заставляющие удивлённо вздыхать, приговаривая "как же…

  • C++ Web Service - Progress Report

    Коллеги интересуются, что в конце концов случилось с идеей написания веб-сервиса на плюсах. Спрашивали - отвечаем! Those who don't understand…

  • С++ Web Services

    Возникла идея в рабочей системе вообще отказаться от интерпретируемых языков. Статику отдавать через Apache, клиента сделать на статическом…

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 8 comments