Skip to main content
5 человек
в команде
5 месяцев
в работе
Спроектировали и разработали совместно с IOHK децентрализованное приложение на платформе Plutus. Созданный DApp — это один из первых NFT-маркетплейсов на Cardano
Узнать больше

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

abstraction

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

Пишем на языке 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 у нас состоит из двух частей:

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

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

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

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

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

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

Больше интересных статей о Cardano

5_rules
горячее
layer_zero
горячее

Обзор и архитектура протокола LayerZero v2

Роман Ярлыков

Solidity разработчик

Статьи

ethereum
web3
Solana
новое
TON_Mintless_Jettons
новое
L2_Bitcoin
новое
polymarket_article

Что такое Polymarket и как работает рынок предсказаний?

Павел Найданов

Solidity разработчик

Статьи

web3
business
package_solutions
выбор редакции
tapalki
выбор редакции
uma_protocol
выбор редакции
AdsGram
выбор редакции

Способ монетизировать игры в Telegram

Алексей Федин

Исполнительный директор Magnetto.pro

Статьи

web3
mobile
TON
hamster_tma
выбор редакции

Как хомяк, но для трафика: привлекаем аудиторию тапалкой

Николай Бордуненко

Бизнес-аналитик MetaLamp

Статьи

web3
dApps
mobile
dao

Что такое DAO?

Павел Найданов

Solidity разработчик

Статьи

education
web3
ethereum_gas
scroll

Как работает блокчейн Scroll: технический обзор

Алексей Куценко

Solidity разработчик

Статьи

ethereum
web3
dApps
L2
nft_stacking
выбор редакции

Понимание стейкинга NFT: механизмы и преимущества

Павел Найданов

Solidity разработчик

Статьи

ethereum
web3
dApps
legendary_play
выбор редакции
payments
sharding
выбор редакции
ton
выбор редакции
bottle_wine
выбор редакции
launchpad
twa
выбор редакции
buildings
выбор редакции
anonymus

Zero-Knowledge Proofs: важный тренд в блокчейне на 2024 год

Евгений Биктимиров

Венчурный аналитик

Статьи

ethereum
web3
dApps
cpay
AA zksync
zero knowledge proofs
stock market chart
planets
fundraising
cto
wallet
tokens
выбор редакции
rocket computer
выбор редакции

Как создать дизайн для MVP за 7 дней

Юлия Черепанова

Head of Design Office

Статьи

startup
MVP
design
nft
AI
crypto wallets
выбор редакции
red space
выбор редакции
speed up development
myths
выбор редакции
launching
выбор редакции

Кого нанимать для успешного запуска MVP

Алексей Сухарев

Head of Sales Department

Статьи

business
startup
MVP
galaxy
magazine
spaceman
выбор редакции
coffee
investors
nft

Как мы создали первый NFT-маркетплейс на Cardano

Станислав Жданович

Haskell разработчик

Статьи

cardano
web3
nft
stair
выбор редакции
bridge
rocket
abstraction

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

Светлана Дульцева

Супервизор программы обучения

Статьи

education
cardano
web3
mountains
salary
salary increase
app
developer with books
keyboard
abstract
blockchain