Код
#статьи

«Один разработчик заменяет пять программистов на JavaScript»: для чего нужен Haskell

Это язык стартапов, который медленно, но верно заходит на территорию коммерческой разработки. Рассказываем, зачем используют Haskell и как его учить.

Иллюстрация: Haskell / Wikimedia Commons / Kukuwa / Valdo / Manul / Knar / Rafaelito / Cleanpng / Kowainik logo / Kowainik / Meery Mary для Skillbox Media

Дмитрий Коваников

об эксперте

Haskell-разработчик в лондонском банке. Любит функциональное программирование и выступает на конференциях. Несколько лет преподавал Haskell в ИТМО, вместе с подругой основал организацию Kowainik, где поддерживает опенсорсные проекты, менторит новичков, ведёт блог и курс по Haskell.


Ссылки


Последние пять лет я пишу на Haskell. До него я много кодил на Java, а когда появился Kotlin, перешёл на него, и мне очень понравилось. Я до сих пор считаю Kotlin приятным и симпатичным языком. Недавно снова на него взглянул — даже после Haskell он смотрится неплохо.

Ещё я писал фронтенд на Elm — это тоже функциональный язык программирования. Хотя у него намного меньше фич, чем у Haskell, он очень хорошо решал свои задачи. Есть опыт и с PureScript. На работе мы используем Kubernetes и его конфигурацию описываем на Dhall (да, так получилось, что у меня весь стек функциональный).

Также приходится постоянно писать скрипты на Bash — нередко попадаются задачи из DevOps.

У меня интересная история взаимоотношений с Haskell — я пытался учить его несколько раз. Например, в университете у меня был курс по матлогике, где преподаватель говорил: «Пишите на Haskell, на нём проще решать задачи». Я попробовал и подумал: «Что это за ерунда? На нём вообще кодить невозможно». Потом нам прочитали курс по функциональному программированию, и мне тоже не зашло.

Но в итоге я всё-таки проникся идеями Haskell. Да так, что мне даже предложили вести курс по функциональному программированию в ИТМО, и я преподавал там Haskell два с половиной года. Пока готовился к лекциям и практическим занятиям, очень глубоко погрузился в язык — в результате получился вводный курс по Haskell.

Потом друг, который и позвал меня вместе читать курс по функциональному программированию в ИТМО, организовал компанию, где код писали на Haskell. Я к нему присоединился и дальше с иглы Haskell уже не слезал.

Перспективы Haskell в коммерческой разработке

В коммерческой разработке Haskell постепенно обретает популярность — его выбирают всё больше и больше компаний. Обычно это стартапы, потому что они пишут проекты с нуля и могут выбрать любой стек. Но есть и исключения — например, у банка, в котором я сейчас работаю, довольно серьёзная кодовая база на Haskell, ей уже больше двенадцати лет.

А вот когда у тебя куча легаси, сложно переписать всё на Haskell. Придётся искать сеньор-разработчиков, которые разбираются и в Haskell, и в архитектуре — чтобы кодовая база не трансформировалась из одного легаси в другое, только уже на непонятном большинству разработчиков языке.

Хотя нужно признать, что у Haskell очень хорошая совместимость с языком C. Благодаря паре библиотек из Haskell можно вызывать код на Java, C++, Rust и даже R.

Ещё у Haskell есть две важные особенности:

Это не мейнстримный язык. Для каких-то задач может не быть готового API или другого решения, и поэтому вам придётся самостоятельно писать, например, JSON REST API, чтобы отправлять запросы на какой-то сервис.

Но для большинства задач решения уже существуют — я находил почти всё, что мне было нужно. Есть и готовые решения для взаимодействия с базами данных (той же PostgreSQL), использования сервисов Amazon и Google, библиотеки для работы с сетью, парсинга всех популярных форматов и много чего другого.

Трудно найти опытных разработчиков. Немало людей пишут на Haskell, но если вам нужны программисты с опытом, их будет гораздо меньше. К тому же далеко не у всех компаний есть опыт продакшен-разработки на Haskell, поэтому они просто не могут набирать джунов — их некому будет менторить. Поначалу всё равно придётся нанять опытных программистов, которые сформируют базу и наладят процессы.

Один Haskell-разработчик vs пять программистов на JavaScript

На предыдущей работе у меня произошла интересная история с Haskell. У стартапа был Node.js-сервер, которым занимались десять разработчиков. Они написали 300 тысяч строк кода и 600 тысяч строк тестов. Это такая особенность JavaScript — тестов нужно очень много, поэтому их получилось вдвое больше, чем полезного кода. Но компания не могла платить людям конкурентные зарплаты, поэтому их хантили другие работодатели и JavaScript-разработчиков не хватало.

Однако новый техдиректор решил переписать всё на Haskell. Сначала он написал небольшой сервер — и за два года в нём ничего не сломалось. После этого он нанял двух разработчиков (одним из них был я). Вместе мы за полгода переписали весь JS-код на Haskell.

Когда новый сервер запустили, он работал без багов и ни разу не упал в продакшене. А благодаря статическим типам, компилятору и другим преимуществам Haskell мы очень быстро пилили и выпускали новые фичи.

В Java тоже есть статическая типизация, но в Haskell система типов по-настоящему мощная. Поверх неё есть несколько плюшек, которые позволяют хорошо смоделировать свой домен и сократить число багов.

Когда наш CTO встречался с другими стартаперами и рассказывал, как быстро мы добавляем фичи, сколько у нас релизов, и упоминал, что это делает команда из двух человек, ему отвечали: «Ну нет, для таких задач нужно минимум с десяток людей. Не могут двое программистов столько успевать». Просто не верили, что так бывает.

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

Haskell-сообщество и выступления на конференциях

Я стараюсь поддерживать комьюнити Haskell — веду опенсорсные проекты, курсы, менторю новичков и выступаю на конференциях. Правда, последние полтора года из-за пандемии мероприятия проходят в онлайне.

По Haskell проводится много конференций — например, академическая ICFP. Но у неё есть проект Haskell Implementors’ Workshop: и вот там уже необязательно быть учёным, чтобы выступать с докладом или понимать, что говорят спикеры.

В 2017 году я ездил на ICFP как зритель, а в 2019-м — уже выступал на YOW! Lambda Jam в Австралии: рассказал про библиотеку логирования, которую мы сделали вместе с подругой в нашей опенсорсной организации.

Когда конференции перешли в онлайн, я дважды участвовал в Haskell Love. В последний раз рассказывал про библиотеку парсинга TOML, а в прошлом году мы с подругой прочитали доклад про свой самописный статический анализатор Haskell.

В 2020 году специально для Hacktoberfest мы собрали курс Learn4Haskell. Там есть объяснение материала и упражнения: люди проходили все главы, изучали Haskell, делали четыре пул-реквеста и получали футболку Hacktoberfest. Мероприятие закончилось, но курс всё ещё открыт, его можно пройти в любое время.

Сейчас благодаря онлайну несложно поучаствовать в заграничных митапах. Например, 14 декабря на Functional Fest Online я расскажу про архитектуру бэкенда на Haskell, которую мы придумали на моём предыдущем месте работы. До этого на амстердамском митапе я читал доклад про альтернативную стандартную библиотеку Haskell. Стараюсь максимально участвовать в ивентах — пока хватает сил :)

А ещё у меня есть Kowainik — организация, которую мы основали вместе с подругой: там мы ведём много опенсорсных проектов на Haskell, блог с туториалами и большими гайдами, менторим новичков, помогаем им учиться и контрибьютить в опенсорсные проекты.

Свой твиттер, проекты и блог я веду на английском, потому что сообщество Haskell распределено по всему миру и так я получаю больше фидбэка. Да, у Haskell есть и русскоязычное комьюнити, но оно довольно маленькое.

Кстати, у нас в блоге есть популярный пост про паттерны программирования в Haskell. Он очень понравился читателям — так что если интересуетесь этим языком программирования, очень рекомендую.

Подборка ресурсов для Haskell-разработчиков от Дмитрия

  1. Сайт Kowainik — здесь собраны ссылки на блог, курсы и наши опенсорсные проекты на Haskell.
  2. Наш GitHub-репозиторий со всеми проектами.
  3. Блог про Haskell, где мы делимся опытом.
  4. Курс Learn4Haskell, который запустили для Hacktoberfest. Но его можно пройти в любое время.
  5. Курс по Haskell, который мы создали в ИТМО с моим другом Арсением Серокой.
  6. YouTube-плейлист с докладами на конференциях — там есть наши отдельные и совместные выступления с моей подругой Вероникой Ромашкиной.
  7. Bind The Gap — наш с Вероникой журнал про функциональное программирование.
Проверьте свой английский. Бесплатно ➞
Нескучные задания: small talk, поиск выдуманных слов — и не только. Подробный фидбэк от преподавателя + персональный план по повышению уровня.
Пройти тест
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована