Станьте дата-инженером, начиная с нуля.
433 шага по 5-10 минут. Python, SQL, пайплайны, облака и стриминг. В каждом шаге практика и проверка.
Спасибо, коллега. Вы в списке.
Шаг 1 вживую: путь одного заказа
SELECT * FROM raw.orders; -- shop DB + marketplace CSV
| заказ | created_at | сумма | вал. | клиент |
|---|---|---|---|---|
| 1041 | 2026-11-02 09:14 CET | 42.50 | EUR | 7 |
| 1042 | 2026-11-02T08:40:00Z | 19.99 | USD | 3 |
| 1042 | 2026-11-02T08:40:00Z | 19.99 | USD | 3 |
| 1043 | 02.11.2026 12:05 | пусто | EUR | 9 |
| 1044 | 2026-11-01 23:30 PST | 120.00 | usd | 7 |
| 1045 | 2026-11-01 18:02 CET | 64.00 | EUR | 3 |
6 строк2 источника. Один дубль, одна пустая сумма, 3 формата времени, 2 валюты.
SELECT DISTINCT order_id, to_utc(created_at),
amount * fx.rate AS amount_eur
FROM raw.orders JOIN fx USING (currency)
WHERE amount IS NOT NULL;
| заказ | created_at (UTC) | amount_eur |
|---|---|---|
| 1041 | 2026-11-02 08:14 | 42.50 |
| 1042 | 2026-11-02 08:40 | 18.39 |
| 1044 | 2026-11-02 07:30 | 110.40 |
| 1045 | 2026-11-01 17:02 | 64.00 |
4 строки, 1 в карантинеДубль удалён, заказ 1043 ушёл в карантин, время в UTC, доллары пересчитаны по учебному курсу 0.92.
SELECT o.*, c.country
FROM stg_orders o
JOIN dim_customer c USING (customer_id);
| заказ | created_at (UTC) | amount_eur | страна |
|---|---|---|---|
| 1041 | 2026-11-02 08:14 | 42.50 | DE |
| 1042 | 2026-11-02 08:40 | 18.39 | FR |
| 1044 | 2026-11-02 07:30 | 110.40 | DE |
| 1045 | 2026-11-01 17:02 | 64.00 | FR |
fct_orders: 4 строкиКаждый заказ соединён с клиентом. Одна строка это один заказ: это и есть grain.
SELECT order_date, COUNT(*), SUM(amount_eur)
FROM fct_orders GROUP BY 1;
| день (UTC) | заказы | выручка_eur | chart |
|---|---|---|---|
| 2026-11-01 | 1 | 64.00 | |
| 2026-11-02 | 3 | 171.29 |
235.29 EURВ сырых данных заказ 1044 выглядел как 1 ноября. В UTC он относится к 2 ноября.
Маршрут в масштабе
Ширина каждого отрезка равна числу шагов. Python и SQL идут первыми: их просят почти в каждой вакансии.
Один шаг: одна идея и 5-10 минут
Короткий шаг помещается даже в загруженный вечер. Новое слово появляется только после шага, где его объяснили.
- Один датасет магазина с шага 1 до финального проекта: заказы, клиенты, клики, платежи, тикеты.
- Каждые 10-15 шагов чекпоинт или итоговый проект, который можно показать.
- Сложный инструмент приходит, когда без него уже больно. Spark идёт после шага, где pandas не хватает памяти.
-
2-3 мин
Читаете
Ситуация с реальной работы, идея простыми словами, одна схема.
-
1-2 мин
Смотрите
Код или SQL на данных магазина с настоящим выводом.
-
3-5 мин
Делаете
Одна маленькая задача в терминале или редакторе.
-
сразу
Проверяете
Проверка запускает ваш запрос, тест или пайплайн и ставит зелёную галку.
Что у вас будет построено
27 итоговых проектов и чекпоинтов, потом финальный проект. Несколько из них:
- шаг 386Неделя дежурства: 5 аварий в проде подряд
- шаг 158Инкрементальная загрузка из 3 источников, которую можно запустить дважды
- шаг 228dbt-проект с тестами, документацией и CI
- шаг 299Один и тот же пайплайн магазина в AWS, потом в GCP и Azure
- шаг 347Живой дашборд заказов на change data capture
- шаг 370Счёт за хранилище минус 40%, с цифрами
Программа
Все шаги по порядку. Шаги 0-30 бесплатно.
Часть 1 Старт с нуля 0-83
Что такое дата-инжиниринг 0-7
- 0Чем дата-инженер занят весь день бесплатно
- 1Путь одного заказа: от клика до дашборда бесплатно
- 2Источники, пайплайны, хранилище, потребители бесплатно
- 3Batch и streaming на одной картинке бесплатно
- 4OLTP и OLAP: два вида баз бесплатно
- 5Дата-инженер, аналитик, analytics engineer, ML-инженер бесплатно
- 6Современный стек данных на одной карте бесплатно
- 7Что ты построишь за курс бесплатно
Терминал и git 8-18
- 8Открываем терминал и запускаем 3 команды бесплатно
- 9Файлы, папки и пути бесплатно
- 10Заглядываем в CSV: head, tail, wc бесплатно
- 11Ищем строки через grep бесплатно
- 12Пайпы и перенаправление бесплатно
- 13Переменные окружения бесплатно
- 14Ставим инструменты через пакетный менеджер бесплатно
- 15git: первый коммит бесплатно
- 16Ветки и слияния бесплатно
- 17GitHub: push и pull request бесплатно
- 18Чекпоинт: репа с очищенным CSV бесплатно
Python с нуля 19-43
- 19Ставим Python и запускаем первый скрипт бесплатно
- 20Переменные и типы бесплатно
- 21Строки и f-строки бесплатно
- 22Списки бесплатно
- 23Словари бесплатно
- 24Условия бесплатно
- 25Циклы бесплатно
- 26Функции бесплатно
- 27Модули и импорты бесплатно
- 28Чтение и запись файлов бесплатно
- 29CSV через модуль csv бесплатно
- 30JSON на входе и на выходе бесплатно
- 31Ошибки и try/except
- 32Виртуальные окружения и uv
- 33Установка пакетов
- 34Классы за 10 минут
- 35Dataclasses и аннотации типов
- 36Даты, время и часовые пояса
- 37Вызываем HTTP API
- 38Пагинация и лимиты запросов
- 39Логирование вместо print
- 40Первый тест на pytest
- 41Консольный скрипт с аргументами
- 42Генераторы: файлы больше памяти
- 43Итог: ежедневный сборщик из API в CSV
SQL с нуля 44-73
- 44Что такое база данных
- 45Таблицы, строки, столбцы
- 46Запускаем Postgres и подключаемся
- 47SELECT
- 48WHERE
- 49ORDER BY и LIMIT
- 50COUNT, SUM, AVG, MIN, MAX
- 51GROUP BY
- 52HAVING
- 53NULL и почему он ломает сравнения
- 54INNER JOIN
- 55LEFT JOIN
- 56Размножение строк в JOIN: когда суммы удваиваются
- 57Подзапросы
- 58CTE через WITH
- 59CASE WHEN
- 60Даты в SQL
- 61Текст в SQL
- 62Оконные функции: ROW_NUMBER
- 63Накопительные суммы и LAG/LEAD
- 64Дедупликация через окно
- 65INSERT, UPDATE, DELETE
- 66CREATE TABLE и типы данных
- 67Первичные и внешние ключи
- 68Индексы
- 69Транзакции
- 70Читаем EXPLAIN
- 71Представления и материализованные представления
- 72SQL из Python
- 73Итог: 10 вопросов бизнеса к базе магазина
Продвинутый SQL 74-83
- 74Пропуски и острова
- 75Сессии: собираем клики в визиты
- 76Рекурсивные CTE
- 77ROLLUP, CUBE, GROUPING SETS
- 78Pivot и unpivot
- 79Топ-N в группе, медианы, перцентили
- 80Уровни изоляции и MVCC
- 81Алгоритмы JOIN: nested loop, hash, merge
- 82Партиционирование таблиц в Postgres
- 83Чекпоинт: 10 SQL-задач уровня собеседования
Часть 2 Основы данных 84-140
Моделирование данных 84-105
- 84Почему форма данных важна
- 85Нормализация простыми словами
- 86Рисуем ER-диаграмму
- 87Факты и измерения
- 88Grain: что значит одна строка
- 89Схема «звезда»
- 90Схема «снежинка»
- 91Суррогатные и натуральные ключи
- 92Измерение дат
- 93Медленно меняющиеся измерения: тип 1 и 2
- 94SCD типов 3, 4 и 6
- 95Типы фактов: транзакционные, периодические снапшоты, накопительные
- 96Факты без мер
- 97Bridge-таблицы для связи многие-ко-многим
- 98Согласованные измерения и bus matrix
- 99Опоздавшие измерения
- 100Одна большая таблица: когда она выигрывает
- 101Data Vault за один шаг
- 102Моделируем события
- 103Полуструктурированный JSON в хранилище
- 104Выбираем модель под команду
- 105Итог: модель данных подписочного бизнеса
Хранение и форматы файлов 106-117
- 106Строчное и колоночное хранение
- 107Ловушки CSV: запятые, кавычки, кодировки
- 108JSON Lines
- 109Parquet
- 110Avro
- 111Кодеки сжатия
- 112Партиционирование файлов по дате
- 113Проблема мелких файлов
- 114Объектное хранилище: бакеты и ключи
- 115MinIO: S3 на ноутбуке
- 116Озеро, хранилище, lakehouse
- 117Итог: сырой CSV в партиционированный Parquet в MinIO
Docker и серверы для данных 118-127
- 118Зачем контейнеры
- 119Первый Dockerfile
- 120docker compose с Postgres
- 121Тома: данные, которые переживают перезапуск
- 122Сеть между контейнерами
- 123Конфиги и секреты в контейнерах
- 124cron: самый простой планировщик
- 125SSH на сервер
- 126Makefile как вход в проект
- 127Итог: локальный стек данных одной командой
Основы распределённых систем 128-135
- 128Почему одной машины перестаёт хватать
- 129Репликация
- 130Партиционирование и шардирование
- 131Модели согласованности
- 132CAP и PACELC
- 133Часы и порядок событий
- 134Консенсус за один шаг
- 135At-most-once, at-least-once, exactly-once
Другие базы данных 136-140
- 136Документные базы: MongoDB
- 137Key-value и wide-column: DynamoDB и Cassandra
- 138Redis
- 139Поисковые движки: Elasticsearch и OpenSearch
- 140Выгружаем данные из NoSQL в хранилище
Часть 3 Пайплайны 141-237
Загрузка данных 141-158
- 141Какие бывают источники
- 142Полная и инкрементальная загрузка
- 143Watermark: помним, где остановились
- 144Идемпотентность: можно запустить дважды
- 145Загрузка из API с повторами
- 146Много вызовов API сразу через asyncio
- 147Вебхуки
- 148Файлы из SFTP и почты
- 149Выгрузка из боевой базы
- 150Change data capture: идея
- 151dlt: загрузка как код на Python
- 152Airbyte
- 153Готовые коннекторы: Fivetran и аналоги
- 154Дрейф схемы
- 155Опоздавшие и дублирующиеся данные
- 156Backfill
- 157Скрапинг в рамках закона
- 158Итог: инкрементальная загрузка из 3 источников
Batch-обработка на одной машине 159-167
- 159Основы pandas
- 160pandas: группировка, join, разворот
- 161Где pandas кончается память
- 162Polars
- 163DuckDB
- 164DuckDB поверх Parquet в S3
- 165Замер: pandas, Polars, DuckDB
- 166Выбор инструмента по объёму данных
- 167Итог: 50 ГБ на ноутбуке
Spark 168-183
- 168Зачем распределённая обработка
- 169Драйвер, экзекьюторы, кластер
- 170Spark локально
- 171DataFrame API
- 172Ленивые вычисления: трансформации и действия
- 173Spark SQL
- 174Партиции
- 175Shuffle
- 176Broadcast join
- 177Перекос данных
- 178Почему Python UDF медленные
- 179Читаем Spark UI
- 180Кеширование
- 181Настройка памяти и экзекьюторов
- 182Пишем партиционированный результат
- 183Итог: Spark-джоба в 3 раза быстрее
JVM для Spark по желанию 184-186
- 184Читаем Spark-код на Scala
- 185Память JVM и сборка мусора в Spark
- 186Java и Scala в вакансиях: что учить
Таблицы lakehouse 187-195
- 187Табличные форматы: почему файлов мало
- 188Delta Lake
- 189Apache Iceberg
- 190MERGE и upsert
- 191Эволюция схемы
- 192Идемпотентная перезапись партиций
- 193Time travel и откат
- 194Обслуживание таблиц: compaction и vacuum
- 195Итог: таблица с ежедневным обновлением без дублей
Оркестрация 196-213
- 196Почему cron перестаёт хватать
- 197DAG
- 198Airflow: установка и первый DAG
- 199Операторы и задачи
- 200Расписания, catchup, интервалы данных
- 201Повторы, таймауты, SLA
- 202Сенсоры и зависимости между DAG
- 203Передача данных между задачами
- 204Dagster: мышление ассетами
- 205Prefect и другие: как выбрать
- 206Backfill в оркестраторе
- 207Алерты, которые читают
- 208Тестируем DAG
- 209Динамические задачи
- 210Запуск по готовности данных
- 211Executors: local, Celery, Kubernetes
- 212Airflow в проде
- 213Итог: ежедневный пайплайн под оркестратором
Трансформации в dbt 214-228
- 214ETL и ELT
- 215Проект dbt с нуля
- 216Модели и ref()
- 217Sources и свежесть
- 218Материализации
- 219Инкрементальные модели
- 220Тесты
- 221Документация и граф зависимостей
- 222Jinja и макросы
- 223Snapshots для SCD тип 2
- 224Seeds и пакеты
- 225Слои: staging, intermediate, marts
- 226dbt в CI: сборка только изменённого
- 227Семантический слой и метрики
- 228Итог: dbt-проект для магазина
Тесты кода данных 229-233
- 229Unit-тесты трансформаций
- 230Тестируем Spark-код
- 231Unit-тесты в dbt
- 232Интеграционные тесты на Testcontainers
- 233Тестовые данные: фикстуры и синтетика
Выдача данных 234-237
- 234BI-дашборды в Superset
- 235Самостоятельная аналитика в Metabase
- 236API над данными на FastAPI
- 237Кеш и лимиты для API данных
Часть 4 Надёжные данные 238-277
Качество данных и контракты 238-249
- 238Сколько стоят плохие данные
- 239Измеримые свойства качества
- 240Great Expectations и Soda
- 241Контракты данных
- 242Реестр схем
- 243Проверки аномалий по объёму и свежести
- 244Паттерн карантина
- 245Сверка с источником
- 246SLA по свежести
- 247Entity resolution: один клиент из 3 систем
- 248Золотые записи и мастер-данные
- 249Итог: пайплайн, который не пропускает плохие данные
DataOps 250-262
- 250Git-процесс в проектах данных
- 251CI для пайплайнов
- 252Dev, staging, prod для данных
- 253Terraform: инфраструктура как код
- 254Terraform для бакетов и хранилищ
- 255Управление секретами
- 256Наблюдаемость пайплайнов: логи, метрики, трейсы
- 257Lineage через OpenLineage
- 258Ранбуки
- 259Дежурства и инциденты
- 260Пишем постмортем
- 261AI-агенты для кода в работе с данными
- 262Итог: CI/CD для всего стека
Kubernetes для данных 263-268
- 263Поды, деплойменты, сервисы
- 264Helm-чарты
- 265Spark в Kubernetes
- 266Airflow с KubernetesPodOperator
- 267Requests, limits, автомасштабирование
- 268Итог: стек данных в локальном кластере kind
Governance, приватность, безопасность 269-277
- 269Каталоги данных
- 270Находим и классифицируем персональные данные
- 271Маскирование и псевдонимизация
- 272Доступы: роли и гранты
- 273Безопасность на уровне строк и столбцов
- 274GDPR: удаляем человека из озера данных
- 275Политики хранения
- 276Журналы аудита
- 277Итог: проверка приватности своей платформы
Часть 5 Облака 278-323
Основы облаков 278-288
- 278Безопасно открываем облачный аккаунт
- 279Бюджетный алерт до всего остального
- 280IAM: пользователи, роли, политики
- 281Регионы и зоны
- 282VPC, подсети и маршруты
- 283Private endpoints: данные не выходят в интернет
- 284NAT gateway: скрытая статья расходов
- 285Шифрование через KMS
- 286Как облака берут деньги за данные
- 287CLI облака
- 288Teardown: ничего не оставляем включённым
AWS 289-299
- 289S3 для данных
- 290IAM-роли для пайплайнов
- 291Glue Data Catalog
- 292Athena
- 293Glue jobs и EMR Serverless
- 294Lambda для мелких задач
- 295Step Functions и MWAA
- 296Redshift Serverless
- 297Kinesis
- 298Lake Formation
- 299Итог: пайплайн магазина на AWS
Google Cloud 300-307
- 300Cloud Storage
- 301BigQuery
- 302Партиционирование и кластеризация в BigQuery
- 303Стоимость BigQuery: on-demand и слоты
- 304Pub/Sub
- 305Dataflow
- 306Composer и Dataproc
- 307Итог: пайплайн магазина на GCP
Azure 308-314
- 308ADLS Gen2
- 309Data Factory
- 310Microsoft Fabric
- 311Event Hubs
- 312Entra ID и доступы
- 313Purview
- 314Итог: пайплайн магазина на Azure
Хранилища и lakehouse 315-323
- 315Архитектура Snowflake
- 316Warehouse и кредиты в Snowflake
- 317Time travel и клоны без копирования
- 318Databricks и lakehouse
- 319Unity Catalog и открытые каталоги
- 320Trino: один SQL поверх многих источников
- 321ClickHouse для быстрой аналитики
- 322Выбираем хранилище
- 323Итог: одни и те же витрины на Snowflake и Databricks
Часть 6 Стриминг и real time 324-347
Стриминг 324-347
- 324Когда real time окупается
- 325События и логи
- 326Kafka: брокеры, топики, партиции
- 327Продюсеры
- 328Консьюмеры и группы
- 329Оффсеты и повторное чтение
- 330Лаг консьюмеров и как за ним следить
- 331Ребалансировка
- 332Retention и log compaction
- 333Гарантии доставки
- 334Схемы событий
- 335Режимы совместимости схем
- 336Kafka Connect
- 337CDC через Debezium
- 338Окна: tumbling, sliding, session
- 339Event time и watermark
- 340Состояние в потоковой обработке
- 341Spark Structured Streaming
- 342Apache Flink
- 343Exactly-once от начала до конца
- 344Стриминг в lakehouse
- 345Применяем CDC-изменения к таблице Iceberg
- 346Real-time OLAP
- 347Итог: живой дашборд заказов на CDC
Часть 7 Данные для ML и AI 348-362
Пайплайны данных для ML и AI 348-362
- 348Что ML-команде нужно от дата-инженера
- 349Фичи и пайплайны фич
- 350Корректность на момент времени
- 351Feature store на Feast
- 352Обучающие датасеты и версии
- 353Эмбеддинги для дата-инженера
- 354Векторный поиск на pgvector
- 355Неструктурированные данные: PDF, картинки, аудио
- 356Пайплайн документов для RAG
- 357LLM внутри пайплайна: извлечение и классификация
- 358Стоимость и кеш LLM-вызовов в batch
- 359Text-to-SQL поверх хранилища
- 360Данные для AI-агентов: MCP поверх хранилища
- 361Передача в MLOps
- 362Итог: тикеты поддержки в индекс для RAG
Часть 8 Уровень senior 363-432
Производительность и стоимость 363-370
- 363Профилируем медленный запрос
- 364Partition pruning
- 365Кластеризация и ключи сортировки
- 366Инкрементальность везде
- 367FinOps для данных
- 368Классы хранения и правила жизненного цикла
- 369Spot-инстансы и автомасштабирование
- 370Итог: счёт за хранилище минус 40%
Аварии в проде 371-386
- 371Как читать инцидент: алерт, логи, хронология
- 372Дубли после backfill
- 373Баг перехода на летнее время
- 374Апстрим переименовал колонку
- 375Тихие NULL после смены источника
- 376Перекошенный JOIN роняет Spark
- 377Мелкие файлы тормозят все запросы
- 378SELECT * сжигает месячный бюджет
- 379Лаг Kafka растёт за ночь
- 380Опоздавшие данные выпали из вчерашнего отчёта
- 381DAG, который отработал дважды
- 382Курс валют неделю брался из старого кеша
- 383Удалённая партиция, восстановленная через time travel
- 384Смена прав ломает ночную загрузку
- 385Цифры дашборда расходятся с финансами
- 386Итог: неделя дежурства, 5 инцидентов подряд
Архитектура 387-396
- 387Требования до инструментов
- 388Архитектуры Lambda и Kappa
- 389Medallion: bronze, silver, gold
- 390Data mesh и дата-продукты
- 391Строить, покупать или open source
- 392Reverse ETL
- 393Мультитенантные платформы данных
- 394Восстановление после аварий
- 395Миграция старого хранилища
- 396Записи архитектурных решений
Дата-инжиниринг в бизнесе 397-406
- 397Аудит данных компании
- 398Ищем ручную работу под автоматизацию
- 399Метрики, о которых договорились
- 400Считаем ROI и TCO
- 401Пишем предложение
- 402Дорожная карта данных на 90 дней
- 403Работа со стейкхолдерами
- 404Заменяем процессы в Excel
- 405Защита перед руководством
- 406Итог: аудит и предложение для реального бизнеса
Навыки senior-инженера 407-412
- 407Пишем design doc
- 408Оцениваем сроки работ с данными
- 409Приоритизируем техдолг
- 410Код-ревью кода данных
- 411Менторство джунов
- 412Итог: принимаем чужой легаси-репозиторий и приводим в порядок
Собеседования и карьера 413-424
- 413Резюме дата-инженера
- 414Портфолио из итоговых проектов
- 415SQL-задачи на собеседовании
- 416Python-интервью для дата-ролей
- 417Интервью по моделированию данных
- 418System design: аналитика e-commerce
- 419System design: антифрод в реальном времени
- 420System design: кликстрим на миллиард событий в день
- 421Поведенческое интервью
- 422Домашние задания
- 423Переговоры о зарплате
- 424Первые 90 дней на работе
Финальный проект 425-432
- 425Финальный проект: задача и требования
- 426Финальный проект: архитектура и ADR
- 427Финальный проект: загрузка и хранение
- 428Финальный проект: трансформации и качество
- 429Финальный проект: потоковый путь
- 430Финальный проект: деплой в облако через Terraform
- 431Финальный проект: наблюдаемость и отчёт о стоимости
- 432Финальный проект: описание и демо для портфолио
С чем будете работать
Сначала идея, инструмент идёт примером. Сменился инструмент: меняется пример, шаг остаётся.
- База
- Терминал, git, Python, SQL, Postgres, Docker, MongoDB, Redis
- Обработка
- pandas, Polars, DuckDB, Spark
- Пайплайны
- dlt, Airbyte, Airflow, Dagster, dbt
- Хранение
- Parquet, Avro, S3, MinIO, Delta Lake, Iceberg
- Облака
- AWS, Google Cloud, Azure, Snowflake, Databricks, Terraform, Kubernetes
- Стриминг
- Kafka, Debezium, Flink, Spark Streaming, ClickHouse
- Качество и эксплуатация
- Great Expectations, Soda, OpenLineage, контракты данных
- ML и AI
- Feast, pgvector, пайплайны для RAG, LLM в batch, MCP
Для кого
Меняете профессию
Вы ни разу не писали код. Часть 1 начинается с терминала и заканчивается Python и SQL, которыми вы пользуетесь каждый день.
Аналитики и разработчики
Вы знаете SQL или язык программирования. Часть 1 пролистываете, дальше идёте вглубь пайплайнов, облаков и стриминга.
Инженеры на пути к senior
Производительность, стоимость, архитектура, governance и как предложить бизнесу платформу данных.
Вопросы
Нужно ли уметь программировать?
Нет. Шаги 0-83 учат терминалу, git, Python и SQL с первой команды.
Какой уровень будет на выходе?
Mid-senior. Вы строите и сопровождаете пайплайны, выбираете инструменты по замерам, чините аварии в проде, проектируете платформу данных и защищаете решение. Senior-уровень дают часть 8 и сложные блоки частей 1-6: распределённые системы, Kubernetes, стоимость, архитектура.
Откуда возьмётся опыт?
Из аварий, которые вы чините сами. Блок 8.2 воспроизводит в малом масштабе 14 реальных классов сбоев: дубли после backfill, баг летнего времени, переименованная колонка в источнике, перекошенный JOIN в Spark, SELECT * на весь бюджет. Вы получаете алерт и логи, находите причину, чините и пишете постмортем. В шаге 412 вам достаётся легаси-репозиторий без тестов, его нужно привести в порядок.
Какие облака?
AWS, Google Cloud и Azure, по блоку на каждое, плюс Snowflake и Databricks. Один и тот же пайплайн магазина вы выкатываете в каждое и видите, что меняется.
Кто платит за облако?
Вы работаете в своих аккаунтах. Первый облачный шаг ставит бюджетный алерт, каждая облачная практика заканчивается удалением ресурсов. Закладывайте около $30 на весь курс. До части 5 всё работает на ноутбуке в Docker.
Какой нужен компьютер?
macOS, Linux или Windows с WSL, 8 ГБ памяти и 30 ГБ свободного диска. В блоке Spark пригодится 16 ГБ.
Почему так много шагов?
В каждом шаге одна идея, поэтому шаги короткие. 433 шага по 5-10 минут дают 36-72 часа чтения и практики, плюс итоговые проекты.
Есть ли ML и AI?
Да. Часть 7: пайплайны фич, корректность на момент времени, векторный поиск, пайплайны документов для RAG и вызовы LLM внутри batch-задач.
Собеседования?
Блок 8.6: SQL, Python и моделирование данных, 3 задачи на system design, домашние задания и переговоры о зарплате.
На каких языках?
Английский и русский, шаг в шаг.
Сколько стоит?
Шаги 0-30 бесплатно. Дальше годовая подписка или доступ навсегда. Лист ожидания узнает цены первым.
Получите первые шаги, когда они откроются
Одно письмо, когда выйдут шаги 0-30.
Спасибо, коллега. Вы в списке.