Прогресс, квизы и labs
Senior-курс — это не «прочитал и хорошо». Это «прочитал, сделал quiz, упёрся в вопрос, вернулся к уроку, понял глубже, сделал lab, разобрался с реальной проблемой». Цикл повторяется ~70 раз — раз на каждый урок. Quiz и labs — это не отчётность, это инструмент проверки понимания.
Структура контроля знаний
Bloom levels вопросов
Senior-курс не тренирует зубрилку — этим занимается dbt I и docs. Поэтому factual и conceptual вопросы в курсе сведены к минимуму. Преобладают:
- Applied (
applied) — «как применить знание в реальной ситуации». Пример: «Вы пишете custom materialization. Где именно в lifecycle вызватьadapter.commit()чтобы не словить partial transaction?» - Analytical (
analytical) — «как разобраться в сложной ситуации, найти root cause». Пример: «Partial parse инвалидируется при каждом запуске, хотя файлы не меняются. Какие 5 факторов могли это вызвать, и как продебажить?»
Conceptual (conceptual) — только когда речь идёт о фундаментальной модели (например, «что такое execute=False фаза в Jinja» — это conceptual, потому что без понимания концепции дальше идти нельзя).
Все вопросы — это multiple-choice (a/b/c/d) или true-false. Никаких open-ended «опишите своими словами». Это решение — открытые вопросы senior-уровня требуют ручной проверки экспертом, что несовместимо с self-paced форматом. Quiz даёт быстрый сигнал «понял/нет», глубокая рефлексия — это lab.
Как читать explanations
Каждый ответ в quiz сопровождается explanation — 6-9 предложений с глубоким разбором. Это не «правильный ответ — b». Это:
- Почему b правильно. Конкретный механизм, ссылка на dbt-core, цитата из docs (где применимо).
- Почему a/c/d неправильно. Не просто «это не так», а «вот этот вариант звучит правдоподобно, но ломается в случае X».
- Edge case или production gotcha. Где правильный ответ всё равно может дать вам проблему — мы говорим.
- Связь с другими уроками курса. Где видели эту тему ещё или где увидите.
Если explanation для вас «вода» — quiz слишком лёгкий, посмотрите следующий модуль. Если explanation вызывает три новых вопроса — это нормально для senior-курса, разбирайте каждый.
Module exams
Не каждый модуль имеет exam. Только четыре модуля курса:
- 01 — Architecture overview — exam после фундаментального блока «как устроен dbt-core»
- 03 — Jinja contexts — exam после контекстов (самая частая senior-проблема)
- 07 — Custom materializations — exam перед adapter API
- 09 — Adapter API deep — exam после adapter блока
Exam — 6 вопросов в стиле «scenario engineering». Вы получаете описание production situation, выбираете лучший подход из 4 вариантов. Большинство exam-вопросов уровня analytical — нужно перебрать факторы, исключить ложные пути, обосновать выбор.
Passing threshold — 70% (то есть 5/6). Можно пересдавать сколько угодно — это self-paced курс, не сертификация. Но если exam не сдаётся — это сигнал вернуться к урокам модуля и labs, не «угадывать с третьей попытки».
Labs
Лабы — главный артефакт курса. После labs у вас будет:
- LAB-01 — Custom materialization
audit_log. Пишете materialization, которая логирует каждый run в отдельную таблицу_audit_log(что выполнено, когда, кем, сколько строк). Реальное production-применение. 4-6 часов. - LAB-02 — Adapter
dbt-pglitefrom scratch. Пишете полноценный adapter для pglite (Postgres-compatible WASM SQLite). Cookiecutter scaffold, Credentials, ConnectionManager, Relation, required macros, dbt-tests-adapter suite (≥50% tests passing). 6-8 часов. - LAB-03 — Programmatic dbtRunner в Dagster. Embeds dbt в Dagster orchestrator. Pre-loaded Manifest, thread-safe wrapper, custom event hooks для метрик. 4-6 часов.
- LAB-04 — Large-project optimization case. Берёте симулированный проект на 500+ моделей, профилируете, применяете partial parse tuning, threads tuning, defer + state:modified, microbatch parallel. Замеряете до/после. 4-6 часов.
Лабы можно делать в произвольном порядке после соответствующих модулей, но если время ограничено — приоритет LAB-02 (adapter from scratch). Это самый ценный артефакт для CV и портфолио. И самая обнаживающая лаба — что вы реально поняли по adapter API, что нет.
Время и темп
75-80 часов курса. Реалистичный темп для senior, работающего full-time:
- Aggressive: 5-6 часов в неделю × 13-14 недель = ~3 месяца
- Sustainable: 3-4 часа в неделю × 20-25 недель = ~5 месяцев
- Long-term: 2 часа в неделю × 35-40 недель = ~9 месяцев
Курс не теряет ценность через 9 месяцев — материал по internals меняется медленно (parsing pipeline в dbt стабилен с 1.5+, adapter API стабилен с 1.0+). Что устаревает быстрее — модули 12 (Fusion) и 13 (MetricFlow). В них специально отмечено «as of May 2026», проверяйте версии перед production-решениями.
Не пытайтесь пройти курс за две недели. Senior-материал требует осадки — понятие parse vs execute фазы Jinja не уложится за один вечер. На каждый сложный модуль (01, 03, 07, 09) закладывайте 2-3 раза прочесть с интервалом в пару дней. Между чтениями — открыть source, поскроллить, спросить «а как это работает» на своих проектах.
Что считается «прошёл курс»
Не существует «свидетельства о прохождении» — это самостоятельный курс. Реальный маркер успеха:
- Можете объяснить за 5 минут, что происходит при
dbt runот bash до результата в warehouse. На уровне «парсинг -> manifest -> compilation -> execution через task -> runner -> adapter». Без подглядывания. - Готовы открыть PR в dbt-core или один из адаптеров. Уровень PR — не обязательно epic feature, но что-то осмысленное: bugfix, doc improvement, test coverage.
- Можете написать adapter из cookiecutter за выходные. Не обязательно полный, но scaffold с базовым SELECT и dbt debug — это 4-6 часов senior работы.
- Можете оптимизировать большой dbt-проект за неделю — собрать профиль, найти боттлнеки, применить tuning. С замерами до/после.
Если все четыре пункта — да, курс пройден на 100%. Если три — на 80%. Меньше — стоит вернуться к слабым местам.