什么是 XY 问题?

它是什么?

所谓的 XY 问题 (XY Problem),就是你只问你尝试的解决方案 (Y),而不是你真正的原始问题 (X)。这种提问方式会给提问者和解答者双方都造成大量时间和精力的浪费。

  • 用户想解决问题 X。

  • 用户不知道怎么解决 X,但他觉得如果能做到 Y,问题 X 就八九不离十了。

  • 结果用户也不知道怎么做到 Y。

  • 于是,用户跑去问别人如何实现 Y。

  • 其他人想尽办法帮用户实现 Y,但他们越帮越困惑,因为 Y 本身看起来就是个很奇怪的需求。

  • 经过大量的沟通和时间浪费后,大家才终于明白,原来用户真正想解决的是问题 X,而 Y 方案对于解决 X 来说,甚至都不是一个合适的办法。

这个问题之所以会发生,是因为人们常常会陷在自己设想的解决方案里出不来,没法退后一步,把整个问题完整地解释清楚。


我们该怎么做?

  • 在提问时,除了说明你卡住的具体步骤,一定要把更大的背景情况也交代清楚

  • 如果有人向你追问更多信息,请务必详细说明

  • 如果你已经排除了某些其他的解决方案,请说明你排除它们的原因。这能让别人更了解你的真实需求。

请记住:如果你的诊断和思路是完全正确的,你可能一开始就不用问别人了,对吧? 😉


举个例子

例子 1

下面这个新手其实不是想要文件名里的最后 3 个字符,他真正想要的是文件的扩展名。那他为什么只问如何获取最后 3 个字符呢?


<小明> 我怎么才能输出一个文件名的最后三个字符?
<高手> 如果文件名在一个变量里,可以这样: echo ${foo: -3}
<高手> 但你为什么要3个字符?你到底想干什么?
<高手> 你是不是想要文件的扩展名?
<小明> 是的。
<高手> 文件扩展名不一定都是三个字母啊,
<高手> 所以死板地截取最后三个字符并不能真正解决你的问题。
<高手> 试试这个: echo ${foo\#\#\*.}

例子 2

如果安吉拉一开始就解释她想“防止别人探测到自己的操作系统”,那这场对话本可以简短得多,也高效得多。

安吉拉: 我运行 'nmap -O -A 127.0.0.1' 命令后,返回结果里有些行是以 'OS:' 开头的。怎么才能改掉它?

奥巴马: 去看 nmap 的源代码,找到它是怎么识别出 Linux 系统的,然后重写你系统的 TCP/IP 协议栈,让 nmap 没法探测到。

安吉拉: 嗯……可我完全不懂 Linux 的系统 API。

奥巴马: nmap 的指纹识别就是基于 TCP/IP 协议栈的工作方式,除了重写协议栈的相关部分,没什么别的办法。

安吉拉: 我真的必须想办法屏蔽掉这些信息。用 iptables 能做到吗?

奥巴马: 那你就别用 nmap 的操作系统探测或者版本扫描功能不就行了。

安吉拉: 我是想防止别人知道我用的是什么操作系统。

来源 1 来源 2


原文链接: https://xyproblem.info/