Пишу async/await каждый день. Объяснить event loop не смог

три года в Python, последние полтора - соло-проекты и фриланс. FastAPI, Django, PostgreSQL. Написал несколько тысяч строк async-кода.

Полгода назад на техническом спросили: "Расскажи как работает event loop в Python"

Вышло что-то вроде "ну это такая штука которая управляет... асинхронными задачами... в одном потоке". Пауза. Ещё попытка. Интервьюер вежливо кивнул и перешёл дальше.

Через 20 минут после звонка открыл документацию - и прочитал ровно то, что хотел сказать. Всё было в голове. Просто не вышло произнести.

Это не про незнание

Я не путаю asyncio с многопоточностью. Понимаю что event loop - это цикл который берёт задачи из очереди и выполняет до ближайшего await. Знаю разницу между coroutine, task и future. Использую asyncio.gather, asyncio.wait_for, asyncio.create_task - и понимаю зачем.

Но объяснить это вслух, по требованию, под взглядом интервьюера - другая задача. Голова начинает искать "правильную" формулировку вместо того чтобы просто говорить. И пока ищет - выдаёт пустоту.

Поговорил с парой знакомых - у одного похожее было с GIL, у другого с metaclass. Оба знали тему, оба провалились именно на объяснении. Не редкость, просто об этом не особо говорят.

Откуда берётся разрыв

когда ты что-то делаешь каждый день, знание уходит в мышечную память. Перестаёшь думать о механике - просто делаешь. Пишешь async def не потому что сознательно применяешь теорию, а потому что так работает. Знание становится процедурным, а не декларативным.

На собесе нужно обратное. Взять это процедурное знание, развернуть в вербальную цепочку и произнести вслух в реальном времени. Для мозга это немного другая операция, и переключение происходит не мгновенно.

В психологии это называют разрывом между имплицитным и эксплицитным знанием. Эксперты часто хуже объясняют базовые вещи именно потому что перестали их осознавать. На собесе работает в ту же сторону.

Что обычно советуют

"Объясняй вслух" - работает, если делать регулярно. Я начал объяснять технические вещи воображаемому собеседнику пока иду за кофе. Звучит странно, немного помогает))

"Пиши конспекты своими словами" - тоже полезно. Когда пишешь как будто объясняешь кому-то другому - вылезают дыры в понимании, о которых не знал.

"Делай mock-собесы" - самое рабочее. Нашёл в одном django-чате человека со схожим стеком, несколько раз погоняли друг друга по вопросам. Это реально перестраивает то как отвечаешь. Проблема - найти человека под конкретный стек и свободное время прямо перед нужным собесом это отдельный квест.

Подготовка к контенту и подготовка к состоянию - разные вещи

Вот что я заметил. Есть два вида готовности, и большинство советов закрывают только первый.

Контент - знаешь или не знаешь. Подтягивается за неделю.

Состояние - это про то что происходит с головой когда интервьюер смотрит и ждёт. У меня в такие моменты включается режим "надо звучать умно", и вместо того чтобы просто говорить - начинаю редактировать мысль ещё до того как она вышла. В итоге не выходит ничего.

Сколько бы раз ни повторял тему по конспекту - это не тренирует тот конкретный момент. Нужно что-то другое.

Что нашёл

Про управление стрессом перед созвоном читал разное. Дыхательные техники, визуализация, "представь что это просто разговор". Работает примерно никак, у меня по крайней мере.

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

У каждого оказались свои ограничения - и неожиданные плюсы. Про конкретный опыт написал отдельно, там же про этический вопрос который неизбежно возникает: читать тут

Интересно послушать у кого похожий опыт - знаешь, пишешь каждый день, но на объяснении вслух провал. Это лечится или просто надо набить достаточно созвонов?

Пишу async/await каждый день. Объяснить event loop не смог | Сетка — социальная сеть от hh.ru