Пишу 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-ассистентов: пару западных сервисов и один российский. Почитал, попробовал несколько на реальных созвонах.
У каждого оказались свои ограничения - и неожиданные плюсы. Про конкретный опыт написал отдельно, там же про этический вопрос который неизбежно возникает: читать тут
Интересно послушать у кого похожий опыт - знаешь, пишешь каждый день, но на объяснении вслух провал. Это лечится или просто надо набить достаточно созвонов?