Me frustro mucho cuando el código que escribo se comporta inesperadamente. Creo que esto está afectando mi capacidad de concentrarme en mi trabajo debido a la negatividad. ¿Hay alguna forma de controlar esto?

Realmente sentí tu dolor cuando comencé, pero ahora realmente amo la programación. Hubo algunas respuestas excelentes en este hilo, así que intentaré ser diferente dando una respuesta más general para combatir todo tipo de frustración. La principal “calificación” que tengo es haber pensado en la causa común de la frustración y haber realizado una estrategia que funcionó personalmente en todas estas actividades (incluida la programación), ¡así que espero que funcione para usted!

Primero, una nota rápida sobre “flujo” (ver la respuesta de Joshua Engel). Ahora, la mayoría de las definiciones son inútiles por sí mismas y sirve solo para reformular el problema, pero una de
Los conceptos clave de “flujo” que me encantan es que se producen cuando ” la dificultad de la tarea actual coincide con la competencia actual (ajustada por
entorno y estado mental) . “Esto ha sido lo que me abrió los ojos ya que hace que el flujo sea una actividad controlable. Ahora, repasemos la frustración: me gustó la división de Ajmal Afif en” Cómo “y” Por qué “, así que ‘ Lo haré en esa forma.

Por qué: nos frustramos porque no conseguimos lo que queremos. Esto es básicamente lo que dijo Ajmal, pero lo reformularé de la siguiente manera: la tarea actual es demasiado difícil. Esto significa que no tenemos ninguna estrategia que podamos implementar y no sabemos si algún paso nos lleva a la solución. Un caso especial muy común de esto que deseo enfatizar es no entender los requisitos de la tarea .

Cómo: comience a escribir un correo electrónico a un amigo que es un experto muy ocupado .

Ahora, antes de que me grites por dar una respuesta barata, el punto clave es que el amigo no tiene que existir. Con eso en mente, hazme el humor:

  1. El acto de escribir una pregunta o correo electrónico es mucho más fácil de hacer que resolver su problema en su estado frustrado, que está haciendo el trabajo 0.
  2. El acto mismo será una experiencia de clarificación, ya que te estás haciendo preguntas mentales como “¿Cómo expreso exactamente lo que quiero en mi pregunta?” Que suele ser el obstáculo para comprender una visión de arriba hacia abajo del problema.
  3. Si no lo necesitó (2) y cree que comprende el problema de arriba a abajo, debería haber podido dividirlo en tareas más pequeñas que “enlazan entre sí, y luego intenta fluir las tareas más simples, una en un momento.
  4. Si el amigo existe, bonificación! Tienes que presionar el botón enviar!

Esta es la razón por la que StackOverflow, etc. es tan genial. Por lo general, respondo mis preguntas a medida que las escribo. Además, tenga en cuenta cómo las personas de mayor reputación en StackOverflow hacen las preguntas: preguntan de una manera que soluciona el problema y tratan de definir realmente su problema, en lugar de un problema de “cómo hago XYZ” que realmente no ayudar al que pregunta si nadie tiene ganas de responder.

Como un guiño a las otras respuestas relacionadas con TDD, esta es la razón por la cual TDD (desarrollo basado en pruebas) funciona tan bien; te obliga a desglosar la interfaz de tu programa y los casos de uso, lo que ayuda a aclarar la definición de tu problema y te ayuda a dividirlo en varias partes para que puedas descubrir qué parte es incorrecta en lugar de “esto no funciona” . ” Creo que el poder de TDD es realmente que aborda el problema del flujo extremadamente bien. Para mí, TDD realmente está preguntando a una futura versión experta de ti mismo “¿Cuál es el problema y qué quiero?”

Sentirse frustrado es malo, pero nos sucede a todos. Lo tengo en marcha ahora mismo, de hecho. Es por eso que estoy tomando un descanso y respondiendo esta pregunta.

El objetivo del programador es “fluir”. Es este estado zen, pacífico de inmensa productividad, donde literalmente pasan las horas. No es una programación libre de errores, sino un estado en el que tienes todo el sistema en tu cabeza y los errores se resuelven sin problemas. Pueden tomar un tiempo, pero la eliminación metódica de las posibilidades parece transcurrir sin frustración y sin daño al ego.

Muchas cosas pueden sacar a los programadores del flujo. Errores inexplicables están entre ellos. Finalmente, aprenderá a lidiar con los tipos de errores que está viendo ahora: un programador experimentado es uno que ya ha cometido todos los errores comunes y sabe cómo manejarlos. Eso solo significa que encuentras más nuevos tipos de errores que cometer.

Como novato, reconozca que los errores son parte del proceso. Si empiezas a perder la calma, deja de trabajar y vete. Puede navegar por la web o jugar un juego, o incluso mejor levantarse de su silla. Encontrarás que un proceso en segundo plano en tu mente funciona de todos modos, e incluso puedes encontrar el problema resuelto cuando te sientas de nuevo.

Obviamente, esto afecta la productividad y, si tiene que hacerlo con demasiada frecuencia, es posible que simplemente no esté preparado para el trabajo de programación. Pero no se desanime demasiado pronto: como novato, tiene una gran cantidad de errores que cometer por primera vez, errores que no volverá a cometer. Solo necesitas atravesarlo.

Déjame compartir mi experiencia. Ojalá puedas dibujar una relación o al menos extraer similitudes vagas.

¿Por que sucede?
Mi mayor inconveniente se debe a la codificación por coincidencia. Lo que esto significa es que (en caso de que no hayas escuchado el término antes) sabes lo suficiente como para implementar una solución, ya sea a través de un código de préstamo y manipularlo para que funcione de acuerdo con tus requisitos o absorber lo suficiente como para codificar una solución, pero todo esto lleva a bolsillos de conocimiento faltante. Este enfoque derriba tus esfuerzos cuando intentas expandir la base inestable que has construido. A partir de aquí, en su programación adicional por coincidencia, llevaremos su producto final un paso más allá. Como puedes ver, crea un patrón indeseable.
También existe la necesidad de los gritos de hacer que las cosas funcionen. Ese período en el que dejas de pensar y simplemente empiezas a hacerlo. Como un mal hábito, se adhiere y empiezas a hacer cada vez más “simplemente hacer cosas sobre la marcha”. Cuando las cosas dejan de funcionar, inevitablemente se empieza a confiar en el trabajo de adivinación para lograr ese resultado final.
Cada vez que tuve momentos de fracaso causados ​​por lo anterior, creó una tormenta de frustración … Hasta que eché un vistazo más de cerca a cómo trabajé …

¿Cómo lo ganas?
Bueno, en primer lugar, permítame decir que está destinado a suceder en algún momento. Especialmente si está trabajando en una fecha límite y las cosas no funcionan. Pero hay formas de mitigarlo, y se trata del enfoque. Aquí hay algunas cosas que conscientemente hago o tengo en cuenta antes de sentarme a codificar.

Tener un plan
Has escuchado esto antes La planificación es el cañón universal de la productividad. Haga un punto para planear antes de abordar un problema porque esencialmente está resolviendo un problema, y ​​tener un plan pone las cosas en perspectiva en lugar de una actividad sin dirección.

Las soluciones son analogías con otros problemas.
Siempre tómese el tiempo para entender qué hace el código y cómo funciona, ya que cada solución que encuentre puede ser análoga a un problema futuro. Para resolver ese problema futuro, su fundación debe ser sólida.

Abandonar trabajo de adivinar
Sólo los aficionados adivinan. En su lugar llevar a cabo experimentos controlados. Utilice enfoques sistemáticos para acercarse a la solución.

Estrategizar
Piensa en abordar un problema como ir a la guerra. No solo aparece y espera que gane, sino que necesita tener un plan de ataque, una estrategia para abordar los problemas. Mi estrategia es dividir y conquistar. Defino los grandes problemas en tareas más pequeñas alcanzables y me baso en ellos.

Plan de contingencia
Si ha seguido todos los pasos anteriores pero aún continúa luchando con un problema, ante los primeros signos de frustración, deténgase y tómese un momento para pensar en un plan de contingencia. Al igual que cuando estás en guerra cuando te enfrentas a la agonía de la derrota, es inteligente tener un Plan B para tranquilizarte (en nuestro contexto: buscar ayuda de un amigo, soporte en el foro, otro enfoque si este falla, etc.)

Diario de pánico
Hice esto en mis primeros días. Cada vez que sientas que la frustración se te avecina, simplemente detente y escribe cómo te sientes y qué lo causó. Asegúrese de volver a él cuando haya resuelto su problema y anote cómo lo manejó. Piense en sus factores desencadenantes: ¿es siempre lo mismo? ¿Has manejado esta situación mejor que la última vez? etc.

Descubrí que este método me funciona porque cada vez que te sientas frustrado, molesto, etc., hacer referencia a la revista será un recordatorio de cómo has pasado por esto antes y cómo te enfrentaste a la situación, no por estar frustrado sino por pensar con claridad. . Pronto detesté escribir en el diario e inevitablemente comencé a relacionarme mentalmente con eventos pasados ​​y con lo que me ayudó a disipar la frustración.

Dar un paseo
Seriamente. Solo detente y toma un descanso. Ese sentimiento inicial de frustración para mí es como una señal de advertencia de que estoy nadando en aguas turbias y es hora de rejuvenecer la mente con una actividad relajante. Parece simple pero me ha ayudado muchas veces para volver a pensar con claridad.

Desde que etiquetó a Ruby on Rails, un resumen rápido en esta página ( http://weblog.rubyonrails.org/20 ) nos dice que lo que funcionó para otros podría no funcionar con nosotros. DHH se aclara que codifica enojado.

Desde mi perspectiva, realmente entiendo y comparto tu frustración. De todos modos, no soy un profesional (tal vez ni siquiera un aficionado) en la programación, pero esto es lo que tengo que compartir. Creo que ayudará si comparto un poco sobre mi experiencia (no dudes en omitir):

Me gradué con una ley. Licenciado en ciencias, pero han estado ganando una vida digna como comercializador web durante algunos meses. Soy autodidacta (odio esa palabra; prefiero la palabra “autoaprendizaje”) para programar a veces. Sin mucho fondo y conocimiento muy limitado, es muy frustrante cuando golpeo la (s) pared (es).

Si esto es algo que yo (o debería decir “nosotros”) realmente no queremos hacer, nos habríamos rendido hace mucho tiempo. Pero no lo hicimos. El hecho de que me lo pregunten aquí y yo esté supervisando el tema lo demuestra.

Primero es bueno saber “¿por qué?”. ¿Por qué estamos frustrados? Los dos sabemos por qué; porque no obtuvimos lo que esperábamos. Codificamos y codificamos y codificamos, bam el resultado es algo menos de lo que pensamos que deberíamos obtener: por eso nos agotamos gritando, gritando y culpando a nuestra inteligencia.

Ahora proceda a “¿cómo?”. ¿Cómo podemos manejar esto? Si enojarse le ayuda a ser productivo y codifica mejor (como en el caso de DHH), entonces, ¡enojarse! Pero a partir de tu pregunta, parece que tampoco hace mucho por ti.

Le sugiero que canalice esas energías en algo más productivo y significativo. En lugar de golpear su cabeza contra la pared, intente un enfoque diferente como el de StackOverflow o Quora, haga IRC y Twitter, encuentre un mentor o un programa de pareja con compañeros y muchas más formas de usar esa energía para mejorar. En palabras más simples, enfóquese en obtener el resultado a través de prueba y error o experimentando, con diferentes formas y métodos. Encuentre la forma que funcione para usted (tal vez algo que nunca espera, pero quién sabe si encontrar un mentor o IRC en realidad le ayuda a lidiar con la frustración).

Otra forma de manejar esos momentos de frustración es disminuir sus expectativas. No es la forma más útil si me pregunta, especialmente si nos preocupa el resultado y el resultado de nuestras actividades (es decir, la codificación, etc.), pero desde el punto de vista del manejo de la ira, ayuda. Pruébelo y tal vez podría ayudarlo con la frustración y ahorrarle más energía para hacer lo que sea necesario para alcanzar sus objetivos profesionales o de codificación.

Me enfrento a este muro casi todos los días, intento aprender o enseñarme a mí mismo a programar. La pasión junto con la actitud positiva y la mentalidad son aquellas cosas que me mantienen sano y con los días.

Realmente espero que encuentres esto útil. Todo lo mejor.