Подготовка к алгоритмическим задачам

Код без IDE: как готовиться к whiteboard-интервью
Коротко
| Что пропадает | Чем компенсировать |
|---|---|
| Автодополнение | заучить синтаксис базовых операций |
| Подсветка ошибок | проверять код глазами построчно |
| Запуск и отладка | трассировка на бумаге |
| Быстрое переписывание | продумывать структуру до кода |
Почему это сложнее, чем кажется
Разработчик с пятью годами опыта садится писать разворот связного списка в текстовом документе — и не может. Не потому что не знает алгоритм, а потому что за годы работы половина мышечной памяти ушла в инструменты.
Вы не помните, как пишется сортировка с ключом — вы набираете три буквы и жмёте Tab. Вы не проверяете границы цикла — их проверяет линтер. Вы не держите в голове структуру — её показывает навигация по файлу.
Убрать инструменты — значит обнаружить, на что вы на самом деле опирались. Обычно обнаружение неприятное.
Где это встречается
Whiteboard в буквальном смысле — маркерная доска в офисе. Сейчас редкость, но в некоторых компаниях осталось.
Общий текстовый документ — самый частый вариант в удалённых интервью. Google Docs или простой редактор без подсветки и запуска.
Онлайн-редакторы с отключённым запуском — код виден интервьюеру, но выполнить нельзя.
Скрининг по телефону с кодом в чате.
Общее у всех: обратной связи от машины нет. Единственный компилятор — ваша голова и глаза интервьюера.
Что тренировать
1. Синтаксис базовых операций
Составьте список того, что используете постоянно, и убедитесь, что помните наизусть.
Для Python:
sorted(items, key=lambda x: x[1], reverse=True) d = defaultdict(list) counter = Counter(nums) heapq.heappush(heap, (priority, item)) "".join(chars) enumerate(items, start=1) zip(a, b)
Для JavaScript:
arr.sort((a, b) => a - b) new Map(); map.get(k); map.set(k, v) new Set([...]) arr.reduce((acc, x) => acc + x, 0) Object.entries(obj)
Звучит примитивно, но именно на этом спотыкаются: человек знает алгоритм и десять секунд вспоминает, как пишется компаратор.
2. Писать без подсветки
Практический приём: решайте задачи в обычном блокноте. Не в VS Code с отключёнными плагинами, а именно в текстовом редакторе без ничего.
Через десять задач вы начнёте замечать, что стали внимательнее к скобкам и точкам с запятой — просто потому, что за вас их больше никто не считает.
3. Трассировка на бумаге
Ключевой навык. Запустить код нельзя, значит проверять придётся мысленно, а мысленно человек проверяет плохо — он видит то, что хотел написать.
Метод: возьмите маленький вход и выпишите значения переменных на каждой итерации.
nums = [3, 1, 2], target = 4
i=0: x=3, need=1, seen={} → нет, seen={3:0}
i=1: x=1, need=3, seen={3:0} → есть! return [0, 1]
Три строки, зато ошибка на границе видна сразу. Делайте это вслух — интервьюеру это тоже нравится.
Решай алгоритмические задачи как профи

4. Структура до кода
Когда переписывать дорого, планировать выгодно. Перед тем как писать, проговорите:
- какие переменные понадобятся;
- какой основной цикл;
- что возвращаем.
Тридцать секунд планирования экономят пять минут переписывания.
Приёмы во время интервью
Оставляйте место. На доске пишите с большими отступами между строками — почти наверняка придётся что-то вставить. В документе — пустые строки между блоками.
Пишите сверху вниз, а не набело. Сначала скелет: сигнатура, основной цикл, return. Потом наполнение. Так вы не потеряете структуру, застряв в деталях.
def twoSum(nums, target): # TODO: словарь виденных for i, x in enumerate(nums): # TODO: проверить дополнение pass return []
Заглушки — нормальный приём. Интервьюер видит, что структура у вас в голове есть.
Не стесняйтесь псевдокода. «Здесь я бы отсортировал по второму элементу, синтаксис не помню точно» — абсолютно приемлемо. Никто не проверяет память на API.
Проговаривайте, что пишете. Без подсветки интервьюеру сложнее следить за вашим кодом, и комментарий вслух помогает обоим.
Проверяйте перед тем, как сказать «готово». Пробегитесь глазами: скобки закрыты, переменные объявлены, границы циклов, что возвращается в случае «не нашли». Тридцать секунд, которые ловят половину ошибок.
Частые ошибки
Мелкий почерк на доске. Через десять строк вы упрётесь в край и начнёте писать поверх. Пишите крупно и в верхней трети — низ доски плохо виден.
Молчаливое написание. Без запуска кода единственный канал связи — ваша речь. Молчащий кандидат оставляет интервьюера в темноте.
Стирание и переписывание с нуля. Признак того, что структуру не продумали. Лучше поправить существующее, комментируя, что и почему меняете.
Паника из-за синтаксиса. Забыли, как пишется что-то — скажите вслух и продолжайте. Остановка на этом месте выглядит хуже, чем пробел в памяти.
Игнорирование крайних случаев. Без тестов их некому проверить, кроме вас. Проговорите вслух: пустой ввод, один элемент, дубликаты.
Как это тренировать за неделю
День 1–2. Выпишите список базовых конструкций своего языка и убедитесь, что помните наизусть. Проверьте себя без подсказок.
День 3–5. Решайте по две задачи в день в чистом блокноте. Обязательно с трассировкой на бумаге в конце.
День 6–7. То же самое, но вслух и с таймером на 40 минут. Если есть партнёр — с ним.
Неделя такой практики закрывает большую часть проблемы. Дальше поддерживайте по одной задаче в блокноте раз в несколько дней.
Что запомнить
- Без IDE обнаруживается, на сколько подсказок вы полагались, — обычно на больше, чем думали.
- Выучите наизусть синтаксис базовых операций своего языка.
- Трассировка на бумаге заменяет отладчик: выписывайте переменные по итерациям.
- Пишите скелет с заглушками, потом наполняйте — так не теряется структура.
- Псевдокод и «синтаксис не помню точно» — нормально, память на API не проверяют.
- Тренируйтесь в обычном блокноте, а не в IDE с отключёнными плагинами.
