====== Introducción ======
Alguien te ha dicho que quizá no estés explicando el problema original, así que lee esto con atención.
===== Wikipedia =====
(([[https://en.wikipedia.org/wiki/XY_problem|Wikipedia Acerca del problema X e Y]]))
El problema XY es un problema de comunicación que se da en los servicios de asistencia técnica y situaciones similares, en las que la persona que solicita ayuda oculta el problema real, X, ya que, en lugar de preguntar directamente por el problema X, pregunta cómo resolver un problema secundario, Y, que cree que le permitirá resolver el problema X. Sin embargo, resolver el problema Y a menudo no resuelve el problema X, o es una forma poco adecuada de resolverlo, y el hecho de ocultar el problema real y plantear un problema secundario que puede parecer extraño puede provocar que la persona que intenta ayudar tenga dificultades innecesarias en la comunicación y/o ofrezca soluciones inadecuadas.
El problema XY se da habitualmente en entornos de asistencia técnica o de atención al cliente, en los que el usuario final ha intentado resolver el problema por su cuenta y malinterpreta la verdadera naturaleza del mismo, creyendo que su problema real X ya se ha resuelto, salvo por algún pequeño detalle Y en su solución. La incapacidad del personal de asistencia para resolver su problema real o para comprender la naturaleza de su consulta puede provocar que el usuario final se sienta frustrado. La situación puede quedar clara si el usuario final pregunta por algún detalle aparentemente insignificante que no guarda relación con ningún objetivo final útil. La solución para el personal de asistencia es formular preguntas de sondeo sobre por qué se necesita esa información, con el fin de identificar el problema de fondo y desviar al usuario final de una línea de investigación improductiva.
----
==== Stack Exchange ====
(([[https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem|StackExchange sobre el problema X e Y]]))
¿En qué consiste? \\
El problema XY consiste en preguntar por la solución que has intentado aplicar en lugar de por el problema real. \\
\\
Es decir, estás intentando resolver el problema X y crees que la solución Y funcionaría, pero en lugar de preguntar sobre X cuando te encuentras con dificultades, preguntas sobre Y. \\
\\
====== El problema « ====== » \\
Esto puede generar frustración en las personas que intentan ayudarte a resolver el problema, ya que, para cuando preguntas al respecto, es posible que la solución para la que necesitas ayuda no tenga ninguna conexión evidente con el problema que estás intentando resolver.
Cómo evitarlo
Para no caer en esta trampa, incluye siempre información sobre el contexto general junto con cualquier solución que hayas intentado. Si alguien te pide más información, o sobre todo si te hace una pregunta más específica, facilítale los detalles. Si hay otras soluciones que crees que te sugerirán y que ya has descartado, no intentes evitar volver a comentarlas; en su lugar, explica por qué las has descartado, ya que esto aporta más información sobre tus necesidades y ayuda a los demás a ofrecer mejores respuestas.
== Un ejemplo ==
Una conversación reciente en el IRC a modo de ejemplo: \\
P: ¿Existe alguna función que devuelva una cadena entre dos delimitadores? \\
B: No entiendo a qué te refieres, pero dudo que ya exista una función \\
C: «Split» y «slice» \\
D: «Partition» también \\
P: He probado con «partition» \\
P: Estaba intentando usar funciones integradas para obtener el número que hay entre algo como esto en una cadena: «attribute1: 50,223, attribute2: 442,1» \\
D: ¿Por qué no analizas simplemente la cadena? \\
P: Pensaba que quizá hubiera alguna función integrada para analizar la cadena \\
D: pairs = [x.strip() for x in s.split(",")]; attribs = {k: v for x in pairs for k, v in [x.split(": ")]} \\
D: Hay algunas bibliotecas, pero los formatos sencillos son bastante fáciles, si no te importa el manejo de errores \\
D: Siempre que sea posible, es preferible modificar el código fuente para utilizar un formato conocido, como JSON o YAML \\
P: Este código procede, en realidad, de HTML \\
P: Pero no sé cómo analizar JavaScript con HTMLParser o como se llame \\
D: ¿Está simplemente incrustado en HTML o se trata de alguna versión alterada de HTML? \\
P: Está incrustado en el HTML \\
D: Si es JavaScript (y lo es, salvo por la falta de llaves exteriores), probablemente JSON pueda analizarlo \\
P: Gracias \\
R: No lo he dicho explícitamente: JSON solo analiza estructuras de datos, no código JS \\
P: Lo único que necesito analizar es una estructura de datos \\
El problema es //en realidad// en cómo analizar estructuras de datos de JavaScript, no en encontrar «una cadena entre dos delimitadores», pero se necesita bastante tiempo e intuición para llegar al quid de la cuestión.
Esto resulta más fácil de hacer en un chat totalmente interactivo (independientemente del modo), pero en un sitio de Stack Exchange, donde se pule un poco la publicación, se publica y luego hay que esperar entre 5 y 30 minutos, o incluso más, antes de recibir comentarios, resulta de gran ayuda ir por el buen camino desde el principio.
----
==== XYProblem.info ====
(([[https://xyproblem.info/|xyproblem.info sobre el problema X e Y]]))
El problema XY consiste en preguntar por la solución que has intentado aplicar en lugar de por el problema real. Esto conlleva una enorme pérdida de tiempo y energía, tanto por parte de quienes piden ayuda como de quienes la prestan.
\\
\\
El usuario quiere hacer X. \\
El usuario no sabe cómo hacer X, pero cree que podrá ir dando tumbos hasta encontrar una solución si consigue hacer Y. \\
El usuario tampoco sabe cómo hacer Y. \\
El usuario pide ayuda con Y. \\
Los demás intentan ayudar al usuario con Y, pero están desconcertados porque Y les parece un problema extraño que resolver. \\
Tras mucha interacción y tiempo perdido, finalmente queda claro que el usuario realmente quiere ayuda con X, y que Y ni siquiera era una solución adecuada para X. \\
El problema surge cuando las personas se obsesionan con lo que creen que es la solución y son incapaces de dar un paso atrás y explicar el problema en su totalidad. \\
\\
== ¿Qué hacer al respecto? ==
Incluye siempre información sobre el contexto general junto con cualquier solución que hayas intentado. \\
Si alguien te pide más información, facilítale los detalles. \\
Si hay otras soluciones que ya has descartado, explica por qué las has descartado. Esto aporta más información sobre tus requisitos. \\
Recuerda que, si tus hipótesis de diagnóstico fueran correctas, no estarías pidiendo ayuda, ¿verdad? \\
---
# Ejemplos
Ejemplo 1
En realidad, «n00b» no quiere los tres últimos caracteres del nombre de un archivo, sino las extensiones; entonces, ¿por qué pregunta por los tres últimos caracteres? \\
\\
\\
¿Cómo puedo mostrar los tres últimos caracteres de un nombre de archivo? \\
Si están en una variable: echo ${foo: -3} \\
¿Por qué tres caracteres? ¿Qué es lo que REALMENTE quieres? \\
¿Quieres la extensión? \\
Sí. \\
No hay garantía de que todos los nombres de archivo tengan una extensión de tres letras, \\
por lo que tomar tres caracteres al azar no resuelve el problema. \\
echo ${foo##*.} \\
== Ejemplo 2 ==
Si Ángela hubiera empezado explicando que quiere evitar que otros detecten su sistema operativo, este debate podría haber sido mucho más breve y productivo.
\\
Ángela: «nmap -O -A 127.0.0.1» muestra algunas líneas que empiezan por «OS:». ¿Cómo se puede cambiar eso? \\
Obama: Busca en el código fuente de nmap cómo detecta la parte de Linux y, a continuación, reescribe tu pila TCP/IP para que no funcione de una forma que nmap pueda detectar. \\
Angela: Sí, pero no tengo ni idea de la API del sistema Linux. \\
Obama: Bueno, la huella digital de nmap se basa en el funcionamiento de la pila TCP/IP; no hay otra forma real de evitarlo que reescribir las partes correspondientes de dicha pila. \\
Angela: De verdad que necesito evitar estos mensajes. ¿Puede iptables encargarse de esto? \\
Obama: Bueno, no utilices la detección del sistema operativo ni el escaneo de versiones. \\
Angela: Quiero evitar que otros sepan qué tipo de sistema operativo tengo. \\
----
====== Conclusiones ======
El problema X e Y se puede resolver si explicas con todo detalle lo que quieres hacer y lo que has intentado.