User Tools

Site Tools


ru:x-and-y-problem

Предварительные слова

Кто-то сказал вам, что вы можете не рассказать о первоначальном выпуске, поэтому, пожалуйста, прочитайте это внимательно.

Википедия

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

Проблема XY часто встречается в службах технической поддержки или обслуживания клиентов, когда конечный пользователь пытается решить проблему самостоятельно и неправильно понимает ее суть, полагая, что реальная проблема X уже решена, за исключением небольшой детали Y в его решении. Неспособность сотрудников службы поддержки решить реальную проблему или понять суть их запроса может привести конечного пользователя к разочарованию. Ситуация может проясниться, если конечный пользователь спрашивает о какой-то, казалось бы, бессмысленной детали, которая не связана с какой-либо полезной конечной целью. Решение для сотрудников службы поддержки - задавать уточняющие вопросы о том, зачем нужна информация, чтобы выявить корень проблемы и направить конечного пользователя в сторону от непродуктивного пути поиска.


Stack Exchange

Что это такое?
Проблема XY - это вопрос о попытке решения, а не о реальной проблеме.

То есть вы пытаетесь решить проблему X, и вам кажется, что решение Y сработает, но вместо того чтобы спросить об X, когда у вас возникнут проблемы, вы спрашиваете об Y.

====== Проблема ======

Это может привести к разочарованию людей, которые пытаются помочь вам решить проблему, потому что к тому моменту, когда вы спросите об этом, решение, которое вам нужно, может не иметь очевидной связи с проблемой, которую вы пытаетесь решить.

Как избежать этого Чтобы не попасть в эту ловушку, всегда включайте информацию о более широкой картине вместе с любой попыткой решения. Если кто-то просит предоставить дополнительную информацию или задать более конкретный вопрос, расскажите об этом подробнее. Если есть другие решения, которые, по вашему мнению, будут предложены и которые вы уже исключили, не пытайтесь повторить их - вместо этого укажите, почему вы их исключили, поскольку это дает больше информации о ваших требованиях и помогает другим дать более точные ответы.

Пример

В качестве примера можно привести недавний разговор в IRC:

Вопрос: Есть ли функция, возвращающая строку между двумя разделителями?
B: Я не понимаю, что вы имеете в виду, но сомневаюсь, что такая функция уже есть.
C: Разделение и нарезка
D: Разделение тоже
Q: Я попробовал разделить
Вопрос: Я пытался использовать встроенные модули, чтобы получить число между чем-то вроде этого в строке “атрибут1: 50.223, атрибут2: 442.1”
D: Почему бы просто не разобрать строку?
В: Я подумал, что, возможно, есть какие-то встроенные средства разбора.
D: pairs = [x.strip() for x in s.split(“,”)]; attribs = {k: v for x in pairs for k, v in [x.split(“: ”)]}
D: Существует несколько библиотек, но упрощенные форматы достаточно просты - если вас не волнует обработка ошибок
D: По возможности лучше изменить исходный текст, чтобы использовать известный формат, например json или yaml.
Q: Этот код на самом деле происходит из HTML
Q: Но я не знаю, как разобрать Javascript с помощью HTMLParser или как он там называется
D: Это просто встроенный в HTML код или какая-то искаженная версия HTML?
В: Он встроен в HTML
Д: Если это JavaScript (а это так, за исключением отсутствия внешних скобок), то JSON, вероятно, может его разобрать
В: Спасибо
Д: Я не сказал этого прямо: JSON разбирает только структуры данных, а не JS-код
В: Все, что мне нужно для разбора, - это структура данных.

Проблема в том, что на самом деле в том, как разобрать структуры данных JavaScript, а не найти “строку между двумя разделителями”, и все же требуется немало времени и интуиции, чтобы добраться до настоящей проблемы.

Это легче сделать в полностью интерактивном чате (неважно, в каком режиме), но на сайте SE, где вы немного полируете пост, публикуете его, а затем у вас есть 5-30 минут, а то и больше, до получения обратной связи, это действительно помогает двигаться в правильном направлении с самого начала.


XYProblem.info

Проблема XY - это вопрос о попытке решения, а не о реальной проблеме. Это приводит к огромным потерям времени и энергии, как со стороны тех, кто просит о помощи, так и со стороны тех, кто ее оказывает.


Пользователь хочет сделать X.
Пользователь не знает, как сделать X, но думает, что сможет найти решение, если сумеет сделать Y.
Пользователь тоже не знает, как сделать Y.
Пользователь просит помочь ему с Y.
Другие пытаются помочь пользователю в решении проблемы Y, но приходят в замешательство, потому что Y кажется странной проблемой, которую нужно решить.
После долгого общения и траты времени становится ясно, что пользователь действительно хочет помочь с X, и что Y даже не является подходящим решением для X.
Проблема возникает, когда люди застревают на том, что, по их мнению, является решением, и не могут отступить и объяснить проблему в полном объеме.


Что с этим делать?

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

# Примеры Пример 1 На самом деле n00b не нужны последние 3 символа в имени файла, ему нужны расширения файлов, так зачем спрашивать последние 3 символа?


<n00b> Как передать эхом три последних символа в имени файла?
<feline> Если они находятся в переменной: echo ${foo: -3}
<feline> Почему именно 3 символа? Что вам на самом деле нужно?
<feline> Вам нужно расширение?
<n00b> Да.
<feline> Нет гарантии, что каждое имя файла будет иметь трехбуквенное расширение,
<feline> поэтому слепой захват трех символов не решит проблему.
<feline> echo ${foo##*.}

Пример 2

Если бы Анжела просто начала с объяснения того, что она хочет помешать другим обнаружить ее ОС, это обсуждение могло бы быть гораздо короче и продуктивнее.


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


Выводы

Проблема X и Y может быть решена таким образом, что вы полностью расскажете, что вы хотите сделать и что вы уже пробовали.

ru/x-and-y-problem.txt · Last modified: 2024/02/05 10:11 by domele