XY问题
转载说明 本文转载自 酷 壳 – CoolShell 作者:陈皓 仅供学习交流使用,请勿用于任何商业用途
什么是 X-Y Problem
对于 X-Y Problem 的意思如下:
- 有人想解决问题 X
- 他觉得 Y 可能是解决 X 问题的方法
- 但是他不知道 Y 应该怎么做
- 于是他去问别人 Y 应该怎么做?
简而言之,没有去问怎么解决问题 X,而是去问解决方案 Y 应该怎么去实现和操作。于是乎:
- 热心的人们帮助并告诉这个人 Y 应该怎么搞,但是大家都觉得 Y 这个方案有点怪异。
- 在经过大量地讨论和浪费了大量的时间后,热心的人终于明白了原始的问题 X 是怎么一回事。
- 于是大家都发现,Y 根本就不是用来解决 X 的合适的方案。
X-Y Problem 最大的严重的问题就是:在一个根本错误的方向上浪费他人大量的时间和精力!
示例
举个两个例子:
示例一:获取文件扩展名
Q: 我怎么用 Shell 取得一个字符串的后 3 位字符?
A1: 如果这个字符的变量是 $foo,你可以这样来 echo ${foo:-3}
A2: 为什么你要取后 3 位?你想干什么?
Q: 其实我就想取文件的扩展名
A1: 我靠,原来你要干这事,那我的方法不对,文件的扩展名并不保证一定有 3 位啊。
A1: 如果你的文件必然有扩展名的话,你可以这来样来:echo ${foo##*.}
示例二:文件分块同步
Q: 问一下大家,我如何得到一个文件的大小
A1: size = ls -l $file | awk '{print $5}'
Q: 哦,要是这个文件名是个目录呢?
A2: 用 du 吧
A3: 不好意思,你到底是要文件的大小还是目录的大小?你到底要干什么?
Q: 我想把一个目录下的每个文件的每个块(第一个块有 512 个字节)拿出来做 md5,并且计算他们的大小……
A1: 哦,你可以使用 dd 吧。
A2: dd 不行吧。
A3: 你用 md5 来计算这些块的目的是什么?你究竟想干什么啊?
Q: 其实,我想写一个网盘,对于小文件就直接传输了,对于大文件我想分块做增量同步。
A2: 用 rsync 啊,你妹!
社区的总结
这里有篇文章说明了 X-Y Problem 的各种案例说明,我从其中摘出三个来让大家看看:
你试图做 X,并想到了用 Y 方案。所以你去问别人 Y,但根本不提 X。于是,你可能会错过本来可能有更好更适合的方案,除非你告诉大家 X 是什么。
— from Re: How do I keep the command line from eating the backslashes? by revdiablo
有些人问怎么做 Y,但其实他想做的是 X。他问怎么做 Y 是因为他觉得 Y 是最好搞定 X 的方法。于是大家不断地回答"试试这个,试试那个"来帮助他,而他总是在说"这个有问题,那个有问题,因为……"。在不同的情况下,其它的方案可能会更好。
— from Re: Re: Re: Re: regex to validate e-mail addresses and phone numbers by Limbic~Region
X-Y Problem 又叫"过早下结论":提问者其实并不非常清楚想要解决的 X 问题,他猜测用 Y 可以搞定,于是他问大家如何实现 Y。
— from Pine.GHP.4.21.0009061210570.8800-100000@hpplus03.cern.ch by Alan J. Flavell
其实这个问题在《你会问问题吗》里提到的那篇 How To Ask Questions the Smart Way 中也有提到过。
所以,我们在寻求别人帮助的时候,最好把我们想解决的问题和整个事情的来龙去脉说清楚。
一些变种
我们不要以为 X-Y Problem 就像上面那样的简单,我们不会出现。其实我们生活的这个世界有各种 X-Y Problem 的变种。下面是一些非常像 XY Problem 的情况:
其一:大多数人有时候,非常容易把手段当目的,他们会用自己所喜欢的技术和方法来反推用户的需求,于是很有可能就会出现 X-Y Problem——也许解决用户需求最适合的技术方案是 PC,但是我们要让他们用手机。
其二:产品经理有时候并不清楚他想解决的用户需求是什么,于是他觉得可能开发 Y 的功能能够满足用户,于是他提出了 Y 的需求让技术人员去做,但那根本不是解决 X 问题的最佳方案。
其三:因为公司或部门的一些战略安排,业务部门设计了相关的业务规划,后这些业务规划更多的是公司想要的 Y,而不是解决用户的 X 问题。
其四:对于个人的职业发展,X 是成长为有更强的技能和能力,这个可以拥有比别人更强的竞争力,从而可以有更好的报酬,但却走向了 Y:全身心地追逐 KPI。
其五:本来我们想达成的 X 是做出更好和更有价值的产品,但最终走到了Y:通过各种手段提升安装量,点击量,在线量,用户量来衡量。
其六:很多团队 Leader 都喜欢制造信息不平等,并不告诉团队某个事情的来由,掩盖 X,而直接把要做的 Y 告诉团队,导致团队并不真正地理解,而产生了很多时间和精力的浪费。
所有的这些,在我心中都是 X-Y Problem 的变种,这是不是一种刻舟求剑的表现?