После курса
OCaml продолжаю погружаться в эзотерику. На этот раз выбор пал на Erlang. Сначала расскажу про два курса по три недели на площадке FutureLearn от университета Kent, а затем общее впечатление об языке.
Первый курс –
Functional Programming in Erlang мне показался достаточно простым. После OCaml-а мозги были достаточно вывернуты чтобы решать задачи паттер-матчингом и оптимизировать для хвостовой рекурсии. Синтаксис воспринимался интуитивно, главное отличие от OCaml – Erlang не типизированный язык и, как следствие, отсутствую алгебраические типы. Когда, началась третья неделя у меня возник вопрос: а где, собственно, хваленая распределенность. Как оказалось, для этого был отдельный курс.
Для того, чтобы пройти квалификационный тест и получить сертификат, нужно было заплатить порядка $80. При этом, изначальная цена была $60, на которую накинули налоги и доставку сертификатов из англии – все это вы узнаете непосредственно при оплате. После оплаты открывается тест: 10 вопросов, по 3 попытки на каждый вопрос. Итого – 30 баллов которые превращаются в проценты. Сделал 1 ошибку и набрал 98%. Сертификат шел примерно месяц.
Вторым фактом, поразившим меня до глубины души стало отсутствие электронной версии сертификата. Нет, ссылка на красивый сайт с анимацией и градиентами, где отображаются заветные проценты у них есть. Но она не в формате А4. У нас с саппортом состоялась переписка на предмет: я заплатил чертовы 80 баксов, дайте мне PDF-ку или PNG-шку, все что угодно, где мне объяснили что нужно дождаться бумажной версии и отсканить её. Фейспалм. Ладно, отсканю, что поделать.
Второй курс Concurrent Programming in Erlang начался через пару недель после первого. Я решил посмотреть содержимое и, забыв о том что я на третьей неделе, начал проходить курс. Через пару видеофрагментов, было предложено написать балансировщик запросов. У меня упала челюсть. Один кролик плюс один кролик будет два кролика, а теперь посчитайте интеграл. Эээээ, ШТОА?! Написал в комментариях все что я о них думаю, а затем заметил что я на третьей неделе. Либо остался осадочек, либо второй курс был действительно ниже качеством: авторы попытались взять набор лекций Джо Армстронга и и накидали вокруг других лекций с заданиями. При этом задания были сильно сложнее. В рамках курса две недели разбиралось "ванильное" параллельное программирование, а на третьей неделе была бегло рассмотрена платформа OTP. Бесплатный тест из пяти вопросов я сдал с кучей ошибок и поэтому платил очередные $80 за сертификат скрепя сердце. В итоге на 10 вопросов допустил три ошибки и заработал набрал 90%. Теперь жду очередной сертификат. Еще одним фейлом оказалось то, что у них сломалось автоматическое размещение сертификата на LinkedIn – впрочем обещали поправить.
Теперь про сам язык. В отличие от OCaml, где пяток французов играются в своей песочнице, Erlang у меня создал впечатление серьезного, консистентного языка с полноценной платформой. При этом ядро языка осталось очень простым. Курс по
Clojure я дропнул примерно на половине, потому что я понял: на этом языке, в который налепили кучу сахара, и где нужно запоминать стопицот конструкций, у меня писать нет никакого желания.
JOE ARMSTRONG: I mean, it's maybe not apparent, but we've got 15 people in Ericsson who have built that stuff for 20 years. So there's something like 250 man years of work in it. It's big. На этом можно ставить точку и уходить смеяться над хипстерами с nodejs которые рассказывают про параллельный код.
JOE ARMSTRONG: But if you think about it, we are doing something that nobody else is doing. You see, we are running concurrent programs and looking for the bottlenecks in it. Other people are running sequential programs and looking for the concurrency in it. So we're already 20 years ahead. Адепты Sсala начали пилить Akka – некое подобие Эрланга c 2009 года, при этом сам Erlang не стоит на месте и у разработчики хотят адаптировать на географически распределенные облака
JOE ARMSTRONG: So the typical use case was 10 relatively powerful machines inside a corporate firewall. The usage patterns, we weren't thinking of millions of machines loosely connected, with a lot of security problems.
и работу Erlang на голом железе.
FRANCESCO CESARINI: I'm loving the whole discussion of microservices. We've been doing it for a long time. But to add to what Joe is saying, you know, I'm seeing a lot happening, running Erlang on the bare metal, running an Erlang-based OS, Erlang on Zen. And what's happening is that-- it's still on an experimental level, and I don't think we'll see any production code for another probably three, four, maybe five years, but integrating a soft switch into the Erlang VM, and then using software defined networking principles.
Дополнительным фактором в пользу Erlang является то, что он хорошо взаимодействует с другими языками, например C. При этом Erlang берет на себя коммуникационную часть, а непосредственно код может выполняться на более быстрых/удобных с вычислительной точки зрения языках.
Итог: я в восторге.
P.S. легендарный
Erlang The Movie, где почти 30 лет назад (за 10 лет до java) демонстрировалась подмена кода на работающей системе без разрыва связи. Вашему левому уху понравится, если вы будете слушать в наушниках.