HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-21
1 <p><a>#статьи</a></p>
1 <p><a>#статьи</a></p>
2 <ul><li>20 дек 2021</li>
2 <ul><li>20 дек 2021</li>
3 <li>0</li>
3 <li>0</li>
4 </ul><p>Это язык стартапов, который медленно, но верно заходит на территорию коммерческой разработки. Рассказываем, зачем используют Haskell и как его учить.</p>
4 </ul><p>Это язык стартапов, который медленно, но верно заходит на территорию коммерческой разработки. Рассказываем, зачем используют Haskell и как его учить.</p>
5 <p>Иллюстрация: Haskell / Wikimedia Commons / Kukuwa / Valdo / Manul / Knar / Rafaelito / Cleanpng / Kowainik logo / Kowainik / Meery Mary для Skillbox Media</p>
5 <p>Иллюстрация: Haskell / Wikimedia Commons / Kukuwa / Valdo / Manul / Knar / Rafaelito / Cleanpng / Kowainik logo / Kowainik / Meery Mary для Skillbox Media</p>
6 <p>Онлайн-журнал для тех, кто влюблён в код и информационные технологии. Пишем для айтишников и об айтишниках.</p>
6 <p>Онлайн-журнал для тех, кто влюблён в код и информационные технологии. Пишем для айтишников и об айтишниках.</p>
7 <p><strong>об эксперте</strong></p>
7 <p><strong>об эксперте</strong></p>
8 <p>Haskell-разработчик в лондонском банке. Любит функциональное программирование и выступает на конференциях. Несколько лет преподавал Haskell в ИТМО, вместе с подругой основал организацию<a>Kowainik</a>, где поддерживает опенсорсные проекты, менторит новичков, ведёт<a>блог</a>и <a>курс по Haskell</a>.</p>
8 <p>Haskell-разработчик в лондонском банке. Любит функциональное программирование и выступает на конференциях. Несколько лет преподавал Haskell в ИТМО, вместе с подругой основал организацию<a>Kowainik</a>, где поддерживает опенсорсные проекты, менторит новичков, ведёт<a>блог</a>и <a>курс по Haskell</a>.</p>
9 <p>Последние пять лет я пишу на Haskell. До него я много кодил на Java, а когда появился Kotlin, перешёл на него, и мне очень понравилось. Я до сих пор считаю Kotlin приятным и симпатичным языком. Недавно снова на него взглянул - даже после Haskell он смотрится неплохо.</p>
9 <p>Последние пять лет я пишу на Haskell. До него я много кодил на Java, а когда появился Kotlin, перешёл на него, и мне очень понравилось. Я до сих пор считаю Kotlin приятным и симпатичным языком. Недавно снова на него взглянул - даже после Haskell он смотрится неплохо.</p>
10 <p>Ещё я писал фронтенд на <a>Elm</a> - это тоже функциональный язык программирования. Хотя у него намного меньше фич, чем у Haskell, он очень хорошо решал свои задачи. Есть опыт и с <a>PureScript</a>. На работе мы используем Kubernetes и его конфигурацию описываем на <a>Dhall</a>(да, так получилось, что у меня весь стек функциональный).</p>
10 <p>Ещё я писал фронтенд на <a>Elm</a> - это тоже функциональный язык программирования. Хотя у него намного меньше фич, чем у Haskell, он очень хорошо решал свои задачи. Есть опыт и с <a>PureScript</a>. На работе мы используем Kubernetes и его конфигурацию описываем на <a>Dhall</a>(да, так получилось, что у меня весь стек функциональный).</p>
11 <p>Также приходится постоянно писать скрипты на Bash - нередко попадаются задачи из DevOps.</p>
11 <p>Также приходится постоянно писать скрипты на Bash - нередко попадаются задачи из DevOps.</p>
12 <p>У меня интересная история взаимоотношений с Haskell - я пытался учить его несколько раз. Например, в университете у меня был курс по матлогике, где преподаватель говорил: "Пишите на Haskell, на нём проще решать задачи". Я попробовал и подумал: "Что это за ерунда? На нём вообще кодить невозможно". Потом нам прочитали курс по функциональному программированию, и мне тоже не зашло.</p>
12 <p>У меня интересная история взаимоотношений с Haskell - я пытался учить его несколько раз. Например, в университете у меня был курс по матлогике, где преподаватель говорил: "Пишите на Haskell, на нём проще решать задачи". Я попробовал и подумал: "Что это за ерунда? На нём вообще кодить невозможно". Потом нам прочитали курс по функциональному программированию, и мне тоже не зашло.</p>
13 <p>Но в итоге я всё-таки проникся идеями Haskell. Да так, что мне даже предложили вести курс по функциональному программированию в ИТМО, и я преподавал там Haskell два с половиной года. Пока готовился к лекциям и практическим занятиям, очень глубоко погрузился в язык - в результате получился<a>вводный курс по Haskell</a>.</p>
13 <p>Но в итоге я всё-таки проникся идеями Haskell. Да так, что мне даже предложили вести курс по функциональному программированию в ИТМО, и я преподавал там Haskell два с половиной года. Пока готовился к лекциям и практическим занятиям, очень глубоко погрузился в язык - в результате получился<a>вводный курс по Haskell</a>.</p>
14 <p>Потом друг, который и позвал меня вместе читать курс по функциональному программированию в ИТМО, организовал компанию, где код писали на Haskell. Я к нему присоединился и дальше с иглы Haskell уже не слезал.</p>
14 <p>Потом друг, который и позвал меня вместе читать курс по функциональному программированию в ИТМО, организовал компанию, где код писали на Haskell. Я к нему присоединился и дальше с иглы Haskell уже не слезал.</p>
15 <p>В коммерческой разработке Haskell постепенно обретает популярность - его выбирают всё больше и больше компаний. Обычно это стартапы, потому что они пишут проекты с нуля и могут выбрать любой стек. Но есть и исключения - например, у банка, в котором я сейчас работаю, довольно серьёзная кодовая база на Haskell, ей уже больше двенадцати лет.</p>
15 <p>В коммерческой разработке Haskell постепенно обретает популярность - его выбирают всё больше и больше компаний. Обычно это стартапы, потому что они пишут проекты с нуля и могут выбрать любой стек. Но есть и исключения - например, у банка, в котором я сейчас работаю, довольно серьёзная кодовая база на Haskell, ей уже больше двенадцати лет.</p>
16 <p>А вот когда у тебя куча легаси, сложно переписать всё на Haskell. Придётся искать сеньор-разработчиков, которые разбираются и в Haskell, и в архитектуре - чтобы кодовая база не трансформировалась из одного легаси в другое, только уже на непонятном большинству разработчиков языке.</p>
16 <p>А вот когда у тебя куча легаси, сложно переписать всё на Haskell. Придётся искать сеньор-разработчиков, которые разбираются и в Haskell, и в архитектуре - чтобы кодовая база не трансформировалась из одного легаси в другое, только уже на непонятном большинству разработчиков языке.</p>
17 <p>Хотя нужно признать, что у Haskell очень хорошая совместимость с языком C. Благодаря паре библиотек из Haskell можно вызывать код на Java, C++, Rust и даже R.</p>
17 <p>Хотя нужно признать, что у Haskell очень хорошая совместимость с языком C. Благодаря паре библиотек из Haskell можно вызывать код на Java, C++, Rust и даже R.</p>
18 <p>Ещё у Haskell есть две важные особенности:</p>
18 <p>Ещё у Haskell есть две важные особенности:</p>
19 <p><strong>Это не мейнстримный язык.</strong>Для каких-то задач может не быть готового API или другого решения, и поэтому вам придётся самостоятельно писать, например, JSON REST API, чтобы отправлять запросы на какой-то сервис.</p>
19 <p><strong>Это не мейнстримный язык.</strong>Для каких-то задач может не быть готового API или другого решения, и поэтому вам придётся самостоятельно писать, например, JSON REST API, чтобы отправлять запросы на какой-то сервис.</p>
20 <p>Но для большинства задач решения уже существуют - я находил почти всё, что мне было нужно. Есть и готовые решения для взаимодействия с базами данных (той же<a>PostgreSQL</a>), использования сервисов Amazon и Google, библиотеки для работы с сетью, парсинга всех популярных форматов и много чего другого.</p>
20 <p>Но для большинства задач решения уже существуют - я находил почти всё, что мне было нужно. Есть и готовые решения для взаимодействия с базами данных (той же<a>PostgreSQL</a>), использования сервисов Amazon и Google, библиотеки для работы с сетью, парсинга всех популярных форматов и много чего другого.</p>
21 <p><strong>Трудно найти опытных разработчиков.</strong>Немало людей пишут на Haskell, но если вам нужны программисты с опытом, их будет гораздо меньше. К тому же далеко не у всех компаний есть опыт продакшен-разработки на Haskell, поэтому они просто не могут набирать джунов - их некому будет менторить. Поначалу всё равно придётся нанять опытных программистов, которые сформируют базу и наладят процессы.</p>
21 <p><strong>Трудно найти опытных разработчиков.</strong>Немало людей пишут на Haskell, но если вам нужны программисты с опытом, их будет гораздо меньше. К тому же далеко не у всех компаний есть опыт продакшен-разработки на Haskell, поэтому они просто не могут набирать джунов - их некому будет менторить. Поначалу всё равно придётся нанять опытных программистов, которые сформируют базу и наладят процессы.</p>
22 <p>На предыдущей работе у меня произошла интересная история с Haskell. У стартапа был Node.js-сервер, которым занимались десять разработчиков. Они написали 300 тысяч строк кода и 600 тысяч строк тестов. Это такая особенность JavaScript - тестов нужно очень много, поэтому их получилось вдвое больше, чем полезного кода. Но компания не могла платить людям конкурентные зарплаты, поэтому их хантили другие работодатели и JavaScript-разработчиков не хватало.</p>
22 <p>На предыдущей работе у меня произошла интересная история с Haskell. У стартапа был Node.js-сервер, которым занимались десять разработчиков. Они написали 300 тысяч строк кода и 600 тысяч строк тестов. Это такая особенность JavaScript - тестов нужно очень много, поэтому их получилось вдвое больше, чем полезного кода. Но компания не могла платить людям конкурентные зарплаты, поэтому их хантили другие работодатели и JavaScript-разработчиков не хватало.</p>
23 <p>Однако новый техдиректор решил переписать всё на Haskell. Сначала он написал небольшой сервер - и за два года в нём ничего не сломалось. После этого он нанял двух разработчиков (одним из них был я). Вместе мы за полгода переписали весь JS-код на Haskell.</p>
23 <p>Однако новый техдиректор решил переписать всё на Haskell. Сначала он написал небольшой сервер - и за два года в нём ничего не сломалось. После этого он нанял двух разработчиков (одним из них был я). Вместе мы за полгода переписали весь JS-код на Haskell.</p>
24 <p>Когда новый сервер запустили, он работал без багов и ни разу не упал в продакшене. А благодаря статическим типам, компилятору и другим преимуществам Haskell мы очень быстро пилили и выпускали новые фичи.</p>
24 <p>Когда новый сервер запустили, он работал без багов и ни разу не упал в продакшене. А благодаря статическим типам, компилятору и другим преимуществам Haskell мы очень быстро пилили и выпускали новые фичи.</p>
25 <p>В Java тоже есть статическая типизация, но в Haskell система типов по-настоящему мощная. Поверх неё есть несколько плюшек, которые позволяют хорошо смоделировать свой домен и сократить число багов.</p>
25 <p>В Java тоже есть статическая типизация, но в Haskell система типов по-настоящему мощная. Поверх неё есть несколько плюшек, которые позволяют хорошо смоделировать свой домен и сократить число багов.</p>
26 <p>Когда наш CTO встречался с другими стартаперами и рассказывал, как быстро мы добавляем фичи, сколько у нас релизов, и упоминал, что это делает команда из двух человек, ему отвечали: "Ну нет, для таких задач нужно минимум с десяток людей. Не могут двое программистов столько успевать". Просто не верили, что так бывает.</p>
26 <p>Когда наш CTO встречался с другими стартаперами и рассказывал, как быстро мы добавляем фичи, сколько у нас релизов, и упоминал, что это делает команда из двух человек, ему отвечали: "Ну нет, для таких задач нужно минимум с десяток людей. Не могут двое программистов столько успевать". Просто не верили, что так бывает.</p>
27 <p>Но это ещё не всё. Наш сервер стал работать в два раза быстрее, а компания начала неплохо экономить на амазоновском облаке - уже не требовалось столько ресурсов.</p>
27 <p>Но это ещё не всё. Наш сервер стал работать в два раза быстрее, а компания начала неплохо экономить на амазоновском облаке - уже не требовалось столько ресурсов.</p>
28 <p>Я стараюсь поддерживать комьюнити Haskell - веду опенсорсные проекты, курсы, менторю новичков и выступаю на конференциях. Правда, последние полтора года из-за пандемии мероприятия проходят в онлайне.</p>
28 <p>Я стараюсь поддерживать комьюнити Haskell - веду опенсорсные проекты, курсы, менторю новичков и выступаю на конференциях. Правда, последние полтора года из-за пандемии мероприятия проходят в онлайне.</p>
29 <p>По Haskell проводится много конференций - например, академическая<a>ICFP</a>. Но у неё есть проект<a>Haskell Implementors’ Workshop</a>: и вот там уже необязательно быть учёным, чтобы выступать с докладом или понимать, что говорят спикеры.</p>
29 <p>По Haskell проводится много конференций - например, академическая<a>ICFP</a>. Но у неё есть проект<a>Haskell Implementors’ Workshop</a>: и вот там уже необязательно быть учёным, чтобы выступать с докладом или понимать, что говорят спикеры.</p>
30 <p>В 2017 году я ездил на ICFP как зритель, а в 2019-м - уже выступал на <a>YOW! Lambda Jam</a>в Австралии:<a>рассказал</a>про библиотеку логирования, которую мы сделали вместе с подругой в нашей опенсорсной организации.</p>
30 <p>В 2017 году я ездил на ICFP как зритель, а в 2019-м - уже выступал на <a>YOW! Lambda Jam</a>в Австралии:<a>рассказал</a>про библиотеку логирования, которую мы сделали вместе с подругой в нашей опенсорсной организации.</p>
31 <p>Когда конференции перешли в онлайн, я дважды участвовал в <a>Haskell Love</a>. В последний раз рассказывал про<a>библиотеку парсинга TOML</a>, а в прошлом году мы с подругой<a>прочитали доклад</a>про свой самописный<a>статический анализатор Haskell</a>.</p>
31 <p>Когда конференции перешли в онлайн, я дважды участвовал в <a>Haskell Love</a>. В последний раз рассказывал про<a>библиотеку парсинга TOML</a>, а в прошлом году мы с подругой<a>прочитали доклад</a>про свой самописный<a>статический анализатор Haskell</a>.</p>
32 <p>В 2020 году специально для<a>Hacktoberfest</a>мы собрали курс<a>Learn4Haskell</a>. Там есть объяснение материала и упражнения: люди проходили все главы, изучали Haskell, делали четыре пул-реквеста и получали футболку Hacktoberfest. Мероприятие закончилось, но курс всё ещё открыт, его можно пройти в любое время.</p>
32 <p>В 2020 году специально для<a>Hacktoberfest</a>мы собрали курс<a>Learn4Haskell</a>. Там есть объяснение материала и упражнения: люди проходили все главы, изучали Haskell, делали четыре пул-реквеста и получали футболку Hacktoberfest. Мероприятие закончилось, но курс всё ещё открыт, его можно пройти в любое время.</p>
33 <p>Сейчас благодаря онлайну несложно поучаствовать в заграничных митапах. Например, 14 декабря на Functional Fest Online я <a>расскажу</a>про архитектуру бэкенда на Haskell, которую мы придумали на моём предыдущем месте работы. До этого на амстердамском митапе я <a>читал доклад</a>про альтернативную стандартную библиотеку Haskell. Стараюсь максимально участвовать в ивентах - пока хватает сил :)</p>
33 <p>Сейчас благодаря онлайну несложно поучаствовать в заграничных митапах. Например, 14 декабря на Functional Fest Online я <a>расскажу</a>про архитектуру бэкенда на Haskell, которую мы придумали на моём предыдущем месте работы. До этого на амстердамском митапе я <a>читал доклад</a>про альтернативную стандартную библиотеку Haskell. Стараюсь максимально участвовать в ивентах - пока хватает сил :)</p>
34 <p>А ещё у меня есть<a>Kowainik</a> - организация, которую мы основали вместе с подругой: там мы ведём много опенсорсных проектов на Haskell, блог с туториалами и большими гайдами, менторим новичков, помогаем им учиться и контрибьютить в опенсорсные проекты.</p>
34 <p>А ещё у меня есть<a>Kowainik</a> - организация, которую мы основали вместе с подругой: там мы ведём много опенсорсных проектов на Haskell, блог с туториалами и большими гайдами, менторим новичков, помогаем им учиться и контрибьютить в опенсорсные проекты.</p>
35 <p><a>Свой твиттер</a>, проекты и блог я веду на английском, потому что сообщество Haskell распределено по всему миру и так я получаю больше фидбэка. Да, у Haskell есть и русскоязычное комьюнити, но оно довольно маленькое.</p>
35 <p><a>Свой твиттер</a>, проекты и блог я веду на английском, потому что сообщество Haskell распределено по всему миру и так я получаю больше фидбэка. Да, у Haskell есть и русскоязычное комьюнити, но оно довольно маленькое.</p>
36 <p>Кстати, у нас в блоге есть популярный<a>пост про паттерны программирования в Haskell</a>. Он очень понравился читателям - так что если интересуетесь этим языком программирования, очень рекомендую.</p>
36 <p>Кстати, у нас в блоге есть популярный<a>пост про паттерны программирования в Haskell</a>. Он очень понравился читателям - так что если интересуетесь этим языком программирования, очень рекомендую.</p>
37 <ol><li><a>Сайт Kowainik</a> - здесь собраны ссылки на блог, курсы и наши опенсорсные проекты на Haskell.</li>
37 <ol><li><a>Сайт Kowainik</a> - здесь собраны ссылки на блог, курсы и наши опенсорсные проекты на Haskell.</li>
38 <li><a>Наш GitHub-репозиторий</a>со всеми проектами.</li>
38 <li><a>Наш GitHub-репозиторий</a>со всеми проектами.</li>
39 <li><a>Блог про Haskell</a>, где мы делимся опытом.</li>
39 <li><a>Блог про Haskell</a>, где мы делимся опытом.</li>
40 <li><a>Курс Learn4Haskell</a>, который запустили для Hacktoberfest. Но его можно пройти в любое время.</li>
40 <li><a>Курс Learn4Haskell</a>, который запустили для Hacktoberfest. Но его можно пройти в любое время.</li>
41 <li><a>Курс по Haskell</a>, который мы создали в ИТМО с моим другом<a>Арсением Серокой</a>.</li>
41 <li><a>Курс по Haskell</a>, который мы создали в ИТМО с моим другом<a>Арсением Серокой</a>.</li>
42 <li><a>YouTube-плейлист с докладами на конференциях</a> - там есть наши отдельные и совместные выступления с моей подругой<a>Вероникой Ромашкиной</a>.</li>
42 <li><a>YouTube-плейлист с докладами на конференциях</a> - там есть наши отдельные и совместные выступления с моей подругой<a>Вероникой Ромашкиной</a>.</li>
43 <li><a>Bind The Gap</a> - наш с Вероникой журнал про функциональное программирование.</li>
43 <li><a>Bind The Gap</a> - наш с Вероникой журнал про функциональное программирование.</li>
44 </ol><a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>
44 </ol><a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>