¿Cómo se ve afectada la programación por la aptitud espacial? [cerrado]

19

Antecedentes

Cuanto más trabajo en un proyecto, menos claro se vuelve. Es como si ya no pudiera separar varias clases / objetos en mi cabeza. Todo comienza a mezclarse, y es extremadamente difícil desarmarlo todo de nuevo. Comienzo a poner funciones en clases donde realmente no pertenecen, y cometo errores tontos, como escribir código que luego encuentro que era 100% obsoleto; las cosas ya no se pueden mapear claramente en mi cabeza. No es hasta que doy un paso atrás durante varias horas (¡o días a veces!) Que realmente puedo ver lo que está sucediendo nuevamente y ser productivo.

Por lo general trato de luchar contra esto, me apasiona tanto la codificación que por mi vida no sabría qué más podría estar haciendo. Aquí es cuando las cosas pueden volverse realmente extrañas, me pongo tan en mi cabeza que pierdo el contacto con la realidad (hasta cierto punto) en que varias acciones, como verter un vaso de agua, ya no suceden a un nivel consciente. Sucede en piloto automático, durante el cual casi toda mi concentración consciente (¿es eso incluso una cosa?) Se dedica a la resolución de problemas límite sin sentido (tratando de separar elementos del código). Se siente como una batalla perdida.

Así que hice una prueba de coeficiente intelectual hace un tiempo (Wechsler Adult Intelligence Scale, creo que era) y resultó que mi Aptitud Espacial era bastante baja. Todavía obtuve un puntaje total decente , justo por encima del promedio, por lo que no tendré que pinchar cosas con un palo para ganarme la vida, pero estoy un poco preocupado de que esto sea una desventaja al escribir / diseñar programas de computadora que gané ' Nunca podrá hacerlo en serio o profesionalmente.

Pregunta

Estoy muy interesado en lo que otras personas piensan de esto ...

¿Podría una baja aptitud espacial ser la causa de los problemas descritos anteriormente?

¿Cómo se ve afectada la programación por la aptitud espacial?

Tal vez debería mirar más en la línea de ADD o algo similar, porque me diagnosticaron ADD a la edad de 17 años (hace 5 años) pero la medicina que recibí no pareció afectarme tanto, así que nunca tomé todo tan serio.

Hasta donde sé, las personas nacen con una aptitud espacial baja / media / alta, así que creo que es interesante descubrir si los más afortunados son mejores programadores por derecho de nacimiento.

natli
fuente
55
it turned out my Spatial Aptitude was quite low. I still got a decent score, just above average,No soy psicólogo, pero si leo inglés correctamente y entiendo la definición de un promedio, realmente no entiendo cómo se traduce eso quite low... Tal vez estás pensando demasiado en esto ... :)
haylem
1
Ah, también, las pruebas de coeficiente intelectual son una mierda, para resumir la investigación sobre ellas sin rodeos. ¿Vives en los Estados Unidos? (Solo pregunto porque parece haber un mayor uso de las pruebas de coeficiente intelectual, y sobreestimó enormemente el miedo al TDA, en los EE. UU
Que en
1
@psr: No me sorprendería en realidad. Puede que no parezca que tiene mucho que ver con eso, pero las personas que tienen problemas con las representaciones espaciales y la cinetosis crónica suelen tener dificultades para lidiar con muchas cosas. Sin embargo, no creo que sea un poco diferenciador (pero no soy psicólogo ni neurólogo), y que tus habilidades de programación y pasión reales son las que te diferenciarán del resto del grupo.
haylem
2
@haylem No sé en general, pero la mayoría de las pruebas de coeficiente intelectual en línea calificarán a lo largo de varios ejes. Indigente espacial, habilidad lógica, etc. Creo que lo que dice Natli es que el promedio de todos ellos estaba por encima del promedio, pero el puntaje de aptitud espacial era bastante bajo.
Izkata
1
Yo anhelo para un trabajo en el que asoman las cosas con un palo.
Dan Ray

Respuestas:

27

En realidad, hay algunos datos de investigación exhaustivos sobre esto, recopilados principalmente en los últimos 35 años, y también he experimentado algunos fenómenos similares, aunque no de manera regular. Ver abajo para más.

Datos de la investigación

Parece haber una correlación menor pero menor basada en la investigación realizada y resumida en los siguientes trabajos. Sin embargo, como ocurre a menudo con la investigación, los modelos de estudio difieren entre los estudios y deben revisarse de cerca para comprender por qué los resultados presentan diferencias en las conclusiones.

Tómelo con una pizca de sal: algunos son relativamente anticuados, las pruebas de coeficiente intelectual pueden haber cambiado desde entonces. No he hecho una búsqueda en profundidad para encontrar citas de cada artículo para ver si fueron confirmadas o desacreditadas más adelante.

Algunos enlaces (especialmente el tipo [PDF]) pueden no funcionar para usted si no está afiliado a una biblioteca que le da acceso a estos contenidos en línea.


Opinión personal

Advertencia y divulgación: NO SOY psicólogo NI neurólogo, pero he estado estudiando y enseñando programación tanto para niños pequeños (desde 6 años) como para estudiantes universitarios (¡hasta 60!).

Habiendo estudiado con AND y enseñado a los estudiantes como docente universitario, incluidos algunos estudiantes afectados por problemas espaciales (y otros con discapacidades más fuertes), debo decir que si bien podría haber sido (no hice un seguimiento de mis estudiantes en función de las discapacidades, obviamente) que algunos se habrían registrado en una parte inferior de la curva general, todavía recuerdo claramente algunos puntajes altos (e incluso uno en particular fue el mayor de la clase durante al menos 2 años).

Mi punto es que, si bien puede tener un efecto, y como lo demuestran algunas de las investigaciones anteriores, no explica la mayor parte de su capacidad para aprender a programar y pensar como un programador. Es intrascendente, ya que no te impedirá aprender si realmente quieres y no te impedirá trabajar en el caso general, aunque podría (como podría ser tu caso) hacer que sea un poco más difícil para ti.

Prácticamente no hay límite para qué y qué tan rápido puede aprender .

Después de todo, a ningún programador no le gusta un buen desafío, ¿verdad? (Te estoy mirando, RSI)


Experiencia personal (posiblemente no relacionada)

Puede ser que seas demasiado apasionado. ¿Cuántas horas trabajas por día y por semana? ¿Tomas descansos regulares?

¿Un caso similar?

En un período de mi vida, trabajé días de al menos 14 horas todos los días de la semana, todo el año, hasta el punto en que culminó en registrar semanas de 120 horas de trabajo frente a la pantalla de una computadora . Sí, solo quedan 48 horas por semana para comer, dormir, viajar hacia y desde el trabajo ( consejo: ¡evite conducir! ), Ducharse y otras funciones vitales. En este punto en particular, podría irme a dormir en un abrir y cerrar de ojos (aunque generalmente tengo problemas para dormir), peroCasi siempre soñaba con el código, y de repente me daba cuenta en la ducha o incluso cuando caminaba o corría o hacía tareas domésticas que mi mente volvía a eso en piloto automático, como usted mismo lo dijo. Desafortunadamente, mágicamente no resolvería problemas en mi sueño; estaría más cerca de lo que parece describir y experimentar: una vorágine gigante de pensamientos confusos girando en mi cabeza, que tendría sentido (parece) a una escala mayor, pero no expresa claramente ninguna solución y sin mucho éxito al tomar uno de estos pensamientos para enfocarse en él, diseccionarlo claramente y convertirlo en algo útil. Y esto generalmente era bastante cansador y angustiante.

La relajación podría ayudar

Tal vez necesite calmarse un poco, relajarse y trabajar menos. Intenta encontrar algo que te haga olvidar. En aquel entonces, terminé renunciando a menudo a algunas preciosas horas de sueño para hacer algo que realmente detendría este loco tren de pensamiento. Parece contraproducente, pero en realidad preferí hacer algunas cosas en las que realmente me relajaría que dormir más y no descansar. La distracción para las baterías nerviosas, y el sueño para las baterías físicas, en cierto sentido.

Identificando disparadores

Si ese no es su caso, entonces tal vez haya algo más involucrado en activar este estado para usted. Intente aislar los elementos que están presentes en estas situaciones y vea si puede reproducir esta condición en otros entornos, para ver si también encuentra estos elementos. ¿Sucede más en el trabajo o en casa, etc.?

Aislamiento

Además, es posible que ya haya escuchado e intentado esto, pero tengo un amigo con una discapacidad espacial menor, y generalmente le ayuda, si trabaja en computadoras, estar en una habitación más oscura, para evitar tener demasiadas vistas y ventanas complejas abierto (para evitar distracciones) y, en general, para mantener las cosas bastante minimalistas (tanto en términos de diseño y colores, como en términos de contenido y representación).

Intente también tomar descansos regulares y dejar que su mente funcione libremente por cortos períodos de tiempo cada 1 o 2 horas, según lo que funcione mejor para usted. Tal vez adopte la técnica Pomodoro o algo similar (no tengo investigación sobre una correlación con esto, pero podría ser útil para obligarlo a tomar descansos).

haylem
fuente
Una pregunta muy interesante, una vez que comienzas a investigar, y al principio no había pensado en mi propia experiencia. Espero eso ayude. Para obtener más trabajos de investigación, una búsqueda rápida en Google Scholar para "programación espacial indigente" arroja muchos más resultados. Usar su herramienta de citas podría ayudar a identificar los trabajos más citados.
haylem
1
Gracias por poner tanto esfuerzo en su respuesta, hay muy buena información allí. Definitivamente escribo código unas 10 horas al día, a veces más. La relajación puede ser clave aquí, pero será difícil de realizar. Como dijiste, probablemente me apasionen mis propios proyectos; No quiero estar haciendo otra cosa. Entonces, aunque físicamente pueda estar haciendo algo más que programar, mi mente seguirá trabajando en ello ... No creo que sea posible detener su mente de hacer lo que bien le plazca.
natli
@natli: es un poco el mismo enfoque que dejar un hábito de espera. Si desea dejar de fumar, debe sustituir el cigarrillo por algo. ¿Algún pasatiempo particular que realmente disfrutes, aparte de la programación? Entonces usa eso. Para algunas personas, podrían hacer actividades intensas (por ejemplo, hacer squash ...), mientras que para otras es lo contrario: necesitan algo extremadamente pasivo. Tal vez podrías intentar la meditación. Aprender a despejar la mente es una habilidad importante para aprender. Me ayudó mucho con mis problemas para dormir, por ejemplo.
haylem
@natli: No me importó el "esfuerzo". Me pareció una pregunta interesante y la mayoría de los artículos eran buenas lecturas. Este tipo de investigación a veces, tan a menudo cuando se trata de identificar impulsores psicológicos y neurológicos, puede ser un poco vago, ya que es difícil especificar un buen modelo de estudio. También es potencialmente aterrador cuando la investigación tiende a ir en la dirección de "cerrar puertas" a las personas. Obviamente, esa no es la intención: no orienta la investigación; pero podría ser el resultado de todos modos. Aún así, me alegré de descubrir que es un área de investigación activa . Gracias por eso, y me alegro de que haya ayudado.
haylem
+1 para la técnica Pomodoro. Usé esto para estudiar para mis exámenes cuando aún estaba en la Universidad. Debe haber funcionado, porque pasé todo <- toda la oración se basa en ciencia dudosa, no debe tomarse en serio.
Jamie Taylor
4

Ech ... esto merece más que un comentario.

"Por lo general trato de luchar a través de esto"

Deja de pelear. Estás torciendo las cosas y cometiendo errores, ¿verdad? Es posible que tenga algunos problemas únicos, pero la forma en que su cerebro se está rebelando es normal para cualquiera que haya pasado demasiado tiempo concentrado en un problema. Cuando era más joven, pasaba demasiado tiempo pensando en ese nivel altamente consciente y no me estaba haciendo ningún favor. Su problema no es que no se esfuerce lo suficiente, es que no sabe cuándo dejar de fumar.

Finalmente aprendí a apreciar el valor de poner las cosas en un segundo plano cuando descubrí que la única forma de dormir a una hora razonable era querer pensar en absolutamente nada y me sorprendí al descubrir que dentro de 10 minutos más o menos Me quedaba dormido, mientras que normalmente pensaba, pensaba, pensaba durante al menos un par de horas antes de caer por agotamiento mental.

A partir de ahí, me resultó más fácil aprender a reconocer cuando estaba poniendo demasiado pensamiento consciente en un problema y dejarlo ir por un tiempo. Me sorprendió descubrir cuánto realmente contribuye esto a ayudarlo a resolver un problema.

Recomiendo lo siguiente:

  • Cuando algo se tuerce en tu cabeza y no puedes darte el lujo de poder tomar un descanso e ir a caminar o algo así, intenta cambiar de marcha y concentrarte en un problema muy diferente por un tiempo.

  • Nunca se salte el almuerzo y siempre salga de la oficina. Dése hasta que llegue a la puerta para detenerse o simplemente dejarlo caer. Todo lo que valga la pena tener en su cabeza estará allí cuando vuelva a él y todo lo que no necesitaba se habrá ido. Cuanto más descubras esto, más fácil será.

  • Regularmente, usted mismo no pensará en nada durante el día. Incluso si es solo por un minuto mientras obtienes ese vaso de agua.

  • Intente aprovechar OOP o cualquier otro enfoque arquitectónico centrado en el dominio del problema para pensar en menos. ¿Quiénes son los actores en su código al más alto nivel? No deberían tener relaciones complejas entre sí. Eso le permite concentrarse más en una parte del problema a la vez.

Algunos principios de codificación que podrían ayudar

  • DRY es una práctica de codificación general, ya que "Robar está mal" se puede aplicar a casi toda la ética / moralidad. Hay excepciones muy raras. Mantenlos muy raros.

  • Si tiene la costumbre de resolver en exceso los problemas que podría enfrentar en el futuro, elimínelos. Nada es más a prueba de futuro o "escalable" que el código que no es más complejo de lo necesario. "Empresa" es mentira.

  • Los patrones complejos a menudo prometen largas listas de puntos de recompensa. Solo hay 3 cosas que deberían importar la mayor parte del tiempo. Es facil de leer. Es fácil de reutilizar. Es fácil de modificar. Piense en términos de uso mínimo de fuerza que un artista marcial podría y aplique ese principio a la complejidad. Exactamente suficiente para resolver el problema es ideal.

  • Escribe tu interfaz primero. Y no, no me refiero a las construcciones C # / Java que deben usarse solo cuando sea necesario, me refiero a la API de sus objetos. ¿Qué necesita hacer la clase / objeto? Escribe esos métodos vacíos y dales nombres arg. No complete los espacios en blanco hasta que haya terminado por completo. Está bien hacer ajustes más tarde, pero una vez que haya establecido lo que debe poder hacer, puede concentrarse en cómo debe hacerse cada cosa, una a la vez. La razón por la que puede encontrarse tratando de mantener tanto en su cabeza como lo hace a menudo puede deberse a que la implementación está ocurriendo por problemas que deberían haberse resuelto mucho antes de llegar a una etapa determinada de un proceso. ¿Tienes muchos es y tiene métodos? De eso estoy hablando.

¿Diagnóstico?

Creo que la preocupación por la conciencia espacial ha sido bien cubierta. Independientemente de lo que decida en ese frente, le daría una nueva visita al asunto ADD, especialmente si fue reacio al respecto la primera vez. Esto definitivamente se parece mucho al hiperenfoque llevado al extremo. En última instancia, deje que el amor por la codificación lo lleve a encontrar formas de mitigar estos problemas y espero que su carrera salga bien.

Erik Reppen
fuente
3

¿Por cuántas horas trabaja antes de comenzar a ver este desenfoque? Muchos programadores promedio a buenos que conozco del trabajo 4, pueden ser 5 horas antes de tomar un café o un almuerzo o algo así. El más largo de esos sprints que he leído es cuando Guy L Steele y Richard M Stallman hicieron un sprint de aproximadamente 10 horas al escribir Emacs. Steele continúa diciendo que no querría hacer un sprint tan largo nuevamente.

Si es bastante nuevo en (menos de, digamos, 5000 horas (ese número vino de la publicación de Peter Norvig sobre aprender a programar en diez años, reduciendo a la mitad las 10000 horas que recomienda convertirse en un programador experto)), esto suena muy normal, excepto la parte donde dice que necesita días de descanso. ¿Quizás te estás quemando para hacerte necesitar un descanso tan largo?

vpit3833
fuente
No creo que tenga más de 2000 horas de experiencia, aunque en realidad no es que haya hecho un seguimiento. Además, necesitar un par (leer; dos) días de recuperación es bastante raro. Los primeros días solo necesito una buena noche de sueño para enfrentar los problemas al día siguiente, pero probablemente trabajo demasiado, tratando de luchar contra la confusión. Si sigo así el tiempo suficiente, definitivamente necesito tomarme unos días fuera de la codificación para poder ver mi código con ojos nuevos y ver al instante los estúpidos errores que estaba cometiendo. Cosas que tomaron horas para hacer, literalmente, solo tomaron como 15 minutos después de dicho descanso.
natli
1

Por lo que describe, su problema puede tener varias causas:

  • Inexperiencia

  • Pérdida de enfoque / fatiga

  • Habilidades espaciales bajas

La inexperiencia se puede resolver ... bueno, básicamente, ganando más experiencia. Por obvio que parezca, al practicar más, te encontrarás en situaciones de programación complejas con mayor frecuencia y aprenderás progresivamente a manejarlas. En este momento, es posible que te falten los esquemas mentales y los reflejos para hacer las conexiones correctas, sacar las conclusiones correctas y desbloquear estas situaciones, lo que puede hacerte sentir lento y escribir "código obsoleto", pero estos patrones de resolución de problemas progresivamente tenga lugar en su cabeza a medida que tenga más experiencia (solo tengo 22 años, según entiendo, que todavía es muy joven).

Existen varias técnicas para mejorar su enfoque. Pomodoro y Getting Things Done son dos ejemplos. En el campo de la programación, Test Driven Development también es algo que realmente recomendaría, ya que te obliga a concentrarte en un objetivo pequeño y alcanzable a la vez (pasos pequeños). Con un enfoque TDD, es mucho menos probable que "ponga funciones en clases donde realmente no pertenecen", ya que se ve obligado a definir claramente la responsabilidad de su clase con una prueba y luego se concentra únicamente en implementarla cuando codifica , en lugar de saltar entre varias clases y llenarlas al azar poco a poco.

La fatiga y las caídas de atención se pueden evitar adoptando un ritmo sostenible con descansos frecuentes. Puede que le interese esa presentación de Linda Rising sobre ser más productivo respetando nuestro cerebro: Born to Cycle .

En cuanto a las habilidades espaciales bajas, me temo que no hay mucho que puedas hacer al respecto. Sin embargo, el trabajo duro puede atenuarlo y está lejos de ser la única habilidad requerida en la programación. Cosas como la creatividad, la pasión, el entusiasmo, el rigor, las habilidades analíticas, la agudeza, la buena comprensión de los problemas comerciales, las habilidades de colaboración, pueden compensar con creces una visualización mental más débil que el promedio de la base del código.

En resumen, lo que necesita IMO es:

  • Disciplina

  • Práctica

  • Un ritmo sostenible

guillaume31
fuente