Как задавать вопросы правильно

Хороший вопрос экономит время и вам, и тому, кто отвечает. Учимся формулировать так, чтобы помогли быстро.

Минимальный воспроизводимый пример (MRE) — наименьший кусок кода и данных, на котором проблема воспроизводится, без всего лишнего.

Почему «не работает» — плохой вопрос

«У меня не работает, помоги» заставляет помогающего вытягивать из вас детали по одной: что не работает? как запускал? что в ошибке? Это превращает помощь в допрос и тратит время обоих. Хороший вопрос содержит всё нужное сразу.

Структура хорошего вопроса

1. Что я делаю      — цель и контекст
2. Что я ожидал     — какой результат должен быть
3. Что получилось   — фактический результат, текст ошибки
4. Что уже пробовал  — чтобы не советовали очевидное
5. MRE              — минимальный код/шаги для повтора
ПлохоХорошо
«Почему падает?»«При POST /orders ожидаю 201, получаю 500. В логе: KeyError 'user_id'. Шлю JSON без user_id специально. Должен ли бэк его требовать?»
«Git сломался»«После git pull получаю конфликт в lockfile. Пробовал git checkout --theirs, не помогло. Как правильно разрешить?»

Как собрать минимальный пример

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

def average(numbers):
    return sum(numbers) / len(numbers)

print(average([]))

Вывод:

ZeroDivisionError: division by zero

Вот это — хороший MRE: три строки, любой может вставить и увидеть ту же ошибку. Не «вся функция обработки заказа на 200 строк», а минимум.

Как работает под капотом

Когда вы готовите MRE, вы делаете за помогающего самую дорогую часть — локализацию. Ему остаётся только узнать причину, а не воспроизводить вашу среду. Поэтому на хорошо оформленные вопросы (на StackOverflow, в чате команды) отвечают в разы чаще и быстрее: цена ответа низкая.

Правило «поищи 15 минут, потом спрашивай»

Баланс между «спросить сразу» и «копать вечно»: потратьте разумное время на самостоятельный поиск (ошибка в гугле, документация, чтение кода), чтобы не дёргать людей по тривиальному. Но не застревайте на полдня из гордости — застрявший на 4 часа джун дороже, чем вопрос на 5 минут.

Частые ошибки

  • Скриншот текста ошибки вместо текста. По тексту можно искать и копировать, по картинке — нет.
  • «Срочно!!!» без сути. Срочность не заменяет деталей.
  • Личка вместо общего канала. В общем канале ответят быстрее и ответ останется другим.
  • Не сказать, что уже пробовал. Получите советы, которые уже не сработали.

Итог

  • Хороший вопрос содержит: цель, ожидание, факт, что пробовали, MRE.
  • Минимальный воспроизводимый пример — главный инструмент: часто вы решаете проблему, пока его собираете.
  • Текст ошибки — текстом, не скриншотом.
  • Поищите сами, но не застревайте из гордости.
Проверьте себя
1. Что такое минимальный воспроизводимый пример (MRE)?
AВесь проект целиком
BНаименьший код и данные, на которых проблема воспроизводится, без лишнего
CСкриншот ошибки
DОписание проблемы словами без кода
2. Какой пункт НЕ входит в структуру хорошего вопроса из урока?
AЧто я ожидал получить
BЧто уже пробовал
CСколько лет опыта у того, кто отвечает
DФактический результат и текст ошибки
3. Почему текст ошибки лучше присылать текстом, а не скриншотом?
AСкриншоты запрещены
BПо тексту можно искать в поиске и копировать, по картинке — нет
CТекст красивее
DЭто не имеет значения