Интересно, как много программистов и разработчиков открыли для себя data science или data engineering, и строят успешную карьеру в области больших данных. Илья Маркин, Software engineer в Directual, — как раз один из разработчиков, перешедших в data engineering. Поговорили об опыте в роли тимлида, любимом инструменте в data engineering, Илья рассказал о конференциях и интересных профильных каналах джавистов, о Directual с пользовательской стороны и технической, о компьютерных играх и пр.
— Илья, спасибо, что нашел время встретиться. Поздравляю и с относительно недавним переходом в новую компанию, и с рождением дочки, хлопот и забот у тебя сейчас много. Сразу же первый вопрос: чем таким интересным тебе предложили заниматься в Directual, что ты ушел из DCA?
— Наверное, прежде надо рассказать, чем я в DCA занимался. В DCA (Data-Centric Alliance) я попал после прохождения программы «Специалист по большим данным». В тот момент я активно интересовался темой big data и понял, что это именно та область, в которой я хочу развиваться. Ведь там, где много данных, интересных инженерных проблем, которые необходимо решать, тоже предостаточно. Программа помогла мне довольно быстро погрузиться в экосистему мира биг дата, там я получил необходимые начальные знания о Hadoop, YARN, парадигме Map-Reduce, HBase, Spark, Flink, и многом другом, и о том, как это работает под высокой нагрузкой.
Меня пригласили на собеседование ребята из DCA. DCA – крупный участник рынка RTB (Real Time Bidding – рекламная технология, которая позволяет организовать аукцион между продавцами и покупателями рекламы в реальном времени. Объектом торга на онлайн-аукционе является право показа объявления конкретному пользователю. В основе RTB заложена максимальная точность отбора целевого посетителя — прим. ред.). У DCA было высокое покрытие пользователей рунета: порядка 600 млн. кук, кука не равна пользователю — у одного пользователя может быть много кук: разные браузеры, разные устройства. В сутки мы получали десятки терабайт данных о посещениях интернет-страниц. Все это обрабатывалось и кука размечалась в определенный набор сегментов. Таким образом мы могли определить, например, любителей котиков от 20 до 25 лет живущих в Москве, для того, чтобы в дальнейшем предложить им приобрести корм для любимой кошки рядом с домом. И таких примеров много, есть совсем простые, есть сложные. Под капотом было много java, scala и C++. В компанию я пришел разработчиком, а спустя полгода стал тимлидом.
DCA уже нет, я ушел оттуда в конце весны, к тому моменту устал от менеджерской нагрузки и начал смотреть технические позиции. Получалось так, что я мог неделю не писать код. Мы собирались с командой, обсуждали интересные решения, архитектуру продумывали, расписывали задачи. Когда я брал себе что-то из списка, то иногда не успевал выполнить задачу, потому что было много тимлидовых дел. Может, проблема во мне, и я не смог правильно время распределить.
И все же я приобрел полезный опыт. Во-первых, работа с командой и с бизнесом: интересно быть на стыке разработки и бизнеса, когда тебе поступает запрос о реализации какой-то функциональности, ты думаешь, оцениваешь возможности. Часто приходится принимать решение, что будет полезнее в данной конкретной ситуации: написать что-то быстро “на коленке” или потратить 2 недели, а то и больше, но выдать стабильно работающее, нормальное решение.
— И какие решения чаще всего выбирались – “на коленке” или за 2 недели?
— Разработчик в глубине души всегда перфекционист, он может бесконечно заниматься какой-нибудь интересной задачей, переделывать ее, оптимизировать. Конечно, нужно знать, когда остановиться. Выбирались решения, которые были где-то посередине.
Во-вторых, я, наконец, был на позиции, когда можно участвовать в принятии решений, быть в курсе того, что происходит в компании. Мне не нравится просто сидеть и кодить в своей коробке, хочется знать, что происходит с продуктом, как он себя показывает, как реагируют пользователи.
В-третьих, я начал проводить собеседования, побывал “по ту сторону баррикад”, так сказать. Первое собеседование было очень волнительно проводить, читал резюме и думал: «Блин, сейчас звезда придет, а я даже половины того, о чем он написал, не знаю. О чем я с ним вообще буду говорить». А в процессе общения отрезвляешься и понимаешь, почему спрос на рынке IT-кадров превышает предложение. Хорошего специалиста найти сложно, чаще всего он сидит там, где его все устраивает. Готового специалиста под твои конкретные задачи и технологии, которого не нужно будет доучивать/переучивать, найти вообще нереально, приходится подключать связи, спрашивать у друзей, знакомых, коллег. Нетворкинг здесь очень важен. Так, например, я привел в компанию своего друга, в котором был уверен и с которым работал ранее на предыдущем месте. Также взяли недавнего выпускника ВУЗа, у которого было мало опыта работы с нашим стеком, но во время интервью я понял, что он очень перспективный парень.
Часто люди работают с фреймворками, а не с конкретными инструментами, я считаю, это сейчас проблема. Приходит кандидат с двухлетним опытом Hadoop-Big Data-разработчика, ты начинаешь спрашивать, как работает Hadoop, из каких частей он состоит, а человек не знает. Поскольку Hadoop предоставляет определенные интерфейсы для упрощения работы с ним, этого бывает достаточно для определенного круга задач. И часто человек даже не выходит за рамки этих интерфейсов, то есть код у него получается от сих до сих. А что происходит с запакованным кодом после того, как он отправил его в систему, человека уже и не волнует. Многим этого достаточно, глубже не хотят разбираться. Проведение интервью – отличный опыт не только найма, это дает еще уверенность в себе как специалисте, что очень полезно.
Почему Directual. Когда я был координатором на программе «Data Engineer», то к нам приходили выступать Артём Маринов и Вася Сафронов из Directual. Артём, кстати, в свое время собеседовал меня в DCA (снова о пользе нетворкинга), и сейчас пригласил пообщаться. Им нужен был скалист, но готовы были рассмотреть и джависта, который понимает, как работает jvm под капотом. Так я и оказался здесь.
— Чем же таким интересным тебе предложили заниматься в Directual? Что тебя привлекло?
— Directual — это амбициозный стартап, который воплощает в жизнь все заявленные проекты, то есть делает то, что обещает. Мне было приятно стать частью команды и принять активное участие во всех реализациях. И для меня было важно, что компания окупает себя сама за счет работы с клиентами, а не живет на деньги инвесторов.
Я немного расскажу про проект и со стороны пользователя, и со стороны бэка.
Лозунг Directual — «Let people create!». Именно это и является основной идеей — дать возможность любому человеку, у которого нет знаний и опыта в написании кода, программировать в нашем визуальном редакторе.
Как это работает: пользователь через браузер в нашей платформе может «накидать кубики» (читай — функциональные узлы какого-либо процесса) — то есть собрать сценарий, по которому будут обрабатываться входящие данные. Данные могут быть совершенно любыми. Обработанные данные на выходе могут иметь различное представление — от отчета в PDF до отправки уведомления нескольким администраторам. Проще говоря, любой бизнес-процесс можно запрограммировать за считанные минуты, при этом не умея писать код. Компания работает по двум направлениям — коробочные решения для корпоративных клиентов, а также облачный вариант для широкого круга пользователей.
Для того, чтобы было понятнее, как это работает, приведу несколько примеров.
В любом интернет-магазине есть ряд функциональных этапов (“кубиков” в нашем случае) — от показа товара клиенту до добавления в корзину и оформления доставки конечному потребителю. С помощью платформы мы можем собирать и анализировать данные: частоту покупок, время их совершения, путь пользователя, и тд., что позволит нам более плотно взаимодействовать с покупателями (например, разрабатывать сезонные предложения, индивидуальные скидки). Однако это ни в коем случае не означает, что наша платформа — конструктор по созданию интернет-магазинов!
Directual отлично справляется как с автоматизацией процессов логистики и работы hr-направления крупных компаний, так и с созданием любого другого технологичного решения — от фермы по выращиванию зелени до умного дома. На платформе, например, можно в несколько кликов создать телеграм-бота — у нас почти у каждого сотрудника, который пишет ядро системы, есть свой бот. Кто-то сделал помощника-библиотекаря, кто-то — бота, который помогает учить английские слова.
Мы отчасти «отбираем» работу у некоторых программистов, ведь теперь нет необходимости обращаться к ним за помощью, готовить ТЗ, проверять выполнение работы. Сейчас достаточно только знать, как должен работать твой бизнес, надо понимать сами процессы, остальное же делаем мы.
— Слушай, но софт для фермы по выращиванию зелени, например, уже давно есть. Чем вы отличаетесь?
— Да, это правда, конкретные решения для ферм по производству зелени существуют. Однако, ты этот софт сам не разрабатываешь, ты покупаешь уже готовое решение. С помощью нашей платформы ты можешь сам кастомизировать софт под себя, под свой бизнес и свои задачи, тебе не нужно нанимать разработчиков.
— И чем же конкретно ты занимаешься?
— Компания разделена на 2 части: разработка ядра нашей системы и проектный офис, который, по сути, является нашим нулевым заказчиком, если так можно сказать. Я занимаюсь разработкой ядра системы.
Как я уже сказал, мы хотим дать возможность любому человеку работать на нашей платформе. Ради этого мы работаем над своим облаком. И здесь есть много проблем. В чем тут сложность: например, есть 10 тысяч пользователей, у них несколько сценариев потока данных, и в каждом потоке по 10-20 кубиков-ответвлений. Представь, какая нагрузка на железо. А нам нужно уметь все четко разграничивать, чтобы процессы одного клиента не мешали процессам другого, не тормозили работу. Если у одного клиента возникнет какая-то проблема, которую нам необходимо решить, то мы не должны при этом задевать работу другого клиента.
Поскольку пользователю не надо думать, как это все работает под капотом, он свободен и от выбора хранилища. Мы поддерживаем разные базы данных — это могут быть и реляционные БД и NoSql. В целом, система ведет себя на них одинаково. Но клиенту не надо об этом думать – при создании аккаунта, в зависимости от задач, система поможет сделать оптимальный выбор хранилища.
Наша платформа — хороший пример высоконагруженной распределенной системы, и моя задача писать хороший код, чтобы все это безотказно работало. В итоге здесь я получил, что хотел: я работаю с теми инструментами, которые мне интересны.
— А как ты пришел в область работы с данными?
— На своем первом месте работы я в основном занимался однотипными задачами в довольно узком сегменте (читай — парсил xml :)), и это мне быстро разонравилось. Я начал слушать подкасты, понял, какой большой мир вокруг, столько технологий, о которых все вокруг говорят — Hadoop, Big Data, Kafka. Тогда понял, что надо учиться, и очень кстати подвернулась программа «Специалист по большим данным». Как оказалось, я не прогадал: первый модуль (обработка и анализ веб-логов: MapReduce, Hadoop, Machine Learning, DMP-системы – прим. автора) мне был очень полезен, я именно это хотел изучить, а вот второй модуль про рекомендательные системы я просто не знал, куда применить, я этого никогда не касался. И потом я пошел в DCA, чтобы уже работать с тем, что мне интересно. Там коллега мне сказал, что помимо data-scientist’a, в этой области есть еще и data engineer, рассказал, кто он такой и чем может быть полезен компании.
После этого вы как раз объявили о пилотном запуске программы «Data Engineer», конечно, я решил пойти. Часть продуктов, которые были на программе, я уже знал, но для меня это было хорошим обзором инструментов, структурировало все в голове, окончательно понял, с чем должен работать data engineer.
— Но большинство компаний не разделяет эти две должности, два профессиональных профиля человека, пытаются искать универсальных специалистов, которые и данные соберут, и подготовят их, и модель сделают, и под highload’ом в прод выведут. Как ты думаешь, с чем это связано, и насколько это правильно?
— Мне очень понравилось выступление на программе «Специалист по большим данным» Павла Клеменкова (тогда еще в Rambler&Co работал), он рассказывал про ML-Pipeline и упомянул про программистов-математиков. Он говорил как раз про таких универсальных специалистов, что они есть, их немного, и они очень дорогие. Поэтому Rambler&Co старается развивать их у себя, искать сильных ребят. Таких специалистов правда сложно найти.
Я считаю, что, если у вас действительно много данных и вам с ними нужна скрупулезная работа (а не просто предсказать пол и возраст человека или повысить вероятность клика, например), то это должны быть два разных человека. Тут действует правило 20/80: data scientist – это 80% data science, 20% — он что-то может написать и вывести в прод, а data engineer – 80% software engineer и 20% он знает, что такое модели, как их применять и как что считать, без углубления в математику.
— Расскажи о самом важном для тебя открытии в data science data engineering? Может, использование какого-то инструмента алгоритма в корне поменяло твой подход к решению задач?
— Наверное то, что, имея достаточное количество данных, можно извлечь много полезной информации для своих будущих действий. Даже если порой ты и не знаешь, что из себя представляют эти сырые обезличенные данные, ты все равно можешь что-то сделать на их основе: на группы разбить, найти какие-то особенности, просто математическими методами на цифрах вывести какие-то закономерности. Правда, аналитики и раньше тоже могли такое делать, но факт, что сейчас это стало более доступно, увеличились мощности железа – это круто! Порог входа в data science сейчас снизился, можно не так много знать, чтобы уже попробовать на каких-то инструментах что-то поделать.
— Какой был самый большой фэйл по работе? Какой урок ты вынес из этого?
— Наверное, расстрою тебя, у меня еще такого не было, может, впереди. Я честно думал, вспоминал, но ничего такого не было, очень скучно. Это как у администраторов: если ты не “ронял прод”, не “затер базу”, ты не настоящий администратор. Вот, наверное, я не настоящий разработчик.
— Какие инструменты data engineering’а ты используешь чаще всего и почему? Какой твой самый любимый инструмент?
— Очень нравится Apache Kafka. Крутой инструмент как с точки зрения функциональности, которую он предоставляет, так и с инженерной. Специфика работы Kafka заключается в тесной взаимосвязи программного кода и операционной системы, на которой она работает — Linux (читаем — “работает быстро и хорошо”). То есть там используются различные нативные функции linux-a, которые позволяют получить отличную производительность даже на слабом железе. Я считаю, что в нашей области так и должно быть — недостаточно просто знать язык программирования и пару фреймворков для него. Если хочешь создать что-то действительно крутое, чем будет приятно пользоваться не только тебе, но и другим, то нужно копать глубже и знать, как твой код работает в системе, на железе.
— На какие конференции ты ходишь? Какие профильные колонки блоги тг каналы читаешь?
— Как я уже сказал, все началось с подкастов, а именно с «Разбор полетов» — от ребят из мира java.
Есть еще https://radio-t.com — классный русскоязычный подкаст на темы высоких и it-технологий, один из самых популярных (если не ошибаюсь) на нашем языке.
Слежу за новостями от JUG.ru, ребята делают крутые хардкорные конференции, устраивают митапы. Я стараюсь ходить на те, что в Москве, в Питере тоже проводят. Топовая java-конференция – Jpoint в Москве (она же Joker в Питере), на Jpoint всегда хожу или смотрю онлайн.
Смотрю, что делают Confluent – ребята, которые зарабатывают на корпоративной поддержке для kafka и являются основными коммитерами в нее. Так же разрабатывают удобные инструменты вокруг Apache Kafka в opensource. Стараюсь пользоваться их версиями.
Техноблог Netflix на медиуме — крутой ресурс о решениях одной из крупнейших платформ для доставки видеоконтента пользователю. Highload и распределенные системы по самое “не хочу”)
Каналы в телеграме: https://t.me/hadoopusers — место, где на нашем языке можно пообщаться на data-engineering-овые темы; https://t.me/jvmchat — люди java мира, обсуждают его проблемы, свои проблемы и не только.
— Может, что-то еще для души?
— Я вырос на компьютерных играх, когда-то очень активно играл, сейчас на это особо времени нет. И в какой-то момент я подумал: «Раз я не могу играть в игры, то что мне мешает изучать эту область?» И если вдруг выдается свободное время, я беру какой-нибудь фреймворк на java, C# или C++, который может игры писать, и что-то делаю. Все это редко доходит до конечного продукта, но удовольствие получаю. Поэтому в списке моих подкастов есть и еще и тот, где рассказывается о создании игр — “Как делают игры” — хороший профессиональный подкаст не о том, как “закодить свою супер-мега-топовую игру”, а именно о процессе производства игры: как работает звукорежиссер, чем занимается гейм-дизайнер, особенности работы 2D/3D-художников, об их процессах, инструментах, как развивать игру, как ее продвигать. Этой весной впервые был на игровой конференции, было очень прикольно: не то, чтобы я себя не в своей тарелке чувствовал, но это оказался совершенно другой мир, мне понравилось. Рад был узнать, что в игровом мире тоже активно интересуются биг датой. В разговорах на эти темы я себя чувствовал очень уверенно.
Блиц-опрос:
— Java или Python?
— Java, конечно.
— Data Science или Data Engineering?
— Data Engineering
— Исполнитель или менеджер?
— It depends, но пока, скорее, исполнитель.
— Семья или карьера?
— Какое-то время назад была карьера, а сейчас семья.
— Готовить дома или пойти в ресторан?
— Я люблю вкусно поесть. Мне кажется, я хорошо готовлю, но случается это редко. Поэтому, наверное, пойти в ресторан.
Автор: elena_newprolab