Мы уже пакуем 600 пакетов раздатки для участников RailsClub 2017 23 сентября, а наши спикеры добавляют последние штрихи к своим презентациям. Сегодня Алексей Могильников поговорил об Elixir c Никитой Соболевым, который делает сервисы в wemake.services, организет встречи elixir-lang.moscow и является амбассадором Auth0?.

image


Расскажи о себе, чем ты занимаешься?

Я технический директор компании wemake.services (и да, мы делаем сервисы), а еще я веду конференции по Elixir (elixir-lang.moscow). Эти два аспекта связаны: мы проектная команда, занимаемся разработкой проектов на заказ, часто работаем с разными технологиями и не боимся пробовать новое. В какой-то момент у нас был клиент, которому нужно было разработать нечто уникальное, и там было задействовано очень много вебсокетов. Мы работаем, в основном, со стеком Python + JavaScript, и ни Python, ни JS такое количество сокетов на адекватном количестве серверов и за адекватные деньги поддерживать не смогут. Мы начали искать, что же можно применить. Самым лучшим вариантом по производительности на тот момент была Clojure. Но у меня с ней дела не задались — не понравился синтаксис, скобочки, весь этот ужас. Clojure слишком сильно отличается от других языков, которые я знаю. Мне не зашло. На втором месте в моем списке был Elixir. На тот момент я уже встречал этот язык, видел документацию. Я почитал, решил попробовать и мне очень понравилось! Мы начали разрабатывать очень быстро, особенно учитывая, что я вообще не знал этот язык.

Что понравилось? Что подкупило в сравнении с Python?

Мне Elixir понравился именно как дополнение к Python. У питона есть определенные ограничения: например GIL, плохая асинхронность и т.д. С точки зрения асинхронного программирования, Elixir — это сказка. Мне очень понравились такие фишки как паттерн матчинг и пайпы. Теперь я стараюсь их использовать вообще во всех языках, в которых можно. Это изменило то, как я вижу идеальный код в целом. Когда мы начали все это применять, разработка пошла очень быстро, особенно с учетом того, что мы вообще не знали этого языка. Elixir похож на Ruby, а Ruby я не знаю совсем :). Единственная сложность — OTP и то, что связано с Erlang.

А почему ты не выбрал Go? Почему он не подошел?

Просто не люблю Go и все. Мне не нравится его пакетный менеджер, мне не нравится его ниша: он как бы низкоуровневый, но не совсем. Очень странная поделка, на мой взгляд. Мы его даже не рассматривали, но я знаю, что сейчас очень много разработчиков пишут на Go. И многие переходят на Go с Python, из-за прироста производительности.

Какие основные плюсы Elixir ты бы выделил?

Стабильность работы. У нас есть пример: для одной крупной логистической компании был написан трекер на PHP. Он постоянно жрал неограниченное количество ресурсов, падал и умирал (то Почта России отдает корявые статусы, то тебе приходится отдавать корявые статусы) все постоянно ломалось. Мы занимались поддержкой этого сервиса целыми днями. А потом я переписал его на Elixir и все! Он работает без проблем уже месяцев 9 и потребляет в разы меньше ресурсов.

Часто при переходе на другой язык программирования, в другой парадигму, например функциональную, начинаются проблемы из-за разности подходов. При переходе Elixir такое случается?

Таких проблем довольно много. Они связаны с тем, что нельзя ничего мутировать и нельзя хранить состояния. Иногда хочется какое-то состояние сохранить, чтобы потом к нему обращаться. Постоянно хочется что-нибудь мутировать, сделать monkey patching. В Elixir этого делать нельзя, это решается только одним способом — процессами. Сохрани состояние, создай новый процесс и положи состояние туда. Хочешь что-нибудь где-нибудь мутировать — отправь сообщение процессу, он это изменит, и не мутацией, а просто созданием новой копии данных. В Elixir все построено на процессах, это очень простой и понятный концепт. Если перестать относится к процессам, как к полноценным процессам операционной системы, а понять, что он просто небольшой легковесный процесс, у которого могут быть свои внутренние состояния, который умеет общаться с другими, то это очень похоже на объекты в ООП. Что ты создаешь объект, что ты создаешь процесс в Elixir — это очень похоже.

Какие у Elixir недостатки?

В первый год нашей работы с Elixir у него не было библиотек. Мы писали все сами: авторизацию через вконтакт, библиотеку для склонения русских имен, добавление рекапчи. Вторая проблема — количество разработчиков, возможность кого-то нанять, уровень экспертизы. Эликсристов вообще нет, есть эрлангисты, но они не очень любят Elixir — они любят Erlang и хотят писать на нем. Сейчас многим рубистам интересен Elixir, они хотят на него переходить. Это круто, но конечно им придется учиться: 3-5 месяцев (в зависимости от уровня знания других технологий) придется осваиваться, в этот период придется немного тупить и писать медленно. Есть еще определенные технические проблемы. Например, начинает утекать память из-за неправильных настроек, или валятся процессы, когда их слишком нагружаешь из-за неправильной архитектуры. Если процессу придет слишком много сообщений, ящик сообщения переполнится и все умрет. Это скорее вопрос архитектуры, правильного построения. Есть хорошая книга “Erlang In Anger”, она рассказывает как раз об этих и других проблемах, которые воз

Erlang довольно старая технология, старше Python и Java. До недавнего времени она оставалась нишевой. Все изменилось, когда появился Elixir. Почему на базе виртуальной машины Erlang раньше не появлялись новые языки, которые помогли бы этой технологии стать мэйнстримом?

Это связано с тем, как сейчас меняется мир веб-разработки: все realtime, большое количество взаимодействий, все сервисы связаны друг с другом, как-то общаются. Когда у тебя изолированный сервис, который не взаимодействует с другими, синхронный — все это просто не нужно. Появилась возможность общаться с другими сервисами, делать кучу всего все в реальном времени, асинхронно, и более того, есть возможность вынести все это в микросервисы. Не переписывать все на Erlang и Elixir, а написать небольшой кусочек (как мы сделали с тем трекингом), а остальной код оставить на других языках. В этих условиях Elixir стал очень подходящей технологией.

Как ты оказался на конференции для рубистов?

Дело случая. Увидел сайт конференции, написал организаторам. Мне предложили сделать доклад и я подумал, что это отличная идея.

О чем будет твой доклад?

Про Elixir. Почему Elixir не Ruby, а лучше.

Зачем среднестатистическому рубисту приходить на этот доклад?

Можно увидеть новые горизонты. Когда слушаешь доклад о новой библиотеке в Ruby, можно углубить свои знания в конкретной технологии. А если сходить на доклад о Elixir, можно то можно расширить свои знания, узнать, что можно делать вообще по-другому. Такие вещи помогают тебе расти как разработчику.

Приходите на доклад, конференция уже в субботу! Регистрация тут.

Традиционное спасибо компаниям, которые поддерживают RailsClub.
image
mkdev — это место, где можно найти и нанять персонального ментора по программированию.
Независимо от того, работаешь ты или только начинаешь учиться, ментор поможет оформить профессиональные цели, составит личную программу обучения, интенсиво прокачает в нужной сфере разработки, проверит весь твой код и ответит на все твои вопросы в кратчайшие сроки.
В mkdev есть менторы с самыми разными специализациями — от веб-разработки на Django, Rails, ASP.Net, и Spring, до мобильной разработки, системного программирования, DevOps и работы с большими данными.

До встречи в субботу!

Комментарии (7)


  1. Fedcomp
    21.09.2017 17:33
    +4

    > Конференция разработчиков на Ruby и RoR
    > Elixir похож на Ruby, а Ruby я не знаю совсем

    Все понятно.


    1. printercu
      21.09.2017 21:31
      +2

      Дальше больше: "Просто не люблю Go и все."


      1. Tab10id
        21.09.2017 23:38
        +2

        И авторизация вместо аутентификации.


      1. nico
        22.09.2017 14:33
        +1

        не ну эту то точку зрения он обосновалЖ «он как бы низкоуровневый, но не совсем». Придраться не к чему


    1. likid_ri
      23.09.2017 03:28

      Не нужно знать Ruby, чтобы узнавать его синтаксис, достаточно краем глаза увидеть код. И, интервьюируемый как раз это имеет в виду. Синтаксически Elixir напоминает Ruby, потому как разработчик языка вдохновлялся языками Ruby и Clojure (Erlang разумеется само собой).


      1. printercu
        23.09.2017 16:40
        +1

        Как он тогда, просто узнавая синтаксис, говорит "Почему Elixir не Ruby, а лучше"?


        1. likid_ri
          24.09.2017 00:22

          Часто люди приходящие в Elixir из мира Ruby, пытаются программировать на нем в духе Ruby, и ожидают такого же поведения, как в Ruby, а это ошибочное начинание с Elixir. В основе Elixir лежат концепции, совершенно отличающиеся от тех, что есть в Ruby. А вот чтобы убедиться почему «Elixir не Ruby, а лучше», нужно послушать доклад, уверен, что вам много чего понравится в этом языке.