Как мы нанимаем Plutus-инженеров через собственную программу обучения

Блокчейн Cardano использует собственный функциональный язык для написания смарт-контрактов Plutus Core, основанный на Haskell. Разработчики Haskell на рынке — редкие птицы, а знакомые с надстройкой Plutus — и вовсе вроде кота-манула: о них много говорят, но мало кто видел. Планируя развивать направление блокчейн-разработки, мы решили обучить языку Plutus каждого бэкендера в компании, включая стажёров, которые только готовятся стать частью команды Metalamp. Делимся своим опытом.

Как мы нанимаем Plutus-инженеров через собственную программу обучения

Пишем на языке Haskell

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

Haskell не так популярен, как JavaScript, Python, Elixir или C/C++/C# — языки, которые мы сами много использовали в разработке, — он занимает 27-е место в «Индексе популярности языков программирования» по состоянию на июнь 2022. Но у него есть безусловные преимущества перед остальными. Самым важным для нас всегда было добиться максимальной читаемости и недвусмысленности функции, — чтобы любой мог зайти в кодовую базу и понять, что там происходит. А так как мы работали с финтехом и высоконагруженными системами, ещё двумя приоритетными задачами стало снизить вероятность ошибок и сделать надёжность кода независимой от конкретного разработчика и его когнитивной нагрузки. Haskell, чистый функциональный язык, позволил нам делать и то, и другое. Вот особенности Haskell, которые открыли ему путь к нашим сердцам и ПО:

  • Качество, практичность, скорость. А ещё предельная выразительность языка и его гибкость (например, операторы можно использовать как в инфиксной, так и в префиксной записи, а также определять свои);
  • Лёгкость рефакторинга. Любой долгоиграющий проект предполагает рефакторинг; написание нового функционала — это лишь 10-15% процесса разработки, остальное — либо дополнение существующих частей, либо рефакторинг ошибок в проектировании;
  • Гибкость и комбинаторность. Haskell предлагает формальные абстракции (функторы и монады), которые легко комбинируются и позволяют описать разного рода взаимосвязи между частями программы, правильность написания которых проверяет компилятор;
  • У Haskell есть набор инструментов для параллельного программирования, который поддерживают почти все популярные редакторы кода;
  • Мощная качественная библиотека и использование пакетов Haskell позволяет создавать коммерческий софт, чётко отделять чистые части программы от частей с сайд-эффектами и при этом не писать заново то, что уже написано до нас: содержимое модулей библиотеки автоматически импортируется во все модули нашего проекта.

Мы понимаем, что Haskell — не чудесный единорог, но готовы принять его недостатки, — такие, как высокий порог входа и отсутствие единой инструкции с best practices и удовлетворительных IDE. Haskell позволяет писать чистый функциональный код, — то есть делать то, к чему в принципе стремится каждый разработчик. Многие наши коллеги по цеху сходятся на том, что Haskell глобально изменил их видение программирования и подход к использованию других языков, а также позволил развить свои навыки в написании кода.

Обучаем талантливых Haskell-инженеров

Наша компания возникла в 2014 году из студенческого проекта. Поначалу у нас не было денег ангажировать новых дорогих специалистов, поэтому мы запустили бесплатную образовательную программу по двум направлениям — backend и frontend — которая предоставляет всем желающим открытые ресурсы для изучения и возможность быть принятым в штат после успешного прохождения практических и теоретических испытаний. На этих двух направлениях мы стали растить собственных специалистов по Haskell и Javascript.

Изучению Haskell как раз-таки посвящена программа для бэкендеров. Обучение предполагает 80% самостоятельной работы новичка (мы не делаем вид, что не знакомы со стажёрами, а отвечаем на все их вопросы и проводим экспертную оценку, но никак не мотивируем и не инициируем прохождение ими программы до победного конца, потому что ждём энтузиазма от самих учеников), и только 20% занимают командная подготовка (прокачивание soft skills для лучшей адаптации) и ревью ученических проектов. Первые два этапа стажёры посвящают изучению теории, два следующих — выполнению практических заданий, а в финале проходят трёхэтапный рефакторинг готового проекта, получая обратную связь от штатных разработчиков. Мы даём фундаментальные знания о языке и ценим инженерный, качественный подход к делу — поэтому, хотя стажёры по факту ещё находятся в «песочнице», правила игры максимально приближены к взрослой жизни: финальный ученический проект сопровождают реалистичные требования к объёму, гибкие переменные техзадания и жёсткий дедлайн. По этой же причине рефакторинг проходит в три этапа — так мы добиваемся максимально удовлетворительного качества результата работы стажёра.

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

На втором этапе замечания делают ревьюеры, работающие у нас не менее полугода, и имеющие коммерческий опыт; на последнем этапе проверку проводят мидлы. Middle оценивает общую архитектуру проекта, делая концептуальные замечания. Весь процесс рефакторинга можно сравнить с проверкой сочинения учителем по русскому языку, — с той разницей, что у нас это делают три разных человека: первый этап — проверка на орфографические ошибки (в нашем случае — на соответствие best practices), второй — проверка на синтаксис, а на третьем этапе проверяется непосредственно концепция проекта. После исправления ошибок по замечаниям ревьюеров, стажёр проходит собеседование. На практике до этого этапа обычно добираются самые сильные и целеустремлённые — 1 из 500 подавших заявку на обучение. Так мы 100% уверены, что с нами будут работать те, кто владеет теорией, имеет практический опыт и знает достаточно, чтобы сразу встать на проект.

Сотрудничаем с Cardano

Первый проект, который мы сделали на Haskell, был наш собственный стартап Ptichka.moscow (срочные курьерские доставки по Москве). Запустив его, мы стали искать заказчиков, готовых отдать Haskell-проекты на аутсорс, и столкнулись с любопытной реальностью: большинство запросов на Haskell приходят с рынка блокчейна. Согласно отчёту MarketsandMarkets, размер мирового рынка блокчейнов в 2021 году оценивался в $4,9 миллиардов и к 2026 году ожидаемо достигнет $67,4 миллиардов при совокупном годовом темпе роста в 68,4% в течение прогнозируемого периода. Скорость роста рынка блокчейнов связана не только с увеличением популярности криптовалют, но и с растущим количеством правительственных инициатив, а также с разработкой и использованием децентрализованных приложений для платежей, смарт-контрактов, отслеживания цепочек поставок, цифровых удостоверений и т.п. Оценив перспективы блокчейнизации, мы поняли, что не хотим оставаться в стороне.

Haskell, как уже было сказано, служит основой для Plutus Core, — языка смарт-контрактов Cardano. Haskell роднит с Cardano академический, или научно-исследовательский подход к программированию и математическая проверка кода в разработке любого продукта. В Cardano Foundation говорят, что выбрали Haskell потому, что он гарантирует правильность выполнения операций с данными, заставляет писать чистый код, который невозможно неверно понять и помогает защитить блокчейн с открытым исходным кодом на интернет-платформах.

Благодаря наличию в анамнезе Haskell IOG пригласил нас поучаствовать в тестировании смарт-контрактов Cardano, и Plutus мы изучали уже в процессе работы над этой задачей. Это не было эргономичным решением, потому что мы не знали наверняка, сколько времени займёт у конкретного члена команды освоение языка и когда он будет готов приступить к работе. Тогда мы решили воспитать Бабу-ягу в своём коллективе включили обучение языку Plutus в свою образовательную программу для бэкендеров, чтобы при трудоустройстве в штат прокачанные на Haskell джуны сразу вставали на блокчейн-проекты.

Работаем с Plutus Pioneer Program

Программа обучения Plutus у нас состоит из двух частей:

  • Курс лекций, которые разработали сами IOG в рамках программы Plutus Pioneer, — официального проекта по обучению разработчиков языку экосистемы Cardano от создателей. Ребята смотрят видеоролики (они также доступны в текстовом формате), изучают код, выполняют тренировочные задания и участвуют в сессиях вопросов и ответов, пользуясь возможностью общения с основателями и экспертами по языку. Из-за высокого порога входа в Plutus создатели рекомендуют слушателям заранее получить опыт программирования в функциональном стиле или предварительное знание Haskell, а также иметь развитые логическое и математическое мышления.

Курс Plutus Pioneer предполагает, что слушатель будет посвящать ему 10 часов своего времени в неделю. Программа включает изучение таких строительных основ Haskell и Plutus, как функции и типы данных, монады, конечные автоматы (state machines), использование Plutus Playground, работа с Plutus ончейн и оффчейн, EUTxO, PAF и PAB.

  • Практические упражнения, которые подготовила наша команда. Мы решили докомплектовать готовые кейсы от IOG заданиями, для которых наши разработчики будут сами искать и с нуля писать решения — например, реализовать NFT-маркетплейс, создать Faucet-приложение и т.п. Цель этой практики — закрепить теорию и убедиться, что разработчик действительно понимает изученный материал.

Все задачи обязательны к выполнению; а если у кого-то возникли сложности, он может обратиться к ментору за помощью (менторами становятся ребята — в недавнем прошлом сами выпускники нашей программы, которые сейчас трудятся над проектами на Cardano). Также традиционно для каждого этапа программы обучения у нас есть свой чат; Plutus — не исключение. В чате Plutus Study сложилось собственное комьюнити, в котором обсуждаются трудности, связанные с изучением теории или решением практических задач, — например, с запуском проекта в тестовой сети. Чаты отлично помогают поддерживать связь между членами команды, раскиданными по разным географическим широтам, делиться опытом с коллегами и легче вливаться в новую область знаний.

Блокчейн медленно, но верно входит в нашу жизнь; популярность DeFi и смарт-контрактов растёт, и платформы, обеспечивающие соответствующие решения, активно развиваются. Cardano — это имплементация блокчейна на Haskell, языке, который давно стал нашим любимчиком благодаря своей чистоте и функциональности. Используя библиотеку Haskell можно запускать смарт-контракты и создавать безопасные dApps в полностью предсказуемой среде на платформе Plutus. Мы обучаем языку Plutus Core всех наших разработчиков, — в том числе тех, кто только готовится стать членом команды, потому что нам близка философия блокчейна и мы хотим развивать сотрудничество с экосистемой Cardano в длительной перспективе.

Надеемся, что наши best practices будут интересны и полезны тем, кто неравнодушен к Cardano, а также работает с перспективными джунами и стажёрами.

13
Начать дискуссию