Бакалавриат
2026/2027



Язык программирования Python (углубленный курс)
Статус:
Курс по выбору (Прикладная математика и информатика)
Где читается:
Факультет компьютерных наук
Когда читается:
2-й курс, 1, 2 модуль
Охват аудитории:
для всех кампусов НИУ ВШЭ
Язык:
русский
Кредиты:
5
Контактные часы:
56
Программа дисциплины
Аннотация
На первом курсе вы уже познакомились с Python: писали классы, разбирались с итераторами, щупали декораторы. Этого достаточно, чтобы решать задачи и писать небольшие скрипты — но явно не хватает для понимания того, как устроен язык изнутри и как выглядит настоящий продакшн Python-код.
На этом курсе мы постараемся это исправить. Разберёмся, как работает CPython под капотом, научимся писать строго типизированный код и понимать, зачем это нужно, поговорим про метаклассы и дескрипторы — те самые штуки, на которых держатся все любимые фреймворки. Потрогаем asyncio и корутины, разберёмся с многопоточностью и тем, почему в Python она работает именно так. Напишем биндинги к C-коду и поймём, как Python дружит с другими языками. Научимся правильно паковать и распространять свой код, отлаживать его через pdb и покрывать код тестами
Мало теории — много практики. Планируются мелкие задачи и два больших домашних задания.
Цель освоения дисциплины
- Проектирование и упаковка Python-библиотек для production (pyproject.toml, wheel, PyPI, C-extensions)
- Работа с продвинутой системой типов Python на уровне библиотечного кода (Protocol, Generic, variance, Overload, mypy --strict)
- Многопоточность, многопроцессность и асинхронное программирование (GIL, threading, multiprocessing, asyncio, subinterpreters, free-threading)
- Понимание внутренностей CPython: байткод, adaptive interpreter + JIT, memory model, garbage collector
- Отладка, профилирование и оптимизация производительности (dis, inspect, sys.monitoring, cProfile, py-spy, memray)
- Продвинутые механики объектной модели: дескрипторы, метаклассы, dataclass_transform
- Продвинутые механики объектной модели: дескрипторы, метаклассы, dataclass_transform
- Ускорение критичных участков через Cython и C-bindings
Планируемые результаты обучения
- Упаковка Python-кода в installable-пакеты с C-extensions и публикация на PyPI
- Проектирование типизированных API уровня библиотеки под mypy --stric
- Написание корректного concurrent- и async-кода (threading, multiprocessing, asyncio) с пониманием GIL и субинтерпретаторов
- Профилирование и оптимизация Python-кода до скоростей, приемлемых для production (в т.ч. через Cython)
- Отладка и introspection произвольного Python-кода на уровне байткода и объектной модели
Содержание учебной дисциплины
- Фундамент + инженерия
- Concurrency
- Метапрограммирование
- Внутренности CPython
- Наружу
Элементы контроля
- ЗадачиПрактические задачи выдаются после соответствующей лекции и семинара. Каждая задача — самостоятельный проект в форке студенческого репозитория (SourceCraft), с готовыми тестами и спецификацией.
- СеминарыСеминары идут параллельно с лекциями, один раз в неделю. Окончательный формат каждого семинара определяет ведущий его семинарист
- Мок интервьюМок-интервью — устная форма контроля в формате технического собеседования, имитирующая Python-интервью. Проходит на последних 2-3 лекциях семестра (декабрь) Часть I. Теория (~15 минут). Интервьювер задаёт 4-5 открытых вопросов равномерно по блокам курса. Формат — открытые вопросы, требуют объяснения "почему". Примеры: "почему list[Dog] нельзя передать вместо list[Animal], а Sequence[Dog] — можно?", "чем logger.error(exc) хуже logger.exception()?". Часть II. Разбор задач (~15 минут). Экзаменатор выбирает несколько задач из сданных студентом. Студент рассказывает, как устроено его решение, почему выбрал именно такой подход, какие видит компромиссы, и отвечает на уточняющие вопросы.