Как я решил сделать серию видео про устройство интерпретатора CPython

6487a5230e3941c22f719cfe518c138f

Привет, Хабр!

Давайте знакомиться: меня зовут Никита Соболев, я core-разработчик CPython, mypy и typeshed. Некоторое время назад я понял, что на русском языке довольно мало контента про устройство CPython внутри. В основном доклады с конференций и статьи. Где-то про память, где-то про GIL, где-то про парсер. Но чтоб системно и по всем основным частям в одном месте — такого я не нашел.

И решил сделать своё! Под катом я расскажу, как я делаю «Лучший курс по Питону»* на Ютюбе. Почему он бесплатный. И почему он такой, какой есть. А еще я расскажу, какая польза будет разработчикам от его просмотра.

* «Лучший курс по Питону» по версии CPython core-разработчиков в России : trollface:

Формат

Нельзя не сказать, что последнее время в интернете стало очень много образовательного контента. Обычно — не очень высокого качества. Даже на Ютюбе каждый день вылезают видео типа «Python за 5 часов», «Как поднять зарплату?» или очередные выборы очередного фреймворка для вебчика. Наверно, кому-то такое может быть полезно. Однако, более глубокий технический контент вымывается из публичной плоскости. Что для меня, как для большого любителя узнать побольше про детали устройства той или иной технологии — довольно печально.

Плюс, довольно много контента делает упор чисто на практику: «как решить задачу Ч или Ц?». Что уже, конечно, намного полезнее, но все еще не дает возможности утолить свою жажду знаний.

Ну и самое важное: почти все существующие курсы деляют для полных новичков. Если ты хочешь с уровня джуна качаться дальше — то ты сам по себе. Ищи, читай, смотри. Может быть в компании помогут. Если повезет.

С таким мыслительным фоном, я приступил к созданию своего концепта.

Что получилось?

Во-первых, я решил оставить за скобками вопрос «практической применимости». Можно ли где-то на практике применить оптимизацию инструкций байткода в CPython — каждый решает для себя сам. Вопрос, конечно, спорный. Много людей в комментариях пишут: «зачем мне знать, как устроен float»? Ответ очень простой: знание внутренностей позволяет делать более надежные, простые и корректные решения.

Далее: каждое видео строится вокруг одной узкой темы и рассматривает её со всех сторон. Например: в видео про float есть и про токенайзер, и про C структуру PyFloatObject, и про вопросы точности и применимости данного объекта.

Ну и самое необычное: я решил сделать каждое видео разделенным на три части по уровню сложности. Для джунов, мидлов и сеньоров. Например: в видео про + (да, про плюс) на уровне для джунов мы повторяем историю с __add__, __radd__ и NotImplemented . На уровне для мидлов уже говорим про более сложные вещи: атомарность __iadd__, как работает приоритет операций через определение PEG-граммитики и про ast для сложения. Ну, а на уровне для товарищей помидоров говорим про: оптимизацию байткода сложения, тайпслоты для сложения чисел и коллекций.

Такой подход дает возможность говорить об одной штуке с разных строн, что мне очень нравится и позволяет показывать множество частей CPython.

Ну и нельзя не упомянуть формат с интервью. Не все темы я могу подробно и полно изложить самостоятельно. Например: я плохо знаю историю стандрарта IEEE-754 (учитывая, количество версий и обновлений данного стандарта). Но, рассказать про него было необходимо. Я понял, что мне нужна помощь. И я пригласил члена рабочей группы по стандартизации чисел с плавающей точкой из IEEE для интервью об истории и будущем данного стандарта.

У меня уже побывали:

  • Mark Dickinson (https://github.com/mdickinson) — core-разработчик CPython с практическим интересом в числах

  • Michael Overton (https://cs.nyu.edu/~overton/) — автор книги про IEEE-754 и член рабочей группы IEEE по стандратизации чисел с плавающей точкой

  • Alex Waygood (https://github.com/AlexWaygood) — core-разработчик CPython, typeshed и ruff

И конечно же, все материалы (плюс дополнительные ссылки и практические задачки) лежат в репозитории на гитхабе: https://github.com/sobolevn/the-best-python-course

Самый важный для многих вопрос. Почему бесплатный? Кажется, что такой формат единственный возможный: чтобы привлечь известных людей участвовать в нем. И чтобы привлечь аудиторию к самим видео. Ну и я наивно верю, что знания должны быть доступны всем :)

Дальнейшие планы

Планов — очень много! Столько всего, про что нужно рассказать! Про устройство строк и планы по переходу на utf-8 внутри PyUnicodeObject в новых версиях питона. Про функции, PyCodeObject, tp_fastcall, PyFrameObject, замыкания. Про symtable и разные типы «переменных». Про классы и ООП (потребуется видео 3 или 4). Про разные аллокаторы и особенности их работы в режиме nogil. А уж про typing сколько всего можно рассказать, ух!

Суммарно я планирую сделать где-то 50 видео. А может и больше.

Для освещения сложных тем я буду и дальше приглашать интересных гостей, кто приложил руку к созданию технологии из темы видео. Так намного проще, чем все делать самому. И людям, возможно, интереснее.

Заключение

Если в вашей компании есть Python разработчики, и если вы хотите углубить их знания — то смело закидывайте в них ссылку на весь плейлист: https://www.youtube.com/playlist? list=PLbr8rVGhPD0WQgO97Ao67Q-QVuSbm_Zpz

Надеюсь, что людям будет полезно и интересно!

© Habrahabr.ru