10 шокирующих ошибок на собеседовании Data Science, которые могут стоить вам senior‑позиции

19 марта 2026 г.

Вступление

Собеседования в сфере Data Science давно перестали быть простым «проверочным листом» — они превратились в настоящие испытания, где на кону стоит не только ваш профессиональный статус, но и психологическое состояние. По данным крупнейших рекрутинговых агентств, более 70 % кандидатов не проходят первый технический раунд, а среди тех, кто дошёл до финального этапа, около 30 % признаются, что «потеряли уверенность» в самый критический момент. Это свидетельствует о том, что даже опытные специалисты могут «потеряться» под давлением.

В этой статье мы разберём реальную историю из Reddit, где специалист с восьмилетним опытом в аналитике и науке о данных провалил собеседование на senior‑уровень. Мы проанализируем, какие психологические и технические факторы сыграли роль, какие выводы можно сделать из комментариев сообщества, и предложим практические рекомендации, которые помогут подготовиться к следующему раунду.

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

Тихо в зале,
сердце стучит громом,
путь поднимает пыль.

Пересказ Reddit‑поста своими словами

Автор поста, назовём его Алексей, рассказывает о своём недавнем интервью на позицию senior Data Scientist. За плечами у него восемь лет работы в смежных областях — аналитика, построение моделей, визуализация данных. До этого он занимал позиции среднего уровня и чувствовал себя уверенно.

Собеседование началось с типовых вопросов о поведении, мотивации и примерах реализованных проектов. На этом этапе Алексей отвечал чётко, приводил конкретные кейсы, и атмосфера казалась благоприятной. Однако, когда интервьюеры перешли к технической части — вопросам по SQL и оптимизации запросов — ситуация резко изменилась.

Сначала он смог дать несколько правильных ответов, но дальше последовали вопросы о оконных функциях (window functions) и сложных запросах с несколькими CTE (Common Table Expressions). Алексей знал, как их использовать, но не смог объяснить логику работы, и его мысли «заперлись» в пустоте.

Директор, заметив затруднение, резко спросил: «В чём разница между WHERE и HAVING?». Вопрос прозвучал почти как проверка базовых знаний, и Алексей ощутил, как его уверенность падает до нуля. После короткого извинения он попытался вернуться в поток, но в ответ на следующий вопрос произнёс громкое «Э-э?», после чего почувствовал сильный дискомфорт в желудке.

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

В итоге он предвидит отказ, но делится своей историей, чтобы показать, что тревога и нервозность могут подорвать даже самых опытных специалистов. Он подчёркивает, что многие посты в Reddit показывают «идеальных» кандидатов, но реальность часто гораздо сложнее.

Суть проблемы, хакерский подход и основные тенденции

Суть проблемы сводится к двум взаимосвязанным аспектам:

  • Психологический фактор: страх, тревога и физические реакции (боль в желудке, покраснение лица) мешают ясно мыслить.
  • Технический разрыв: недостаточная отработанность базовых SQL‑концепций (WHERE vs HAVING, оконные функции, CTE) в условиях давления.

Тенденция, наблюдаемая в индустрии, — рост количества вопросов, выходящих за рамки «базовых» навыков. Компании всё чаще проверяют способность кандидата быстро адаптироваться к новым инструментам, а не только знание конкретных технологий. Это создаёт «хакерский» подход к подготовке: вместо запоминания синтаксиса необходимо развивать гибкость мышления и умение объяснять решения простыми словами.

Детальный разбор проблемы с разных сторон

1. Психологический аспект

Страх публичного выступления (социальная тревожность) активирует симпатическую нервную систему: учащается пульс, повышается уровень кортизола, снижается когнитивная гибкость. Исследования показывают, что в условиях повышенного стресса мозг переключается в режим «выживания», а не «аналитический», что приводит к «провалам» в тех областях, где обычно человек силён.

2. Техническая подготовка

SQL остаётся фундаментом для большинства позиций Data Science. Однако многие специалисты, сосредоточившись на машинном обучении, пренебрегают регулярной практикой запросов. Вопросы про WHERE и HAVING, оконные функции (ROW_NUMBER(), RANK()) и CTE часто задаются именно для проверки глубины понимания, а не просто знания синтаксиса.

3. Коммуникация и объяснение

Умение «продать» своё решение — навык, который часто недооценивают. На интервью важно не только решить задачу, но и объяснить её так, чтобы интервьюер понял ваш мыслительный процесс. Неспособность сформулировать ответ приводит к ощущению «потери контроля».

Практические примеры и кейсы

Рассмотрим два типичных кейса, которые часто встречаются в интервью.

Кейс 1. Оконные функции

Задача: для каждой категории продаж подсчитать кумулятивную сумму, упорядочив записи по дате.

Типичный ответ без оконных функций требует вложенных запросов, тогда как правильный подход использует SUM() OVER (PARTITION BY category ORDER BY date). На интервью важно объяснить, почему именно такой запрос более эффективен (один проход по таблице, отсутствие временных таблиц).

Кейс 2. Разница WHERE и HAVING

Задача: выбрать группы, где средний доход превышает 100 000, но при этом отфильтровать строки, где дата позже 2022‑01‑01.

Ответ: условие по дате ставится в WHERE, а условие по агрегату — в HAVING. Объяснение должно включать порядок выполнения запросов: сначала фильтрация строк (WHERE), затем группировка и агрегирование, затем фильтрация групп (HAVING).

Экспертные мнения из комментариев

«В конце концов, если вы достаточно часто «бомбите» технические интервью, это перестаёт так сильно ранить. Вы просто принимаете, что эта работа не для вас, и это нормально. Делайте заметки, над чем стоит поработать в следующий раз.»

— Lady_Data_Scientist

«Проблема Data Science в том, что база знаний настолько широка. У кого‑то 15 лет опыта со Scala, у кого‑то ноль. Представьте интервью, где задают тонну вопросов по Scala. Это не значит, что кандидат глупый или неквалифицированный.»

— Trick-Interaction396

«Разве это не происходит постоянно? Большинство интервью в моей жизни я провалил. Обычно мне нужно отправить 600 заявок, из которых 20‑25 проходят в интервью, и только потом появляется предложение. Я удивлён, что вы описываете ситуацию как необычную. Обычно всё наоборот — вы проваливаете большинство интервью и надеетесь, что один из 25 пройдёт успешно. Всё случайно. Может, у вас в день интервью началось менструация, а может, ребёнок проснулся три раза ночью, и вы спали три часа. Такое со мной происходит постоянно.»

— neuro-psych-amateur

«Если они были настолько грубы, то вы избежали пули.»

— 1Lincoyan

«Я Senior Data Scientist уже несколько лет. Я бы сгорел в прямом смысле слова, если бы меня проверяли по SQL, как в этом интервью. Я почти не трогал его годами.»

— ghostofkilgore

Из комментариев можно выделить несколько ключевых мыслей:

  • Неудачи — часть процесса; важно воспринимать их как возможность для роста.
  • Широкий спектр требований к Data Scientist делает каждое интервью уникальным.
  • Психологический стресс часто сильнее технических пробелов.
  • Грубость интервьюеров может быть индикатором плохой корпоративной культуры.
  • Даже senior‑специалисты могут «запотеть» по базовым вопросам, если они давно не практиковали их.

Возможные решения и рекомендации

Ниже перечислены практические шаги, которые помогут минимизировать риск «провала» в следующем интервью.

1. Регулярная отработка SQL‑навыков

  • Выделяйте минимум 30 минут в день на решение задач из LeetCode (раздел Database) или HackerRank.
  • Создавайте «тренировочный набор» запросов: оконные функции, CTE, подзапросы, агрегаты, индексы.
  • Периодически пересматривайте базовые концепции (разница WHERE/HAVING, порядок выполнения запросов).

2. Тренировка объяснения «вслух»

  • Проводите «мок‑интервью» с коллегами, где вам нужно объяснять решение, как будто перед панелью интервьюеров.
  • Записывайте себя на видео, а затем анализируйте, где теряете нить мысли.
  • Используйте метод «пять почему», чтобы глубже раскрывать каждое решение.

3. Управление стрессом

  • Освойте техники дыхания (4‑7‑8) и короткие медитации перед интервью.
  • Соблюдайте режим сна за сутки до интервью (не менее 7 часов).
  • Разработайте «план B»: заранее подготовьте фразы, которые помогут «переключить» внимание, если вы застряли (например, «Позвольте уточнить условие задачи»).

4. Оценка корпоративной культуры

  • Обратите внимание на манеру общения интервьюеров. Грубость может свидетельствовать о токсичной атмосфере.
  • Не бойтесь задать вопросы о процессе обратной связи и о том, как в компании поддерживают развитие сотрудников.

Заключение с прогнозом развития

История Алексея — яркий пример того, как сочетание психологического давления и недостаточной практики базовых навыков может привести к провалу даже у опытного специалиста. Тенденция роста «мульти‑дисциплинарных» интервью будет только усиливаться: работодатели ищут гибкость, а не только узкую экспертизу.

В ближайшие годы мы, скорее всего, увидим усиление роли «soft‑skills» в технических интервью: умение объяснять, задавать уточняющие вопросы и управлять собственным стрессом станет обязательным требованием. Поэтому подготовка должна стать более комплексной: не только «решать задачи», но и «прокачивать мозг» на устойчивость к давлению.

Если вы уже столкнулись с подобными трудностями, помните, что каждый «провал» — это шанс пересмотреть свои слабые места и стать сильнее. А если вы только планируете идти в Data Science, начните с построения прочного фундамента в SQL и отработки навыков коммуникации уже сегодня.

Практический пример (моделирующий ситуацию)

Ниже представлен скрипт на Python, который имитирует типичный вопрос по разнице между WHERE и HAVING. Скрипт генерирует случайный набор данных, создаёт SQLite‑базу, а затем выводит два запроса: один с условием в WHERE, другой — в HAVING. Комментарии внутри кода помогут понять, почему результаты могут различаться.


import sqlite3
import random
import string

# Функция генерирует случайную строку фиксированной длины
def random_string(length=5):
    return ''.join(random.choice(string.ascii_uppercase) for _ in range(length))

# Создаём соединение с временной базой в памяти
conn = sqlite3.connect(':memory:')
cur = conn.cursor()

# Создаём таблицу продаж
cur.execute('''
    CREATE TABLE sales (
        id INTEGER PRIMARY KEY,
        product TEXT,
        region TEXT,
        amount REAL,
        sale_date TEXT
    )
''')

# Заполняем таблицу случайными данными
for i in range(1, 101):
    product = random.choice(['A', 'B', 'C'])
    region = random.choice(['North', 'South', 'East', 'West'])
    amount = round(random.uniform(5000, 20000), 2)
    # Даты в диапазоне 2021‑2023
    year = random.choice([2021, 2022, 2023])
    month = random.randint(1, 12)
    day = random.randint(1, 28)
    sale_date = f'{year}-{month:02d}-{day:02d}'
    cur.execute('INSERT INTO sales (product, region, amount, sale_date) VALUES (?, ?, ?, ?)',
                (product, region, amount, sale_date))

conn.commit()

# Запрос 1: фильтрация по дате в WHERE, агрегат в HAVING
query_where_having = '''
    SELECT product, AVG(amount) AS avg_amount
    FROM sales
    WHERE sale_date >= '2022-01-01'          -- фильтрация строк до группировки
    GROUP BY product
    HAVING AVG(amount) > 12000               -- фильтрация уже сформированных групп
'''
print('--- Результат запроса с WHERE и HAVING ---')
for row in cur.execute(query_where_having):
    print(row)

# Запрос 2: попытка поместить условие по дате в HAVING (ошибочный подход)
query_having_only = '''
    SELECT product, AVG(amount) AS avg_amount
    FROM sales
    GROUP BY product
    HAVING sale_date >= '2022-01-01' AND AVG(amount) > 12000
'''
print('\\n--- Попытка использовать HAVING для фильтрации дат (некорректно) ---')
try:
    for row in cur.execute(query_having_only):
        print(row)
except sqlite3.OperationalError as e:
    print('Ошибка выполнения:', e)

# Закрываем соединение
conn.close()

В этом примере первый запрос корректно разделяет фильтрацию строк (WHERE) и фильтрацию агрегатов (HAVING). Второй запрос демонстрирует типичную ошибку, когда пытаются использовать HAVING для условий, относящихся к отдельным строкам, что приводит к ошибке выполнения. Такой пример часто задают на интервью, чтобы проверить понимание порядка выполнения операторов.


Оригинал
PREVIOUS ARTICLE