Мы уже пакуем 600 пакетов раздатки для участников RailsClub 2017 23 сентября, а наши спикеры добавляют последние штрихи к своим презентациям. Сегодня Алексей Могильников поговорил об Elixir c Никитой Соболевым, который делает сервисы в wemake.services, организет встречи elixir-lang.moscow и является амбассадором Auth0?.
Расскажи о себе, чем ты занимаешься?
Я технический директор компании 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.
mkdev — это место, где можно найти и нанять персонального ментора по программированию.
Независимо от того, работаешь ты или только начинаешь учиться, ментор поможет оформить профессиональные цели, составит личную программу обучения, интенсиво прокачает в нужной сфере разработки, проверит весь твой код и ответит на все твои вопросы в кратчайшие сроки.
В mkdev есть менторы с самыми разными специализациями — от веб-разработки на Django, Rails, ASP.Net, и Spring, до мобильной разработки, системного программирования, DevOps и работы с большими данными.
До встречи в субботу!
Расскажи о себе, чем ты занимаешься?
Я технический директор компании 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.
mkdev — это место, где можно найти и нанять персонального ментора по программированию.
Независимо от того, работаешь ты или только начинаешь учиться, ментор поможет оформить профессиональные цели, составит личную программу обучения, интенсиво прокачает в нужной сфере разработки, проверит весь твой код и ответит на все твои вопросы в кратчайшие сроки.
В mkdev есть менторы с самыми разными специализациями — от веб-разработки на Django, Rails, ASP.Net, и Spring, до мобильной разработки, системного программирования, DevOps и работы с большими данными.
До встречи в субботу!
Fedcomp
> Конференция разработчиков на Ruby и RoR
> Elixir похож на Ruby, а Ruby я не знаю совсем
Все понятно.
printercu
Дальше больше: "Просто не люблю Go и все."
Tab10id
И авторизация вместо аутентификации.
nico
не ну эту то точку зрения он обосновалЖ «он как бы низкоуровневый, но не совсем». Придраться не к чему
likid_ri
Не нужно знать Ruby, чтобы узнавать его синтаксис, достаточно краем глаза увидеть код. И, интервьюируемый как раз это имеет в виду. Синтаксически Elixir напоминает Ruby, потому как разработчик языка вдохновлялся языками Ruby и Clojure (Erlang разумеется само собой).
printercu
Как он тогда, просто узнавая синтаксис, говорит "Почему Elixir не Ruby, а лучше"?
likid_ri
Часто люди приходящие в Elixir из мира Ruby, пытаются программировать на нем в духе Ruby, и ожидают такого же поведения, как в Ruby, а это ошибочное начинание с Elixir. В основе Elixir лежат концепции, совершенно отличающиеся от тех, что есть в Ruby. А вот чтобы убедиться почему «Elixir не Ruby, а лучше», нужно послушать доклад, уверен, что вам много чего понравится в этом языке.