Как правильно задавать вопросы, или «Проблема XY»

Вы читаете свежую версию статьи. Мы обновили материал, изначально опубликованный 7 января 2017 года.

Что за «Проблема XY»?

Это ошибка, которая зачастую приводит к бессмысленной трате времени как просящего о помощи, так и тех, кто пытается ему отвечать. Её ещё называют «Проблемой Молотка». Суть её, если коротко, заключается в том, что люди склонны спрашивать о своих неудачных попытках решить проблему, а не о самой проблеме. В итоге получается примерно так:

  • Человек хочет сделать X;
  • Он не знает, как сделать X, но догадывается, что к успеху может привести выполнение Y;
  • Тем не менее человек не знает и то, как сделать Y;
  • В этот момент он решает попросить помощи у других людей;
  • Все пытаются помочь человеку с проблемой Y, удивляясь и не понимая, зачем кому-то вообще это может быть нужно;
  • После длительных расспросов и ценой уймы потерянного времени наконец-то становится понятно, что человек на самом деле хотел решить X, а Y никак ему помочь не сможет.

А почему «Проблема Молотка»?

Из-за наглядного, хоть и утрированного, примера:

firstso

Источник иллюстрации: Stack Overflow, автор: Nick Volynkin

secondso

Источник иллюстрации: Stack Overflow, автор: Nick Volynkin

А можно каких-нибудь более жизненных примеров?

Конечно:

n00b: Как мне вывести последние три символа файла?

feline: Ну, например, так: echo ${foo: -3}
feline: А зачем три символа? Что надо-то?
feline: Может, расширение файла?

n00b: Да.

feline: Так и говори прямо, чего хочешь!
feline: Не факт, что каждое имя файла имеет трехбуквенное расширение.
feline: Так что тупо взять три последних символа — это не решение проблемы.
feline: Нужно так: echo ${foo##*.}

Или…

Angela: ‘nmap -O -A 127.0.0.1’ возвращает несколько строк, начинающихся с ‘OS:’. Как изменить это?
Obama: Глянь в исходники nmap, отыщи то место, где оно определяет ось, и перепиши TCP/IP стек, чтобы тот ничем не выдавал nmap операционную систему.
Angela: Круто, но я ничего не знаю про api linux’а.
Obama: Очень жаль, но, похоже, кроме как переписать TCP/IP стек, никакого выхода нет.
Angela: Но мне ооочень нужно избежать подобных сообщений :с Может iptables мне поможет?
Obama: Ну, ты можешь просто не использовать обнаружение ОС, в чём проблема?
Angela: Я хочу, чтобы и другие не могли узнать, какая у меня операционка.

Да, похоже, так можно потерять немало времени. И какая же мораль?

Чтобы избежать проблемы XY, стоит придерживаться следующих несложных правил:

  • Предоставлять достаточно широкую информацию  о решаемом вопросе — кроме самого неудачного примера стоит написать, чего вы хотите добиться в целом;
  • Если кто-то просит у вас больше информации о проблеме, вероятно, стоит эту информацию предоставить;
  • Всегда пишите о том, что вы уже пробовали делать и почему от этого отказались. Это поможет точнее определить, что именно вам необходимо.

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

Ещё интересное для вас:
— Биты, байты, Ада Лавлейс — тест на знание околоIT.
— Level Up — события и курсы, на которых можно поднять свой уровень.
— Работа мечты — лучшие IT-вакансии для вас.