Жозе Валим: «Elixir хорош для всего, что работает с сетью и сокетами»
Evrone занимается не только заказной разработкой. Мы участвуем в локальных и международных сообществах, каждый год проводим конференцию Ruby Russia и приглашаем на неё специалистов со всего мира. Благодаря общению с разработчиками и авторами технологий накапливаем экспертизу для решения задач наших клиентов. Самое интересное мы возвращаем сообществу в виде интервью, конференций и митапов. Одно из таких интервью мы недавно взяли у автора языка программирования Elixir. Жозе Валим рассказал про историю возникновения языка и планы на будущее, пользу для крупных компаний, влияние сообщества, выбор названия и многое другое.
Интервью
Evrone: Добро пожаловать на интервью! Начнём с формального представления и того, чем ты сейчас занимаешься.
Жозе: Всем привет! Меня зовут Жозе Валим, я — автор языка программирования Elixir. В начале этого года я основал новую компанию Dashbit, которая помогает бизнесу использовать Elixir.
Evrone: Давай поговорим о популярности технологий. Многие разработчики ориентируются на «killer apps» вроде фреймворка
Жозе: Они помогают, но не создают популярность сами по себе. Если у вас есть «убойное приложение», которое быстро привлечёт много внимания к технологии, это поможет в продвижении, но это не обязательное требование. И даже если приложение есть, его одного вряд ли хватит для поддержки всего сообщества. Для меня Python — это хороший пример того, каким должен быть язык программирования: его использование очень разнообразно.
Для сообщества важно перерасти рамки, заданные первыми «убойными приложениями», и открыть новые области применения технологии. Этот путь я с самого начала выбрал для Elixir: имея опыт веб-разработки, я старался не загонять его в угол, где он стал бы «языком для
Сегодня можно видеть его использование не только в вебе, но и, например, для создания распределенных систем (спасибо Erlang!). Ещё у нас есть Nerves для использования Elixir во встраиваемых устройствах. Есть проекты Broadway и GenStage для эффективной работы с данными. Я гораздо больше заинтересован в поиске разнообразия, чем в создании одной «убийственной штуки» для популяризации языка.
Evrone: Python действительно очень универсальный язык программирования. Его часто называют «лучшим вторым инструментом для любой задачи». А как можно одной фразой назвать Erlang?
Жозе: Я бы сказал, что Elixir хорош для всего, что работает с сетью и сокетами.
Evrone: Хорошее позиционирование для разработчиков. А как насчёт больших компаний? Как «продать» Elixir бизнесу?
Жозе: Я с самого начала знал, что придется много писать и рассказывать о языке, выступать на конференциях. С тех пор я этим и занимаюсь. Но когда речь заходит о рекламе технологии для большого бизнеса, простыми ответами на вопросы не отделаться. Мне всегда везло с партнёрами и кофаундерами, которые помогали с продажами. Я занимался технической стороной, а они — бизнесовой. Поэтому важно собирать обратную связь не только от программистов — мы стараемся не принимать решения в одиночку, чтобы смотреть на Elixir и его продвижение с разных сторон.
Evrone: Продвигать технологии тяжело. Так же, как давать им имена. Мы несколько раз видели вопрос о названии «Elixir» на профильных форумах. Откуда оно? Это отсылка к языку Potion за авторством _why?
Жозе: Я знаю _why, автора Potion, только по его вкладу в развитие Ruby. Это было давно и не повлияло на поиск хорошего имени.
Название «Elixir» я выбрал по нескольким причинам.
Evrone: Мы поговорили про позиционирование языка. А как насчёт обучения? Насколько он сложен для начинающих разработчиков с несколькими годами опыта? С чего лучше начинать изучение?
Жозе: Хороший вопрос. У
Говоря про обучение языкам программирования, я всегда вспоминаю моего друга Хьюго Барау́на. Мы познакомились в институте, и у нас были совершенно разные подходы к изучению нового. Я всегда был человеком, который бросается исследовать пещеры с фонариком, проводит быстрые эксперименты и нетерпеливо смотрит, что получится. Хьюго, напротив, очень организован. Отправляясь в пещеру, он составит строгий план действий, возьмёт прожектор и правильный набор инструментов.
Я знаю, что некоторые успешно обучали Elixir’у новичков без опыта программирования. Разработчики с опытом в JavaScript, Python, Ruby, .NET, Java получают море удовольствия от использования Elixir и эффективно решают на нём свои задачи. А у
Хорошая новость в том, что мы уже достаточно давно делаем Elixir и есть много обучающих ресурсов. Вводные лекции на официальном сайте могут быть слишком сжатыми, поэтому новичкам я могу порекомендовать такие книги, как «Введение в Elixir» издательства O’Reilly и «Joy of Elixir» за авторством Ryan Bigg. А разработчикам с опытом в Ruby, Python или JavaScript я рекомендую книгу «Programming Elixir». Книга Саши Юрича «Elixir в действии» рассказывает о языке, как об инструменте для создания программных систем. У нас также есть скринкасты,
Evrone: Elixir был вдохновлен такими языками, как Ruby, Clojure и Haskell. Оглядываясь назад, что ещё послужило основой для его создания?
Жозе: Я бы назвал Ruby, Erlang и Clojure. Мы заимствовали не только фичи этих языков, но и часть их философии. Вся наша инфраструктура «досталась в наследство» от Erlang. В Clojure мы заимствовали способы решения типовых задач, например протоколы. Ну а Ruby послужил основной для синтаксиса, дизайна стандартной библиотеки и соглашений по именованию. Именно из этих трёх языков мы получили идеи для будущего нашего собственного языка и понимание, каким он должен быть. В целом, конечно, мы заимствовали удачные концепции отовсюду: Haskell, Python, F#.
Evrone: Считается хорошим тоном спрашивать в интервью о самых больших успехах и ошибках в технологиях. Но говорить об ошибках не очень приятно, поэтому расскажи нам, что считаешь наиболее успешным в дизайне Elixir?
Жозе: Ещё один хороший вопрос. Когда я начал работу над Elixir, то первый прототип получился не очень. Я тогда был похож на того нетерпеливого парня с фонариком в пещере. Но после неудачи я понял, что хочу видеть в языке. Я начал с Erlang и решил, что построю свой язык программирования поверх экосистемы и концепций этого языка.
У меня были две цели: расширяемость и продуктивность. И когда я говорю о продуктивности, то имею в виду очень хорошие инструменты для разработки (tooling). Другие языки, например Ruby, также ценят инструменты и то, насколько программистам комфортно работать с кодом. Хороший свежий пример — Go, авторы которого с самого начала сделали упор на инструменты разработки.
Расширяемость отразилась в двух вещах.
Тогда я посмотрел на
А потом я узнал, что Джон Маккарти, автор Lisp, тоже об этом думал. Он сделал «SLisp» — то, что мы сейчас называем Lisp. А ещё он сделал «MLisp» с высокоуровневым синтаксисом. Так что моя «новая» идея оказалась
Подводя итог, я считаю своим лучшим решением в дизайне языка то, что я внимательно смотрел по сторонам и выбирал хорошо «играющие вместе» решения для использования в виртуальной машине Erlang.
Evrone: В мире Elixir разработки очень популярен Elixirforum.com. Насколько этот ресурс уникален именно для Elixir? Каков его вклад в популярность языка?
Жозе: Я всегда избегал централизации и старался сделать Elixir языком, который разрабатывается сообществом. Я хотел дать любому желающему возможность и инструменты для участия в разработке. Поэтому у нас так мало официальных ресурсов, которые контролирует команда Elixir. Мы приглашали и приглашаем всех желающих делать свои собственные.
Языковые барьеры играют большую роль в распространении технологий. У нас, например, есть большое
История Elixirforum именно такая. Aston создал этот форум, развивал его, рекламировал и сделал тем, чем форум является сейчас. Это одно из тех мест, куда я время от времени прихожу и смотрю, чем могу помочь. И я рад, что есть ещё много таких мест, доступных для Elixir разработчиков со всего мира.
Evrone: Замечательная история. Предлагаю сменить курс интервью и обсудить прикладные вопросы. Какую IDE порекомендуешь для разработчиков на Elixir?
Жозе: Я не инвестирую много времени в текстовый редактор. Я использовал TextMate 1.0 более десяти лет, когда разработчики уже прекратили его поддерживать. И сменил только после того, как моя версия перестала работать в обновившейся операционной системе. Я перешёл на Sublime Text, но особо не использую продвинутые фичи, за исключением горячих клавиш автоматического форматирования кода. Я знаю, что многие разработчики используют Visual Studio Code с поддержкой Elixir Language Server. Разработчики Language Server постоянно улучшают интеграцию, так что большинство программистов на Elixir предпочитают такую связку.
Evrone: Ещё один технический вопрос. Что думаешь про новую парадигму «асинхронного программирования»? Если сравнивать его с «message passing», что легче для разработчиков?
Жозе: Ключевым в async/await является то, что это именно парадигма. Разные языки программирования реализуют её
Есть два типа одновременной работы с задачами (concurrency): по процессору (
Я влюбился в Erlang потому, что пока все решали вопросы одновременной работы с задачами, Erlang изящно воспользовался одной абстракцией и для одновременности, и для построения распределенных систем. Моя программа может выполняться на разных физических компьютерах, но её части могут свободно общаться друг с другом. Эта же абстракция позволяет работать с возникающими ошибками и создавать отказоустойчивые системы. И когда дело доходит до одновременной работы с задачами
Evrone: Возвращаясь из технических глубин, давай поговорим о будущем. Каким ты видишь Elixir через десять лет, если всё будет максимально благоприятно для созданного тобой языка?
Жозе: Никогда не загадывал так далеко. Создание нового языка программирования — это огромные усилия. И такой же огромный шанс провала. Не говоря уже о таких вещах, как время и деньги. Так что я старался и стараюсь делать то, что делаю хорошо, и не иметь завышенных ожиданий.
Тем не менее, я всегда хотел чтобы мой язык не был нишевым, использовался для разных задач, а его сообщество было гостеприимным. Прошли годы, и мои долгосрочные планы не изменились. Мне всё так же интересно, какие новые области применения можно найти для Elixir.
К примеру, сейчас бурно развивается машинное обучение и я хочу, чтобы Elixir стал частью этого развития. В машинном обучении простой вопрос «это собака или кошка?» распадается на множество простейших вопросов о признаках. Уши этого животного похожи на кошачьи? Нос этого животного похож на собачий? Мы можем работать с такими признаками одновременно. Эта работа как будто создана специально для Elixir! Язык очень хорош в координировании множества задач, выполняющихся одновременно на разных компьютерах.
Evrone: Наш традиционный вопрос о путешествиях во времени! Если бы ты попал в прошлое и у тебя была возможность дать один технический совет молодому себе, какой бы совет это был?
Жозе: По правде говоря, я не знаю. Не то чтобы у меня не было советов, но путешествия во времени — это отдельная запутанная история. Что если я дам себе в прошлом совет, воспользуюсь им и всё сломается? Как можно быть уверенным, что «послезнание» действительно приведёт к лучшему результату, чем есть сейчас? Иногда, чтобы получить ответы, нам приходится много работать (вместо того, чтобы получить совет из будущего).
Evrone: Это многое говорит о языке и твоей работе над ним. А что насчёт конкурентов? Какие языки ты бы назвал главными конкурентами Elixir?
Жозе: Все другие динамические языки программирования. Но если говорить про области применения Elixir, то в каждой конкретной области у него будут разные конкуренты. Для веба это JavaScript и Ruby. Для работы с данными — все языки, которые выполняет виртуальная машина Java. Но, повторюсь, в общем речь идёт именно про динамические языки. При прочих равных они похожи в использовании.
Evrone: Быть автором языка программирования, поддерживать его экосистему и организовывать сообщество — это много работы. Как ты организуешь своё рабочее время, чтобы всё успевать и избегать «выгорания»?
Жозе: Мой главный принцип — это минимизация отвлекающих факторов. Работая за компьютером, я всегда включаю режим «не беспокоить». Так я фокусируюсь на работе и сохраняю спокойствие. Сейчас, когда многие работают из дома,
Например, раньше я активно использовал Twitter, а теперь полностью исключил его из своей жизни. Я боялся, что не смогу получать все те новости о новых технологиях, которые раньше читал в твитах. Зря волновался, действительно важная информация никуда не теряется.
Я работаю удаленно уже больше десяти лет, так что в 2020 году для меня мало что изменилось. И раз уж мы заговорили про отвлекающие факторы, на телефоне я тоже всё отключил. Иначе на встречах с друзьями я постоянно смотрю на уведомления.
Evrone: Для нас это ещё одно авторитетное мнение о пользе этой практики. Спасибо за интервью и до встречи на конференциях!
Подводя итог
Интервью с Жозе получилось большим и пролило свет на многие неочевидные вещи в разработке языков программирования. Мы также хотим поблагодарить Ruby Conf Taiwan за обложку интервью.
Каждое техническое интервью, выступление на конференции или организованный нами митап добавляет экспертизы нашей команде. В Evrone мы часто используем Elixir там, где требуется распределённость и отказоустойчивость. Если вам нужно реализовать технически сложное решение — дайте знать, и мы расскажем, какие технологии из нашего портфолио могут принести вам пользу.