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.
fuente
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 esoquite low
... Tal vez estás pensando demasiado en esto ... :)Respuestas:
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.
Explorando los predictores psicológicos del logro de la programación [ PDF ] (Erdogan, Aydin, Kabaca, 2008)
Lamentablemente, este es vago en los detalles. Apunta al "alto impacto" de las "aptitudes" en general, pero luego solo apunta a otra investigación sin dar los resultados para cada prueba de aptitud, por lo que no sabemos cómo le va a la habilidad espacial. Es principalmente una revisión de literatura más que una investigación real.
Habilidad espacial y aprender a programar [ PDF ] (Jones, 2008)
Predictores de éxito en un primer curso de programación [ PDF ] (Simon, Fincher & al., 2006)
¿Quién es probable que adquiera habilidades de programación? (Shute, 1991)
Capacidad de programación y lateralización hemisférica (Gasen, Morecroft, 1990)
Correlaciones de la resolución de problemas en la programación [ PDF ] (Choi-man, 1988)
Interesante ... Bonito modelo de estudio, y resultados cuantificados con varios grupos de estudio y teniendo en cuenta la fiabilidad de los factores del estudio. Produce que:
Aprendizaje, investigación y la representación gráfica de la programación (Taylor, Cunniff, Uchiyama, 1986)
Requisitos cognitivos de la programación de computadoras de aprendizaje en entornos grupales e individuales (Webb, 1985)
Correlaciones cognitivas de tareas de programación en programadores novatos (Irons, 1982)
Investigación sobre la aptitud para el aprendizaje: un informe de progreso [ PDF ] (RE Snow, 1976)
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).
fuente
Ech ... esto merece más que un comentario.
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.
fuente
¿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?
fuente
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
fuente