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

12

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

Así que fui a casa, caminé con el perro, miré un pequeño televisor y, justo antes de irme a dormir, me di cuenta del error obvio que estaba cometiendo. Esta mañana tardó unos 10 minutos en arreglarlo.

Mientras estaba en casa, no estaba pensando activamente en el problema. Sin embargo, sacarme 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 hablar de personas que sueñan con las respuestas.

¿Por qué funciona esto?

Quizás lo que es más importante, ¿existe 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 deja de ser efectivo el hecho de dejar un problema?

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

    
pregunta Jeremy French 20.04.2011 - 10:17

10 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 fracasas y te frustras. El aumento del estrés y la frustración empeoran las cosas.

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

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

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

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

    
respondido por el user2567 20.04.2011 - 10:32
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, desarrollas "puntos negros" temporales para cosas fuera del marco mental que configuraste.

Retirar el problema por un tiempo ayuda a eliminar este filtro y te 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 es así), normalmente en la mitad de su explicación, se dará cuenta de cuál fue su error en su razonamiento o qué paso no realizó. .

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

    
respondido por el rsp 20.04.2011 - 10:59
5

No soy psicólogo, pero cuando estás demasiado concentrado en un solo problema (encontrando el error), tiendes a perder la vista del sistema más grande. Pero a menudo la respuesta no es "allá abajo" donde la buscas 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 ver todo el sistema desde un punto de vista más general, otra vez. Uno tiende a ignorar este hecho pensando "Realmente sé que está aquí, simplemente no lo he encontrado todavía". Nos pasa a todos, todo el tiempo. Incluso llego al punto en el que sé que "no puedo encontrar el error utilizando una buena técnica de depuración, por lo que tiene estar en otro lugar" y aún no tomo la decisión correcta y tomo un descanso. - El cerebro humano es una cosa muy 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 caramelos cuando estaba atascado y, tan pronto como puse mi chaqueta en la solución, me la metí en la cabeza, casi todas las veces. También puede ser bueno beber mucha agua durante el tiempo de programación. Te obliga a tomar un descanso de vez en cuando para visitar el baño y zapatear, hay una razón por la que te obliga a salir de las trincheras.

    
respondido por el perdian 20.04.2011 - 10:53
4

Desde mi experiencia personal y lo que he presenciado en los desarrolladores junior a los que capacito, 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 cada vez más en un problema, asumimos que hemos cubierto lo básico y que el problema debe ser mucho más complicado que cuando lo abordamos originalmente. Adjunte la fatiga a una lista creciente de cosas que asumimos que son ciertas pero que en realidad no hemos verificado, y se configura para un momento "WTF" completo más adelante.

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

Ahora, cuando un joven me pide ayuda, saben que la primera pregunta que deben responder es "¿Cuáles son tus suposiciones?". Incluso intentar responder a ese problema puede ayudarlo a eliminarlo de sus bloqueos mentales.

    
respondido por el Joel Etherton 20.04.2011 - 14:34
3

Supongo que tu cerebro, como los músculos, se cansa. Tomar un descanso le permite descansar, recargar 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 tomar un nuevo enfoque para resolver el problema.

    
respondido por el Steve Haigh 20.04.2011 - 10:22
3

Me gusta llamarlo tiempo incubación sobre ideas y problemas.

Su sub-conciencia aún 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 se pueden abordar con mayor flexibilidad.

También, otra sugerencia útil para superar el bloqueo de un error, se llama confessional de-bugging . Aquí es donde se acerca a otra persona que no conoce el problema y comienza a explicar el problema. Encuentro más a menudo que no, que al solo decir en voz alta el problema, la solución viene a mi mente.

echa un vistazo a estos enlaces psicológicos: consejos sobre creatividad & problema de siesta

    
respondido por el Adamizer 20.04.2011 - 22:58
2
  

"A todos nos pica una rosa   algunas veces. Lamentablemente cuando nos concentramos   tanto sobre el dolor que olvidamos de   la belleza de la rosa ".

    
respondido por el Darknight 20.04.2011 - 11:27
2

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

No soy psicólogo, pero creo que la diferencia es:

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

  • en el baño, los códigos están en mi mente.

respondido por el ohho 20.04.2011 - 12:49
1

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

Pero hay otro truco que encuentro que logra lo mismo la mayoría de las veces: explicar el código a un compañero de trabajo. No le corresponde a ellos detectar su error, aunque pueden hacerlo; es para obligar a usted a retroceder y explicar la lógica del código en todos los niveles relevantes. Nunca (aunque es una advertencia justa, el tamaño de la muestra es limitado) he podido resolver inconscientemente un error que escapó a este tratamiento de descripción a compañero de trabajo.

    
respondido por el Rex Kerr 20.04.2011 - 21:18
1

Recientemente he estado usando la técnica 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 tu trabajo enfocado en un problema durante 25 minutos, seguido de un breve descanso de 3-5 minutos, y luego un descanso más prolongado 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 intervalos de 25 minutos evitarían que me "metiera en la zona", lo que las personas afirman que toma aproximadamente 15 minutos. Al contrario, con este tiempo me meto en la zona casi de inmediato. Creo que eso se debe a que es mucho más fácil evitar distraerme cuando sé que solo tengo que mantenerlo durante 25 minutos. También es más fácil posponer las interrupciones externas por solo 25 minutos. Antes era mucho difícil cuando estaba tratando de abrocharme el cinturón durante 4 horas de trabajo antes del almuerzo.

    
respondido por el Karl Bielefeldt 21.04.2011 - 15:33

Lea otras preguntas en las etiquetas