Learning Platform
Глоссарий Troubleshooting
Урок 01.01 · 8 мин
Начальный
PythonDSACore PythonВведение

Приветствие: почему этот курс другой

Это курс по Python для будущих Data Engineer’ов, которые уже умеют написать if x > 0: и прочитать JSON из файла, и теперь хотят понимать что происходит под капотом. Это не “Python за 30 дней”. Здесь мы разбираем язык на уровне CPython source, hash table internals, memory layout и cache lines — потому что без этого нельзя честно рассуждать о производительности pandas, Polars или PyArrow.

Если вы пришли искать “Python для абсолютных новичков” — это не тот курс. Если вы ищете “почему dict действительно работает за amortized O(1)” — добро пожаловать.


Что вы получите

  • Объяснять почему dict lookup amortized O(1) — на уровне hash function (SipHash), open addressing с perturbation (5*i + 1 + perturb) mod size, load factor USABLE_FRACTION = 2/3
  • Читать CPython source (Objects/listobject.c, Objects/dictobject.c, Objects/longobject.c) и понимать формулу геометрической реаллокации (newsize >> 3) + (newsize < 9 ? 3 : 6)
  • Различать какие операции дёшевы из-за contiguous memory и cache locality, а какие дороги из-за random access и cache misses
  • Писать Pythonic код: comprehensions, generator expressions, *args/**kwargs, контекстные менеджеры, декораторы — не как “магию”, а как конкретные конструкции с понятной semantics
  • Соединять Python knowledge с pandas / Polars / PyArrow через общий нижний слой: PEP 393 строки, Arrow columnar layout, NumPy ndarray contiguous buffers
  • Применять амортизационный анализ (CLRS гл. 17) к реальному Python: list.append, dict resize, set membership

Что курс НЕ делает

  • Не учит installing Python на вашей машине — code challenges работают на Pyodide прямо в браузере
  • Не учит Jupyter notebook integration — code challenges это замена; вы пишете Python в браузерном editor’е и сразу видите результат
  • Не показывает работающий asyncio / multiprocessing / sockets — Pyodide WASM их не поддерживает (см. урок 03); такие темы преподаются conceptual
  • Не углубляется в pandas API — это отдельный пласт, в нашем курсе только conceptual слой (Module 10); глубокий курс по pandas — отдельная фаза разработки

Глубина, которая нужна Data Engineer’у

Когда вы пишете df.groupby("user_id").agg({"amount": "sum"}) в pandas, в основе — hash table. Понимать почему load factor влияет на скорость = понимать почему вы ловите memory pressure и slowdown при определённых cardinalities группировки. Когда вы пишете pl.scan_parquet(...).filter(...).collect() в Polars, под капотом — Arrow columnar buffers, contiguous memory, cache-line-friendly обход. Понимать почему колоночное чтение быстрее = понимать что делает CPU prefetcher.

Без знания CPython internals вы можете писать рабочий код, но не сможете его оптимизировать — и не сможете отличить “медленно потому что pandas” от “медленно потому что я создал миллион intermediate Python objects вместо vectorized операции”.

TIP

Откройте github.com/python/cpython/blob/3.13/Objects/listobject.c и Objects/dictobject.c сейчас в соседней вкладке. Не бойтесь C — комментарии полные, и мы будем переводить ключевые места по ходу. Все ссылки на CPython source в курсе — реальные, без академических упрощений.


Структура курса

Курс состоит из 14 модулей (M00–M13). Phase 65 покрывает M00–M03 — orientation плюс DSA-фундамент. Остальные модули будут авторизованы в последующих фазах разработки.

M00: Введение в курс                         <- вы здесь (free preview)
M01: Основы Python и DSA-уровень
M02: Структуры данных: внутреннее устройство
M03: Функции и модули
M04: ООП в Python
M05: Итераторы и генераторы
M06: Декораторы и контекстные менеджеры
M07: Type Hints (Python 3.13)
M08: Тестирование с pytest
M09: Файловый I/O и форматы данных
M10: Pandas, Polars, PyArrow (conceptual)
M11: Логирование и мониторинг
M12: Производительность и профилирование
M13: Packaging и окружение

M00 — бесплатный preview: вы сейчас читаете без оплаты. Модули M01–M13 требуют one-time payment 500 Telegram Stars (детали в уроке 04).


Cross-course context

ClickHouse: анатомия Part ClickHouse: колоночная OLAP СУБД System Design Data Engineer — карта DE-стека

Python — швейцарский нож Data Engineer’а; production-уровневые query engines заслуживают отдельного изучения. Cross-course → DataFusion 00/02 what-is-datafusion — Rust query engine с Arrow в основе; те же principles columnar processing, что мы будем разбирать в M02 (list internals) и M10 (pandas/Polars/PyArrow conceptual). Cross-course → ClickHouse 00/01 what-is-clickhouse — OLAP колоночная СУБД, в которой Python используется как клиент; знание Python-internals из этого курса напрямую пригодится в clickhouse-driver и async clients.


Ключевые выводы

  1. Этот курс — про «почему», а не «как написать одну строку»
  2. DSA / hardware level — не опция, а контракт: каждый разбор структуры данных доходит до memory layout, hash internals и cache implications
  3. Pyodide ограничивает то, что можно запустить в браузере (никаких сокетов, процессов, тредов), но не то, что можно понять — concept-уроки покрывают и WASM-несовместимые темы

Как создавался курс

Курс создан при участии Claude (Anthropic) как соавтора: ИИ помогал писать материалы, структурировать темы, генерировать примеры кода и диаграммы. Каждая глава проходила ручную сверку с первоисточниками — спецификациями, документацией, исходным кодом рассматриваемых систем — но гарантировать 100% точность невозможно.

Если вы заметили неточность, опечатку или хотите предложить улучшение — напишите в Telegram-группу курса. Это самый ценный вклад в курс, который вы можете сделать.


Углублённое изучение с Claude

Курс рассчитан на самостоятельное изучение, но любая теория быстрее ложится, если задавать вопросы. Рекомендую держать рядом браузерное расширение Claude (claude.com/download) — оно работает с контентом открытой страницы: выделяете кусок урока и спрашиваете напрямую.

Сценарии, которые особенно хорошо работают для углублённого погружения:

  • «Объясни проще» / «дай ещё один пример» — когда формулировка из урока не дошла с первого раза.
  • «Покажи, как это устроено на уровне кода / железа» — когда хочется спуститься на слой ниже того, что даёт урок.
  • «Как это связано с [другая тема курса]» — когда нужно увязать концепцию с тем, что было раньше.
  • «У меня в проекте стек X — как применить?» — когда хочется примерить материал на свой реальный кейс.

Это не замена курсу, а способ ускорить интеграцию материала в вашу картину мира. Если что-то из ответов Claude расходится с уроком — присылайте в Telegram-группу, курс будет уточнён.


Нашли ошибку?

Если заметили неточность, опечатку или хотите предложить улучшение:

Telegram-группа курса
Обсуждение, вопросы, предложения

Telegram-канал

Подписывайтесь, чтобы узнавать об обновлениях и новых курсах:

@levoely_channel
Новости, обновления, новые курсы

Проверьте понимание

Результат: 0 из 0
Концептуальный
Вопрос 1 из 5. Какое ключевое отличие подхода этого курса от типичного LeetCode-туториала?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 4