¿Por qué no pensar en un error a veces te ayuda a resolverlo? [cerrado]

12

Ayer pasé buena parte de la tarde tratando de arreglar un error, lo cual pensé que era trivial. Estaba dando vueltas en círculos, sin tener idea de lo que estaba mal. Reescribiendo grandes partes del código. Comprobando SO. Aún no hay alegría.

Así que me fui a casa, paseé al perro, vi un poco de televisión y justo antes de irme a dormir, me di cuenta del error obvio que estaba cometiendo. Esta mañana me llevó unos 10 minutos arreglarlo.

Mientras estaba en casa, no estaba pensando activamente en el problema. Sin embargo, salir de la situación me permitió resolverlo.

No es la primera vez que sucede, y sé que es una forma bastante común de resolver un problema de programación. Incluso he oído de personas que sueñan con las respuestas.

¿Por qué funciona esto?

Quizás lo más importante, ¿hay una buena guía sobre cuándo debe tomarse un descanso de un problema, cuánto tiempo debe durar el descanso y después de cuánto tiempo dejar de ser efectivo dejar un problema?

Supongo que estoy tratando de averiguar cómo optimizar este procesamiento subconsciente (o lo que sea que esté sucediendo)

Jeremy French
fuente
3
No estoy seguro de que esto se relacione únicamente con la programación, podría hacer esta misma pregunta en muchos campos.
ozz
1
¡Si solo el intercambio de pila de ciencia cognitiva estuviera en beta!
Matt Ellen el
1
Porque pensar es un proceso misterioso.
davidk01
44
Esta pregunta parece estar fuera de tema porque se trata del proceso de pensamiento de la resolución general de problemas y no es exclusivo de los campos de programación o tecnología.

Respuestas:

22

Estar demasiado concentrado en un problema le impide dar un paso atrás. Cuando depura su código, tiende a repetir innecesariamente las mismas pruebas.

Cuanto más lo intentas, más fallas y te sientes muy frustrado. El aumento del estrés y la frustración empeoran las cosas.

Es por eso que, con bastante frecuencia, un colega puede, por casualidad, mirar por encima del hombro y señalar el problema (y la solución) en unos segundos.

No están en el mismo estado mental que tú.

A menudo trato de dejar de cuidar un cierto período de tiempo y vuelvo con la mente más tranquila unas horas más tarde.

Pero la técnica más poderosa es simplemente ... pedir ayuda .

Walter
fuente
99
+1 cuando solicita ayuda, tiende a definir el problema en términos que otros puedan entender, por lo tanto, en ese proceso puede obtener una mayor comprensión. como cuando publica un tema en un sitio de preguntas y respuestas o foros de inmediato, tiene una idea de cómo proceder a continuación ...
Aditya P
1
+1 y +1 para @AdityaGameProgrammer también: describir el problema es tan útil que incluso describirlo a una persona imaginaria, o una figura de acción o una planta o lo que sea, a menudo desencadena el mismo pensamiento nuevo (como lo describen muchos) .
Matthew Frederick el
6

Si ha estado trabajando en un problema durante algún tiempo, su mente sigue los patrones que configuró durante el desarrollo. En otras palabras, desarrolla "puntos negros" temporales para cosas fuera del marco mental que configura.

Dejar de pensar en el problema por un tiempo ayuda a eliminar este filtro y le permite reflexionar sobre las cosas sin el filtro en su lugar.

Lo que a menudo me ha ayudado en casos como estos es explicarle a otra persona por qué debería funcionar (cuando no funciona); normalmente a la mitad de su explicación, se dará cuenta de dónde se equivocó en su razonamiento o qué paso se perdió.

Además de desarrollar un filtro mental durante el trabajo de desarrollo, su cerebro tiene múltiples subprocesos múltiples y, a menudo, sigue analizando un problema como parte de procesos inconscientes. A veces uso esto aprendiendo todo lo que puedo sobre un problema en una tarde, y luego dejo que el problema permanezca por un día o dos antes de trabajar en una solución.

rsp
fuente
1
Leí sobre cierto profesor que mantendría un oso de peluche en el escritorio fuera de su oficina. Antes de que los estudiantes le pidieran ayuda, primero debían explicar su problema al oso.
Michael K
Se parece bastante a lo que Jeff Atwood escribió en su blog aquí blog.codinghorror.com/rubber-duck-problem-solving . De hecho, creo que esto puede ayudar mucho. ¿Cuántas veces tuvo una pregunta medio escrita para SO y luego se dio cuenta de la respuesta? Tuve esto bastante tiempo :)
Rémi
5

No soy psicólogo, pero cuando estás demasiado concentrado en un solo problema (encontrar el error) tiendes a perder la visión del sistema más grande. Pero a menudo la respuesta no es "allá abajo" donde la estás buscando actualmente, sino en otro lugar, que no puedes ver en ese momento.

Entonces, lo que realmente necesita hacer es salir de las trincheras y comenzar a mirar todo el sistema desde un punto de vista más general, nuevamente. Uno tiende a ignorar este hecho pensando "Realmente sé que está justo aquí, pero aún no lo he encontrado". Nos pasa a todos, todo el tiempo. Incluso llego al punto en que sé "No puedo encontrar el error usando una buena técnica de depuración, por lo que tiene que estar en otro lugar" y aún así no tomo lo correcto y me tomo un descanso: el cerebro humano es cosa graciosa.

Sin embargo, realmente no importa tanto lo que haces, ya sea ir al baño, hablar con un compañero de trabajo o pasear al perro. Solía ​​ir a una tienda cercana para comprar algunos dulces cuando estaba atascado y, tan pronto como me ponía la chaqueta, la solución me pasaba por la cabeza, casi siempre. También puede ser bueno beber mucha agua durante el tiempo que está programando. Te obliga a tomar un descanso de vez en cuando para visitar el baño y zap, hay una razón que te obliga a salir de las trincheras.

perdian
fuente
4

Desde mi experiencia personal y lo que he presenciado en los desarrolladores junior que entreno, todos abordamos un problema con suposiciones y expectativas. Asumimos que la función x realiza la tarea y para producir el resultado z. Siempre lo ha hecho, entonces ¿por qué debería cambiar eso? A medida que nos enfocamos más y más en un problema, asumimos que hemos cubierto los conceptos básicos y que el problema debe ser mucho más complicado que cuando lo abordamos originalmente. Adjunte fatiga a una lista creciente de cosas que asumimos que son ciertas pero que en realidad no hemos verificado, y luego se prepara para un "WTF" completo más adelante.

Solo más tarde, cuando se haya desconectado del problema, las suposiciones se pueden descartar y volver a trazar. Además, generalmente abordamos un problema en la parte posterior de un problema diferente que acabamos de resolver. Arreglé A pero rompió B, ahora debo arreglar B. Así que ya tenemos un impulso y una dirección en la que viajamos (lo que hace que nuestras suposiciones sean aún más difíciles de disociar). Cuando vuelva a resolver el problema B, el problema A ya no está fresco en su mente bloqueando las posibilidades potenciales. Puede abordar el problema sin ideas preconcebidas, y esto abre nuevos caminos de pensamiento y nuevos ángulos para mirar el problema.

Ahora, cada vez que un junior me pide ayuda, saben que la primera pregunta que tienen que responder es "¿Cuáles son sus suposiciones?". Incluso intentar responder a ese problema puede ayudarte a sacarte de tus bloqueos mentales.

Joel Etherton
fuente
3

Supongo que tu cerebro, como los músculos, se cansa. Tomar un descanso le permite descansar, recargar con oxígeno / combustible, etc. y comenzar a trabajar nuevamente.

Salir a caminar o hacer ejercicio a menudo es un buen enfoque cuando realmente estás atrapado en algo. Incluso si no tiene un momento "eureka", a menudo puede permitirle regresar y adoptar un nuevo enfoque para resolver el problema.

Steve
fuente
3

Me gusta llamarlo el tiempo de incubación de ideas y problemas.

Su subconsciencia todavía continúa procesando el problema fuera de su conciencia en un enfoque no lineal. Esto es muy similar a lo que sucede cuando aprendes algo nuevo antes de tomar una siesta. Su mente tiene tiempo para 'desfragmentar' la información en formas que puedan abordarse con mayor flexibilidad.

Además, otro consejo útil para superar estar atrapado en un error, se llama eliminación de errores confesional . Aquí es donde te acercas a otra persona que no conoce el problema y comienzas a explicarlo. En la mayoría de los casos, encuentro que al decir el problema en voz alta, se me ocurre la solución.

mira estos enlaces psicológicos: consejos de creatividad y siestas problemáticas

Adamizer
fuente
2

"A todos nos pica una rosa a veces. Lamentablemente, cuando nos concentramos tanto en el dolor, nos olvidamos de la belleza de la rosa".

Noche oscura
fuente
2

Solucioné varios errores críticos en mi carrera, durante el tiempo de la ducha.

No soy psicólogo pero supongo que la diferencia es:

  • sentado frente a la computadora, veo códigos fuente, puntos de interrupción, printfsalidas ...

  • En el baño, los códigos corren en mi mente.

Oh ho
fuente
1

Experimenté el mismo fenómeno y lo atribuí a mirar el problema con una perspectiva diferente a medida que paso el tiempo alejado de él (más tiempo lejos implica una perspectiva más distante, aproximadamente).

Pero hay otro truco que creo que hace lo mismo la mayor parte del tiempo: explicar el código a un compañero de trabajo. No es para que puedan atrapar tu error, aunque pueden; que es a la fuerza que dar un paso atrás y explicar la lógica del código a todos los niveles pertinentes. Nunca (aunque con una advertencia justa: el tamaño de la muestra es limitado) he podido resolver inconscientemente un error que escapó de este tratamiento de describir a un compañero de trabajo.

Rex Kerr
fuente
1

Recientemente he estado usando la técnica de pomodoro gracias a una sugerencia de alguien en este sitio, y creo que proporciona una buena respuesta a su pregunta sobre el tiempo y la duración de los descansos. Básicamente, tiene su trabajo enfocado en un problema durante 25 minutos, seguido de un breve descanso de 3-5 minutos, luego un descanso más largo después de cada 4 ciclos de eso. Citan algunos estudios para respaldarlo, pero anecdóticamente he encontrado que esos intervalos son muy efectivos.

Pensé que los tramos de 25 minutos evitarían que me metiera "en la zona", lo que la gente dice que lleva unos 15 minutos. Por el contrario, con este momento llego a la zona casi de inmediato. Creo que es porque es mucho más fácil evitar distraerme cuando sé que solo tengo que seguir así durante 25 minutos. También es más fácil posponer interrupciones externas por solo 25 minutos. Antes era mucho más difícil cuando intentaba abrocharme el cinturón de seguridad durante 4 horas de trabajo antes del almuerzo.

Karl Bielefeldt
fuente