Продолжаем рассказывать о проектах лаборатории тренинг-центра EPAM. На этот раз мы взяли интервью у senior-разработчика Марии Несвит, техлида проекта CROMWELL в лаборатории тренинг-центра в Санкт-Петербурге. А также поговорили со студентами лаборатории, которые поделились взглядом «изнутри» об участии в проекте и подробностями изучения Scala.
Что такое тренинг-центр и чем занимаются в его лаборатории?
Тренинг-центр EPAM – это подразделение компании, ответственное за подготовку начинающих IT-специалистов. Большинство junior-специалистов приходят в компанию через обучение в тренинг-центре.
Для того, чтобы приступить к работе, нужно не только обладать техническими знаниями, но и иметь опыт работы с инструментами, которые используются для разработки, знать основные процессы работы на проекте. Сначала студенты посещают тренинги, на которых знакомятся с теорией, а затем попадают в лабораторию, где получают практический опыт, работая над своими учебными проектами.
Подробнее про обучение в лаборатории тренинг-центра, мы уже рассказывали в одном из предыдущих материалов. Сегодня предлагаем познакомиться со студенческим проектом CROMWELL в Санкт-Петербурге.
О проекте CROMWELL
Основой учебного проекта стали open source данные проекта CROMWELL. Этот проект помогает учёным обрабатывать специфические научные данные. Он был разработан командой разработчиков Broad Institute, американского института, который занимается вопросами биоинформатики. Институт проводит исследования по разным направлениям: онкология, инфекционные заболевания, изучение метаболизма, эпигеномика, популяционная генетика и другие.
В случае, когда информация объёмная, к примеру, ученые проводят исследование файлов генома, мощностей локальной машины для работы бывает недостаточно. Тогда обработку этих данных необходимо запускать в облаке. Есть специальные языки WDL и CWL, на которых научный сотрудник может описать, что необходимо сделать с данными. Дальше этот файл со скриптом загружается в приложение CROMWELL и обрабатывается в облаке. При этом CROMWELL может работать с разными типами облаков: AWS, Google Cloud, Alibaba Cloud. В этом случае специалисты не привязаны к какому-то конкретному провайдеру облачных технологий, и они не должны обладать специфическими знаниями в программировании. Им нужно освоить какой-либо DSL (Domain Specific Language), т.е. несложный язык, созданный специально для их научной сферы, понять синтаксис этого языка, а дальше приложение запустит необходимые вычисления и предоставит результат.
Проблема
CROMWELL – это открытый продукт, его код можно посмотреть на Git Hub. Задача, которую решает этот инструмент в своём исходном варианте – это упрощение процесса обработки научных данных на разных платформах.
На старте проекта команда студентов и тренеров учебной лаборатории EPAM работала непосредственно с приложением CROMWELL и взаимодействовала с командой разработчиков из Broad Institute. Затем было принято решение сделать новый проект на его основе, более понятный для студентов, которые только начали изучение Scala.
В результате команда тренинг-центра разработала приложение, которое предоставляет данные для системы CROMWELL, но имеет более удобный интерфейс. Это приложение доступно при работе из командной строки и позволяет хранить статистику и данные, которые подавались приложению на вход и на выход. Соотвественно, оно может быть полезно для людей, которые пользуются основным приложением CROMWELL.
Сейчас обучение построено таким образом, что студенты лаборатории сначала выполняют задачи на этом внутреннем проекте, который был назван CROMWELL pipeline, а затем, освоившись с библиотеками и написанием Scala-кода, переходят к open source проектам.
На данный момент в лаборатории можно работать с целым рядом библиотек, которые достаточно активно используются в Scala-сообществе, например, это библиотека Cats, ZIO, ZIO-config и проект Dotti.
Чем интересен проект?
Для лаборатории проект CROMWELL – не совсем обычный, поскольку написан на языке Scala. Это язык программирования на JVM, который поддерживает как объектно-ориентированную, так и функциональную парадигмы.
Back-end разработчики в основном работают с Java, поэтому, приходя на вечерние тренинги, студенты получают теорию и первые задания именно на этом языке. Но на этапе лаборатории они могут либо продолжать изучение Java на учебном проекте, либо прийти на CROMWELL и освоить Scala.
Андрей (выпускник лаборатории):
Наш тренинг начался с того, что нам за две недели нужно было научиться пользоваться языком. Функциональное программирование сильно отличается от объектно-ориентированного, к которому мы привыкли на Java. В Scala – всё объект. Мне нравится Scala тем, что всё гораздо короче получается, можно код намного красивее сделать
Григорий (выпускник лаборатории):
Scala сильно отличается от Java, хоть и написан на JVM. Сейчас мне кажется, что на Scala писать намного удобнее. Вернувшись к Java, я заметил, что моё мышление кардинально изменилось в плане написания кода. Иногда при решении задач ловлю себя на мысли, если бы это был Scala, вот тут можно было бы ещё сократить, а на Java так сделать нельзя
Технологический стек проекта
Проект написан на языке Scala с использованием библиотек Akka-HTTP, Slick. Для сборки проекта используется Sbt, для тестирования – ScalaTest и Mockito. Также студенты и менторы в процессе работы используют GitLab, PostgreSQL и MongoDB.
Методология разработки на проекте
На проекте CROMWELL работают по SCRUM-методологии. Процесс разработки разбит на интервалы, которые называются спринты. Обычно они длятся две недели, и задачи, которые нужно решить за этот период, планируются и назначаются заранее. По результатам спринта проходит ретроспектива, в ходе которой команда обсуждает, что было сделано хорошо, а что можно было улучшить или изменить.
Студенты находятся в непрерывном контакте с менторами. На ежедневных коротких онлайн-встречах они обсуждают текущий статус работы каждого из участников команды, а на еженедельных – все вместе разбирают задачи и их решения.
Андрей:
Мне очень нравится команда. У нас домашняя атмосфера. Менторы стараются обучать нас и развивать. Например, к каждому вторнику мы готовим решение какой-то задачи. Выбираем её заранее на HackerRank и реализуем на Scala. А на встрече разбираем решения друг друга и обсуждаем, как можно было сделать ещё лучше
Как строится рабочий процесс
Разобравшись с синтаксисом Scala, студенты начинают работать над внутренним проектом CROMWELL pipeline. В зависимости от задач, студенты решают их либо самостоятельно, либо в группах.
В open source проекты код загружается от лица компании, поэтому важно, чтобы он был надлежащего качества. Сначала задачу студента проверяют, обсуждают и исправляют два других члена команды. Затем код просматривают два ментора. После проверки задача загружается в основной рабочий репозиторий CROMWELL pipeline или отправляется как реквест в open source проекты.
Андрей:
В процессе работы над проектом мы использовали творческий подход к задачам. Например, чтобы написать «красивое» решение, можно было найти интересную библиотеку среди open source и предложить встроить её в проект. Ребята-менторы смотрят решение, соглашаются, и мы его внедряем. Получается, что ты со своим решением пришёл, и оно работает. Это всегда приносит удовольствие
Команда проекта
Сейчас на проекте активно работают три ментора, они помогают студентам в изучении Scala, технологий проекта, проводят code review, при необходимости проводят для студентов лекции и помогают с выполнением задач в целом.
Техлиды координируют большинство активностей на проекте. Контролируют, что у каждого участника команды есть задачи и ресурсы, необходимые для их решения, и стараются помочь, если возникают сложности. Также они общаются с сотрудниками тренинг-центра, которые отвечают за найм, обсуждают вопросы дальнейшего распределения людей на будущие production-проекты с членами центра компетенций по Scala.
На данный момент на проекте есть два техлида, между которыми распределяются задачи: Мария Несвит координирует open source активности, а Илья Онищенко контролирует работу над CROMWELL pipeline.
Студенты обычно обучаются в группах до 5 человек, работают над разными задачами, но в целом работа распределяется так, чтобы все поработали со всеми частями проекта.
Атмосфера в лаборатории тренинг-центра
Андрей:
У нас в команде все могут обратиться к любому человеку в любой момент и по любой задаче. К примеру, когда я понимаю, что с AWS мы достигли каких-то результатов и это будет интересно другим ребятам, мы устраиваем совместный звонок, чтобы все были в курсе. Это не задача, но всем может быть интересно, все с удовольствием присоединяются. У нас очень дружный коллектив
Ярослав (студент лаборатории):
Наши лиды создают очень приятную, дружественную атмосферу. У нас каждый день есть общий созвон, он называется daily, иногда я подключаюсь к такой встрече, а у меня не доделана задача. Я нервничаю, а лиды могут замотивировать, сказать какую-то шутку, которая разрядит атмосферу. Мне это очень помогает и даёт силы работать дальше
Отличия в работе над реальным и студенческим проектом
Обычно заказчик ставит определённые задачи. В случае open source проектов подобное встречается редко. У команд, работающих над CROMWELL, больше свободы в выборе. Например, есть возможность самостоятельно определиться с библиотекой, с которой хотелось бы поработать, чтобы со временем разобраться в ней на более глубоком уровне.
Андрей:
Я поработал на двух студенческих проектах. Когда я перешёл в production, оказалось, что в целом всё то же самое: люди готовы общаться и помогать. Но действительно, всё серьёзнее и работа идёт гораздо быстрее. Если в студенческих проектах есть время, у менторов есть возможность посмотреть твой код, оценить, насколько всё правильно и логично написано, то на реальном проекте иногда проходит час, и оказывается, что твой запрос уже используется
Будущее проекта
Далее в планах – развитие сотрудничества с open source библиотеками. Пока что опыт взаимодействия с ними не такой большой, но работа с open source проектами очень полезна для студентов, как для будущих специалистов компании.
Советы начинающим
Молодым специалистам стоит больше общаться между собой, внутри команды и обсуждать вопросы с другими студентам. Искать ответ вместе полезнее, чем просто получить готовое решение.
Не стоит бояться уточнять любую информацию. Но, как показывает опыт, нужно работать над формулировками. Вопрос важно строить так, чтобы ты сам смог его понять, если бы у тебя не было контекста текущей ситуации, и тогда в него сможет вникнуть другой человек. Иногда полезно задавать вопросы в чате. В этом случае есть возможность всё перечитать и посмотреть, насколько вопрос понятен со стороны.
Не нужно стесняться давать другим людям обратную связь. Иногда для поиска верных решений человеку может не хватать информации и опыта, и в таком случае твой отклик может быть для него очень полезен. Приятнее работать в команде, где идёт активный обмен информацией и опытом, а отношения между людьми открытые.