Привет! Меня зовут Михаил Иванов, я работаю архитектором DWH в Тинькофф и занимаюсь развитием Batch ETL направления платформы обработки данных. Я расскажу о направлении data engineering в Тинькофф, о том, чем занимаются data-инженеры и как попасть к нам в команду.

Data Platform в Тинькофф
Data Platform — это корпоративное хранилище данных, или DWH (Data Warehouse), и целый набор разных инструментов для эффективной работы с данными. Для начала определим, что представляет из себя Data Platform в Тинькофф:
более 6000 батчевых процессов загрузки, трансформации и выгрузки данных;
сотни потоков загрузки слабоструктурированных и неструктурированных данных из внешних систем;
сотни источников данных;
больше 200 ТБ сжатых структурированных данных в кластерах Greenplum и Clickhouse;
более 2 ПБ сжатых данных в кластере Hadoop;
несколько сотен сотрудников: архитекторы, аналитики, разработчики (ETL, BI, Python, Java), data-инженеры, SRE и QA-инженеры.
Каждый сотрудник играет в процессе определенную роль: отвечает за часть платформы и некоторые этапы на пути данных из систем источников к потребителям. Попробуем разобраться, какие обязанности есть у data-инженеров.
Data-инженер и суть его работы
Data-инженеров называют по-разному: инженер данных, data engineer, DE. Такой специалист — это в первую очередь инженер. Давайте заглянем в словарь: «Инженер (фр. ingénieur ← от лат. ingenium — способности, изобретательность) — специалист в области технической деятельности, направленной на практическое приложение и применение знаний с целью обращения природных ресурсов на пользу человека». Даже в сухом энциклопедическом определении речь идет о практическом применении знаний с пользой для дела.
Перейдем к конкретике. Data-инженер — это специалист, который автоматизирует процесс обработки данных, создает конвейеры обработки данных и настраивает инфраструктуру для них. Проще говоря, он помогает конечному потребителю получить необходимые данные и извлечь из них пользу.
На практике круг обязанностей data-инженера может быть разнообразным, как и инструменты, которые он применяет. Все зависит от особенностей компании, устройства корпоративного хранилища данных (DWH) и технических требований к нему.
Чаще всего data-инженер сталкивается с задачами:
извлечения данных оптимальным способом;
подготовки данных, их очистки и обогащения;
доставки данных потребителю в удобном формате;
хранения данных: выбор подходящего способа хранения, оптимальной структуры, сжатия, секционирования и глубины;
развертывания и поддержки инфраструктуры, мониторинга ее состояния.
Портрет data-инженера в Тинькофф
В зависимости от специфики задач в разных организациях складывается разное видение роли data-инженера. Расскажу, какими знаниями и навыками обладают data-инженеры в Тинькофф.

Computer science. Специалист знает базовые алгоритмы, умеет пользоваться основными структурами данных и оценивать сложность алгоритмов. Он владеет ООП (объектно-ориентированным программированием) и паттернами проектирования, а также понимает, как работают распределенные системы.
Языки программирования. Знает Python или Java.
Работа с данными. Для работы с данными необходимо владение целым набором инструментов:
SQL и разные диалекты — Postgres/Greenplum, Oracle, Clickhouse, Hive;
устройство реляционных баз данных;
разновидности NoSQL-решений — когда и зачем их выбирать и как готовить;
технологии BigData (Hadoop-стек);
брокеры сообщений (Kafka).
Основы хранилищ данных. Еще одна обширная область. Вот в чем нужно разбираться:
теория построения хранилищ данных, слои и архитектурные подходы;
моделирование и нормализация данных;
ETL, способы организации конвейеров и их оптимизации;
навыки работы с ETL-инструментами и инструментами управления конвейерами обработки данных, такими как Apache Airflow или Apache NiFi или Apache Flink.
Инженерные навыки. Речь идет о базовых инженерных навыках и DevOps-практиках:
Linux на уровне опытного пользователя;
навыки работы с git;
понимание, что такое CI/CD и зачем оно вообще нужно;
навыки обращения с docker-контейнерами;
умение работать с k8s- и cloud-решениями.
Soft-skills. Иногда data-инженеру приходится заниматься аналитикой и исследованиями. Здесь важны исследовательский склад ума, любознательность и широкий кругозор. А иногда нужно придумать новые подходы для оптимального решения задач по работе с данными. И тут на помощь приходят самостоятельность, нешаблонное решение и желание изучать новые технологии.
Получается, data-инженер — это Супермен, многорукий Шива и человек-оркестр. Он T-shaped-специалист: отлично разбирается в одной или нескольких областях, а в смежных областях ориентируется на базовом уровне. Это противоположность I-специалисту, который знает много всего, но не углубляется ни в одну область.
Приведу пример. Вот наборы навыков, которые могут быть у двух разных data-инженеров:
Эксперт в SQL, большой опыт работы с RDBMS и NoSQL, имеет глубокие знания в областях DWH и ETL, умеет на хорошем уровне писать код на Python, не понаслышке знаком с CS, Linux, Docker.
Эксперт в CS, мастерски владеет Java, Python и не только, хорошо знает Linux, Docker, умеет писать сложные SQL-запросы, хорошо понимает, как работают RDBMS- и NoSQL-решения, разбирается в DWH и ETL.

Когда в одной команде оказываются специалисты с сильными знаниями в разных областях, получается эффективно решать широкий спектр задач. Кроме того, ускоряется обмен знаниями и опытом: происходит «взаимное опыление».
Раз уж речь зашла о командах, расскажу, где можно встретить data-инженера в Тинькофф.
Core-команды в DWH. Технические команды, которые занимаются развитием инструментов и выработкой подходов к решению типовых задач. Такие команды — центры экспертизы.
Бизнес-команды. В них data-инженеры занимаются решением задач конкретного бизнес-направления. Для этого они используют один или несколько инструментов, взаимодействуют с core-командами и привносят культуру работы с данными в свое подразделение.
Путь data-инженеров в Тинькофф
С ключевыми навыками разобрались. Теперь поговорим о том, как становятся data-инженерами в Тинькофф. На практике в «лагерь» инженеров данных часто попадают специалисты из смежных областей. Например, такие:
ETL-разработчик;
ML-разработчик;
Backend или Fullstack-разработчик.
Чтобы специалисты знали, в какую сторону развиваться, чтобы стать data-инженером, мы создали универсальную матрицу компетенций. По сути, это развитие методики универсальной карты компетенций ETL-разработчика, про которую рассказывала Галина Голованова. Матрица компетенций data-инженера — это детализированный перечень основных навыков, описанных выше. Матрица учитывает в первую очередь технологии, с которыми работают инженеры в компании. А универсальна она потому, что в ней есть альтернативные разделы для каждого навыка.
В матрице детально описаны требования, которые актуальны для data-инженеров разных профилей. Например:
Java, Flink, Kafka, Cassandra и другие нужны для стриминговой обработки данных.
Java, NiFi, Hadoop, Kafka, Redis и другие актуальны для core-команды, занимающейся развитием и эксплуатацией Apache NiFi.
Python, Airflow, Greenplum, Clickhouse, Hadoop и другие необходимы для core-команды, занимающейся развитием batch ETL фреймворка на базе Apache Airflow.
Универсальность матрицы еще и в том, что в ней есть общие разделы. Они будут в той или иной степени полезны любому data-инженеру:
основы хранилищ данных;
SQL;
теория СУБД, RDBMS, NoSQL, MPP;
инженерные навыки;
алгоритмы, структуры данных, сложность алгоритмов, паттерны проектирования.
Вся информация в матрице разделена по уровням компетенций — от junior до senior+. Это помогает понять, какие знания необходимы junior-специалисту, чтобы вырасти до уровня middle, а middle-специалисту — чтобы стать сеньором. За каждым data-инженером мы закрепляем ментора, который помогает составить индивидуальный план развития, опираясь на матрицу компетенций. Матрица помогает сотрудникам развиваться, но не определяет их уровень. Для этого у нас есть отдельная матрица уровней.
Периодически мы устраиваем аттестации — «экзамены» для data-инженеров. Любой желающий может сдать аттестацию на выбранный уровень, например middle. Благодаря матрице компетенций и механизму периодической оценки навыков мы можем быть уверены, что data-инженеры в наших командах могут быстро и гармонично развиваться.
Сейчас потребность в data-инженерах растет, потому что данные — это «новая нефть». А data-driven-подход требует умения работать с любыми данными, независимо от масштабов организации. Мы в Тинькофф тоже приглашаем желающих присоединиться к нашей команде data-инженеров. Узнать подробности и посмотреть вакансии можно на нашей карьерной странице для data-инженеров.
Собеседование data engineer в Тинькофф
Общий порядок интервью ИТ-специалистов мы подробно описали на странице про собеседования. А о том, как проходит интервью системных аналитиков DWH в Тинькофф, недавно рассказывала в своей статье Мария Фоменко.
Конечно, кандидатов на позиции data-инженеров ждут некоторые особенности в технической части интервью. Но основные этапы стандартные.
HR-скрининг. Это телефонное интервью с рекрутером, которое длится 20—30 минут. HR-специалист расспрашивает кандидата об опыте, мотивации, ожиданиях и технических интересах. И отвечает на его вопросы о вакансии.
Техническое интервью. При общении с соискателями мы всегда выясняем, какие навыки развиты у них особенно хорошо. Обычно стандартных полутора часов на это не хватает. Поэтому собеседование на позицию data-инженера проходит в несколько этапов:
Секция «Data Engineering + логика». Длительность — 90 минут. На этой секции мы проверяем базовые знания по направлению data engineering и оцениваем уровень погружения во множество направлений. По итогам встречи мы формируем профиль навыков, чтобы понять, в какой команде кандидат сможет работать эффективнее всего. На этой же встрече мы с соискателем пишем немного кода и решаем «детские» логические задачки.
Секция SQL. Длительность — 60 минут. В этой части технического интервью мы решаем задачки с использованием SQL, проверяем навыки работы с данными с использованием SQL и опыт использования разных синтаксических конструкций.
Алгоритмы. Длительность — 60 минут. Проверяем знания по алгоритмам и структурам данных, предлагаем решить несколько задачек, требующих написания кода. На этой секции нужно показать навыки работы с основными структурами данных: строки, списки, деревья, ассоциативные массивы, векторы. Кандидату пригодится умение реализовывать базовые алгоритмы: поиск элементов в коллекциях, обход деревьев, сортировки, динамическое программирование. Изучая решения соискателя, мы проверяем умение оценить сложность алгоритмов, обсуждаем O-нотацию, вычислительную сложность решения и расход памяти.
Знакомство с командой. Тех, кто успешно прошел секции технической части, мы приглашаем на финальное интервью с командой. Напомню, что на каждом этапе технического интервью мы занимаемся построением детализированного профиля компетенций кандидата. Поэтому команды могут легко понять, подходит ли им специалист с такими навыками и знаниями. Кандидатам процесс (особенно третий этап) тоже помогает понять, подходит ли им компания. На финальном этапе кандидаты знакомятся с командами, обсуждают особенности проектов и конкретные задачи. И после этого наш будущий коллега выбирает команду, в которой ему будет интереснее всего работать.
Надеюсь, благодаря этому тексту стало понятнее, как становятся data-инженерами в Тинькофф и каких специалистов мы ждем на собеседованиях. Если ты любишь работать с данными так же, как мы, — приходи к нам.