Карьера в IT: должность Blockchain-разработчик
Продолжаем серию «Карьера в IT»: на этот раз поговорим о разработке технологий Blockchain. Об этой предметной области нам рассказали специалисты из компаний BlockSoftLab, Dev-Pro и Titanium.
Особенности направления
Blockchain — это непрерывный последовательный связный список, построенный по определенным правилам. При этом копии таких цепочек блоков, как правило, хранятся на множестве разных компьютеров независимо друг от друга. Впервые эту технологию использовали в криптовалютах, но сфер применения много: финтех, банки, удостоверение личности, любого рода мониторинги достоверности данных.
Соответственно, Blockchain-разработчик создает программные приложения, которые будут выполняться узлами, входящими в цепочку блоков. Также он настраивает взаимодействие «классического» программного обеспечения, или DApp (Distributed application), с этими приложениями.
Судьба конкретного кода зависит от типа блокчейна, с которым необходимо взаимодействовать. Например, язык скриптов, который поддерживает Bitcoin, сильно ограничивает максимально допустимую сложность реализуемых алгоритмов. А потому по дружественности к программисту он скорее напоминает ассемблер, чем язык высокого уровня. Поэтому в таких случаях с помощью Blockchain фиксируют результаты работы клиентских программ и арбитраж между ними.
В то же время технология Ethereum позволяет реализовывать достаточно сложные алгоритмы и смарт-контракты, написанные на высокоуровневом языке Solidity. Он поддерживает принципы ООП и позволяет решать существенные вычислительные задачи, хотя максимальная сложность реализуемых алгоритмов остается ограниченной.
«Так как Blockchain-разработка имеет очень много ограничений, связанных с природой технологий, нам приходится постоянно объяснять заказчикам, что некоторый функционал не может работать так, как они предполагают» (Алекс Кучер, CTO Titanium).
Высокая стоимость ошибок и уязвимостей требует навыков программиста в области кибербезопасности. Также Blockchain-разработчику важно максимально оптимизировать код.
«Работа Blockchain-разработчика отчасти похожа на работу системного программиста. Необходимо „выдавать“ оптимизированный код как по количеству операций, так и по используемому объему памяти. Соответственно, необходимо хорошо изучить, как работает Blockchain „под капотом“, чтобы при оптимизации учитывать не только количество операций, но и особенности их реализации на низком уровне» (Blockchain Developer в BlockSoftLab).
Задачи и обязанности
Главная задача Blockchain-разработчика — разработка цифровых «соглашений» (смарт-контрактов). Условия в них описываются программно, а полученный смарт-контракт располагается в цепочке блоков. Это предотвращает вмешательство в его работу или изменение его содержания. А значит, отвергается и возможность отклонения от правил, заложенных в «соглашении».
Предметная область продуктов зависит от направления проекта. К примеру, это может быть:
- ПО для упрощения процесса взаимодействия пользователей с Blockchain;
- доверенные арбитры в тендерах, где требуется исключить влияние человеческого фактора на выбор победителя;
- программы для обеспечения прозрачности систем электронного управления или благотворительных фондов;
- программы для поддержки расчетов на основе криптовалют;
- экспертиза безопасности сторонних смарт-контрактов;
- компьютерные игры.
«Кроме непосредственно смарт-контрактов мы также разрабатываем веб-страницы или мобильные приложения, через которые будет происходить взаимодействие с Blockchain. Для этого используем JavaScript, Java и Swift» (Игорь Ермаков, Blockchain Engineer в Dev-Pro).
Типичный рабочий день Blockchain-разработчика проходит по-разному в зависимости от этапа разработки продукта.
«На этапе проектирования большая часть времени у меня уходит на разработку архитектуры, участие в „мозговых штурмах“, определении инструментов и техник разработки, выделении и распределении задач. На этапе разработки6-7 часов в8-часовом рабочем дне занимает программирование. В оставшееся время я исследую новые технологии, участвую с командой в митингах, посещаю образовательные семинары. Во время тестирования мы создаем юнит-тесты для смарт-контракта и занимаемся мануальным тестированием интерфейса взаимодействия» (Blockchain Developer в BlockSoftLab).
Принцип работы технологии Blockchain (image source)
Преимущества и недостатки
В профессиональном развитии Blockchain-разработчиков вдохновляют возможности, которые открывает технология.
«Каждый человек в какой-то момент жизни хочет заниматься чем-то полезным для общества и чувствовать вовлеченность в его развитие. Инструментарий, который можно разработать с помощью технологии Blockchain, способствует созданию гражданского общества и прозрачности власти, в том числе и в Украине, а также прозрачности сделок во взаимодействии людей друг с другом. Причем если в классических сделках некоторые вещи можно трактовать двусмысленно, то в программировании смарт-контрактов такие неоднозначности отсутствуют» (Blockchain Developer в BlockSoftLab).
«Привлекает прозрачность и неизменяемость данных. При открытом исходном коде и полном доступе к серверу, на котором он выполняется, его не взломать. Конечно, при условии, что программист не допустит ошибку» (Игорь Ермаков, Blockchain Engineer в Dev-Pro).
«Блокчейн предполагает собой обещание децентрализованного будущего, где не будет игроков, которые будут контролировать большую часть чего-либо. Эта специализация молодая, но многообещающая. Мне интересно, в какую сторону будет развиваться эта технология и что можно будет оптимизировать и децентрализовать с ее помощью» (Алекс Кучер, CTO Titanium).
Среди недостатков — незрелость технологии и высокая цена ошибки.
«Пока что основной минус — молодость технологий и инструментов. Значительная их часть еще даже не дошла до продакшена и находится в фазах тестирования. Во-первых, это порождает наличие ошибок в архитектурах продуктов. Во-вторых, из-за периодических изменений в инструментах учебный материал или инструкция к какой-то библиотеке часто совсем не соответствует фактическому положению вещей. Это повышает стресс во время разработки и ставит под угрозу сроки выполнения задания.
Также разработка требует постоянного внимания к требованиям ИБ. В случае с Blockchain продукт уже невозможно будет изменить после запуска. А значит, не получится и исправить ошибку или ликвидировать уязвимость патчем» (Blockchain Developer в BlockSoftLab).
«Поскольку технология молода, инструменты, которые используются для ее разработки, еще не полностью отлажены. Поэтому иногда могут возникать проблемы, пути решения которых не очевидны. Также, поскольку не все заказчики понимают лимитированность и специфичность этой технологии, иногда бывает трудно объяснить, почему она работает так или иначе» (Алекс Кучер, CTO Titanium).
«Пожалуй, недостаток заключается в том, что полученные навыки сложно или невозможно применить в других сферах» (Игорь Ермаков, Blockchain Engineer в Dev-Pro).
Как стать Blockchain-разработчиком
Для работы с Blockchain нужно знание какого-либо типизированного языка программирования. А также — навыки в области защиты информации, понимание принципов ООП, структур данных, знание основных шаблонов проектирования, опыт оптимизации и рефакторинга собственного кода. Кроме этого окажутся полезными навыки веб-программирования, так как у программ, взаимодействующих с Blockchain, чаще всего веб-интерфейс. Будет плюсом понимание асимметричной криптографии на основе эллиптических кривых.
Разобраться с сутью технологии Blockchain поможет статья «Bitcoin: A Peer-to-Peer Electronic Cash System» by Satoshi Nakamoto, а также работы Nick Szabo: «Advances in Distributed Security» и «Formalizing and Securing Relationships on Public Networks». О «криптовалютной» стороне технологии можно почитать «Cryptocash, cryptocurrencies, and cryptocontracts» by Neal Koblitz and Alfred Menezes.
«Как стать Blockchain-разработчиком? Прежде всего, выберите платформу, под которую интересно разрабатывать (EOS, Ethereum, Neo, Nem). Затем почитайте White Paper, Yellow Paper выбранной платформы, разберитесь, как в ней работают смарт-контракты (для Ethereum, например, разобраться с EVM). Наконец, изучите язык программирования под выбранную платформу (например, для Ethereum — Solidity, для EOS — C++)» (Игорь Ермаков, Blockchain Engineer в Dev-Pro).
«Я советую начать с Solidity — языка программирования для Ethereum. Напишите тестовый проект, который будет содержать код на Blockchain и подключение к нему через какую-нибудь веб-страницу. Что касается источников информации, я советую изучить подборки The Crowdsourced Ethereum Reading List и Crypto Canon» (Алекс Кучер, CTO Titanium).
«Рекомендую читать техническую документацию той технологии Blockchain, под которую предполагается разработка. Например, для разработки под Bitcoin необходимо изучить документацию и следить за перечнем изменений в технологии. Для разработки под Ethereum есть мощный справочный ресурс по используемому там языку смарт-контрактов. Следить за новинками и учебными материалами помогут группы и каналы в мессенджерах. Я читаю Solidity Club и Cryptology Club» (Blockchain Developer в BlockSoftLab).