Cómo evitar o lidiar con frustrarse durante la programación

Muy raramente tengo que lidiar con mi propia frustración cuando programo.

La programación es quizás la única actividad donde, literalmente, todo está bajo mi control.

La gente puede traicionar, olvidar, decepcionar o simplemente convertirse en idiotas.

Las reglas de la vida no siempre se siguen y, a menudo, conocer a las personas adecuadas y los trucos correctos es más importante que conocer las reglas por sí mismos.

Los autos se rompen. Los terminales tienen errores. Roturas de hardware.

La programación es probablemente la pieza más confiable aquí.

Mientras mi código esté en la nube, mis pruebas pasan y mi buscapersonas está configurado para zumbar si algo falla, ¿de qué se puede frustrar?


Probablemente el único caso en el que me frustro mientras la programación está conectada con las expectativas de cierto software.

Rant sigue.

Por ejemplo, hace aproximadamente un mes pasé un fin de semana intentando configurar a Zookeeper y Kafka.

Esa vez estuve realmente frustrado.

No solo Java no funcionó correctamente y requirió una configuración adicional.
No solo tuve que encontrar las versiones correctas para instalar y la herramienta de compilación correcta para usar.

¡Ninguno de esos dos tenía herramientas de depuración disponibles!

Zookeeper es un sistema de archivos de bloqueo distribuido. Sistema de archivos! Is no tiene una herramienta de línea de comandos incorporada con “ls / cat / cp / mv / chown”. Lo mejor que encontré han sido algunas aplicaciones de terceros que ofrecen una interfaz web para navegar por el árbol de “directorios”.

Eso tomó cerca de tres horas para resolverlo. Y fue frustrante.

Kafka … Esperaba una cola de mensajes persistente y fácil de usar. Bueno, la parte de la cola de mensajes funciona, pero no mejor que cualquier PubSub.

Lo que realmente necesitaba era la funcionalidad para reproducir datos desde cierto desplazamiento.

Resultó imposible.

Primero, Kafka estaba cambiando su interfaz interna. Lo que invalidó la mayoría, si no todos los módulos de código abierto en node.js, Python y Ruby. Específicamente para la parte “replay form offset”.

He leído una docena y he probado al menos cinco en los tres idiomas. En ninguno de mis intentos he tenido éxito en tener un código de diez líneas que publicaría 10 entradas y luego leería desde la 5ª en adelante.

Después de un fin de semana entero perdido, me di por vencido y codifiqué dkorolev / overlog

Hasta el día de hoy, me siento frustrado por el hecho de que las personas no tengan el mismo enfoque para las pruebas que yo. Donde el código descargado viene con una prueba reproducible y, efectivamente, un ejemplo de uso:

  $ git clone [correo electrónico protegido] : dkorolev / overlog.git
 Clonando en 'overlog' ...
 remoto: contando objetos: 8, hecho.
 remoto: Compresión de objetos: 100% (8/8), hecho.
 remoto: Total 284 (delta 1), reutilizado 0 (delta 0)
 Objetos de recepción: 100% (284/284), 60.86 KiB |  8 KiB / s, hecho.
 Resolución de deltas: 100% (180/180), hecho.
 $ cd overlog
 $ npm instalar
 prueba de $ npm
 > [correo electrónico protegido] test / home / dima / quora / overlog
 > ./test_storer.sh && ./test_fetcher.sh && ./test_http_and_pubsub.sh

 Directorio de trabajo: /tmp/tmp.Hl5PFDMz86
 Responde con INVALID_JSON: OK
 Responde con NEED_MS_FIELD: OK
 Responde con LARGE_TIME_DISCREPANCY: OK
 Escribe una entrada: OK
 Escribe una entrada y mantiene las estadísticas: OK
 Falla si no se puede escribir en el directorio intermedio: OK
 Utiliza el directorio intermedio anulado: OK
 Falla si el directorio de destino no se puede escribir en: OK
 Utiliza el directorio de destino anulado: OK
 Enjuague explícitamente: OK
 Se vacia implícitamente por el número máximo de entradas por archivo: OK
 Reproduce archivos intermedios preexistentes en el inicio: OK
 Se descarga de forma implícita debido al tiempo de espera (inestable, usa el modo de suspensión): OK
 PASAR
 Directorio de trabajo: /tmp/tmp.DNrQmJIvcY
 No devuelve ningún registro: OK
 Devuelve todos los registros de un archivo de entrada: Aceptar
 Puede ejecutar múltiples consultas: OK
 Ordena la salida por "ms" antes de regresar: OK
 Devuelve el rango de registros de un archivo de entrada: OK
 Devuelve el rango de registros de un archivo de entrada II: OK
 Devuelve el rango de registros de un archivo de entrada III: OK
 Devuelve todos los registros de varios archivos de entrada: Aceptar
 Devuelve resultados de un rango de archivos de entrada: OK
 Da prioridad a las marcas de tiempo en el nombre de archivo sobre las marcas de tiempo dentro del archivo: OK
 PASAR
 Directorio de trabajo: /tmp/tmp.xyGpDzKiiJ
 A partir de almacenamiento en el fondo: PID 20251
 Esperando que el almacenista se ponga saludable: .. OK
 La página de estado refleja un servidor recién iniciado: OK
 Agregando algunas entradas: OK
 La página de estado refleja las entradas recién agregadas: OK
 La página de entradas pendientes devuelve las nuevas entradas no confirmadas: OK
 Ejecutando el buscador no siguiente para ver las entradas pendientes: Aceptar
 Confirmar coincidencias de entradas coincidentes: Iniciar la recuperación de PubSub en segundo plano: PID 20278
 A la espera de que se inicie el programa de recuperación y tome las entradas pendientes: .. Aceptar
 Limpiando las entradas: OK
 La página de estado refleja el flujo reciente: OK
 La página de entradas pendientes ya no devuelve las entradas ya que se han confirmado: Aceptar
 Añadiendo algunas entradas más: OK
 Esperando a que el recolector obtenga nuevas entradas a través de PubSub: .. OK
 Deteniendo captador de fondo: OK
 Deteniendo el almacenador de fondo: OK
 PASAR

No debes evitar sentirte frustrado; Debes evitar verlo como algo malo . La frustración es una señal de que vas a salir de tu zona de confort, lo cual es esencial si quieres aprender. En otras palabras, consuelo en el pensamiento de que esta frustración demuestra que estoy aprendiendo (o al menos es una condición necesaria para ello).

Esto no significa que no apestará de vez en cuando y que querrás rendirte. Debe tener en cuenta que, al principio, hay una barrera de frustración que debe superar. Necesitas aprender muchas cosas, y como, como dije, el verdadero aprendizaje implica frustración, terminarás frustrado casi constantemente. Además de eso, todavía no eres lo suficientemente bueno como para usar la habilidad; todo lo que estás haciendo es luchar con ejercicios artificiales.

En otras palabras, un poco de frustración es bueno, ya que es (probablemente) una señal de que sigues progresando, pero tanta frustración como la que tienes al principio de aprender una nueva habilidad es, bueno, frustrante. Encuentro consuelo en la idea de que esto solo dura los primeros días de aprendizaje de una habilidad (aunque esto obviamente depende de la frecuencia con la que practiques y la eficiencia con la que estés aprendiendo).

Entonces, para resumir:

  • la sobrecarga inicial de frustración no dura mucho tiempo; solo necesitas atravesarlo. Después de eso, puedes empezar a construir cosas increíbles;
  • un poco de frustración de vez en cuando no es malo. Es una condición necesaria para el verdadero aprendizaje.

Soy ingeniero de software desde hace casi 30 años. Si bien definitivamente he pasado muchas horas agravantes, frustrantes e incluso deprimentes en busca de ese “pequeño insecto diminuto”, debo decir que AMO absolutamente lo que hago para ganarme la vida.

Para mí, la depuración es como leer una novela de misterio. No sabes quién cometió el crimen. Sabes que es uno de los jugadores, pero estás buscando pistas, pistas. Es como un videojuego en el que te pagan mucho dinero por jugar.

Puedo entender si no es tu pasión. No es para todos.

Como dice mi esposa “todo trabajo tiene una pala”. No importa lo que elija hacer para ganarse la vida, siempre habrá un aspecto que no es agradable ni placentero. Para mí, la programación de computadoras es aproximadamente 80% pura diversión y disfrute, 10% trabajo aburrido y 10% agonía.

Puede haber profesiones por ahí que tienen un mayor porcentaje de diversión y disfrute. Desafortunadamente, muchos se dan cuenta demasiado tarde de que odian el trabajo que ocupa la mayor parte de su tiempo. Es un estado triste y triste encontrarse con uno mismo.

Usted no La programación es frustrante. Mejor que evitar la frustración, es aprender a manejarlo de manera productiva.

La frustración de la programación puede atribuirse a “cosas que no funcionan”.

La mejor manera de manejar esto es mediante la aplicación rigurosa del método científico para atacar el problema que provoca la frustración.

Aprende a vivir con la frustración. Como se mencionó en otras publicaciones, la frustración se manifiesta cuando sales de tu zona de confort. En este mundo en constante evolución de la tecnología de la información, el cambio rápido es la norma, por lo que es mejor que nos acostumbremos.

Trátala en trozos pequeños. A todos nos enseñan a ver el panorama general ya pensar en grande. Sin embargo, tener una meta aparentemente demasiado grande e inalcanzable también crea frustración. Esto es especialmente cierto si parece que no se hace ningún progreso. Así que mejor tratar los problemas un paso a la vez. Trata cada paso como una victoria antes de que te des cuenta que alcanzarás tus objetivos.

Trae compañía. No hay nada mejor que hacer un viaje difícil con cohortes con los que puedes ir juntos.

Uno de los objetivos principales que las personas tienen en la vida es convertirse en un creador , lo que puede llevar a tener un impacto en la sociedad. Para convertirse en uno, hacer muchos proyectos es vital, y esto requiere salir de su zona de confort.

Ser un creador y trabajar en proyectos requiere una mentalidad diferente debido al hecho de que estará fuera de su zona de confort . Es un tipo de solución de problemas, algo que no se suele enseñar en las escuelas, y requiere mucha energía , más energía que otras actividades.

  • Dentro de un proyecto, habrá tantas cosas que necesita aprender, algunas de las cuales puede que no esté muy familiarizado. Es importante darse cuenta de que casi todas las personas se encuentran con esto, y casi nadie pasa por cada proyecto sin consultar los recursos o pedir ayuda. No dudes en utilizar Google o Stack Overflow.
  • Habrá momentos en los que desee deshacerse de parte de su proyecto o reiniciar su proyecto por completo porque su enfoque no funciona. No todas las partes del proyecto se desarrollarán sin problemas.
  • Es importante desarrollar la perseverancia. Muchas veces la gente se encuentra con un muro de ladrillos en un proyecto, pero necesitas usar tu motivación para pasar el muro.
  • No esperes terminar un proyecto fácilmente. Es posible que algunos días parezca que no logras mucho, y algunos días te hacen mucho trabajo.

En algunos casos, los ingenieros de software bien logrados pasan mucho tiempo (alrededor de dos o tres horas) para encontrar un error de ONE en su código.

La mejor manera de lidiar con la frustración de la programación es de la misma manera en que deberías lidiar con otras frustraciones en la vida:

Habla con alguien.

La programación de pares es increíble para esto.

Para conocer a otros, comience a asistir a grupos de usuarios y eventos de redes de tecnología en su área. Revisar el encuentro.

1. Tal vez la programación no sea para ti. Encontrar ese pequeño error (que puede ser un error tipográfico) es gratificante. “¡Ajá! ¡Ya lo tengo! Debería funcionar esta vez”. Fue aún más difícil con la versión 2 de Microsoft C. Usted escribió, compiló en un archivo de ensamblaje, corrigió los errores del compilador (hubo algunas instrucciones de C que se compilaron para el ensamblado sin sentido, como cargar un par de registros, luego usar un par diferente, o saltos que eran lo opuesto a lo que escribiste, y si escribiste tu declaración “si” al revés, AÚN compiló mal), ensamblados y vinculados, se encontró que algo no funcionaba bien, editó la fuente C, compiló, corrigió el compilador errores de nuevo (e incluso si mantuviera una lista de todos los errores de la primera ejecución, corregir los errores de la segunda ejecución podría demorar una o dos horas más), etc., etc., hasta la noche.

2. ¿Tres horas? Una vez perseguí un error (que resultó ser un error tipográfico de 1 carácter) durante 6 meses. No se podía reproducir, por lo que no había manera de saber dónde mirar. Un cliente finalmente podría reproducirlo bajo demanda. Después de eso tardó 5 minutos en encontrarlo y arreglarlo. (Por supuesto, no pasé 6 meses de 40 horas a la semana haciendo nada más que perseguir ese error, pero ese fue el tiempo que tardé en poder reproducirlo).

3. ¿Son los insectos frustrantes? Sí, especialmente cuando repasas el código una y otra vez y sabes que no es el código, es el programa el que está causando el error. (El código está escrito para llevar a cabo exactamente la función que le dijiste, pero no deberías estar haciendo eso en ese punto del programa; pasaste por alto algo o pensaste que habías configurado algo cuando no habías [punteros sin inicializar son un gran ejemplo de eso, pero son fáciles de encontrar: en DOS, se produjo un error de “división por cero” al ejecutar la dirección 0]). Utilizo a mi esposa (que no pudo distinguir un script de shell de una lista de ensamblajes) para arreglar eso. Explico cómo funciona el código y, de repente, toca un punto que NO PUEDO explicar porque hay un problema con el programa en ese momento. En la mayoría de los casos, ella no tiene idea de lo que estoy hablando, por supuesto, pero al verse obligada a poner el programa de nuevo en palabras, veo dónde me equivoqué al convertir las palabras en conceptos de programación.

Y finalmente vale la pena tener un código a prueba de balas, si su llamada es la programación. ¿Comercializando un producto? No duraría una semana. Pero hay personas que pasan vidas enteras de trabajo en marketing y les encanta. Pasé 40 años escribiendo programas que no se podían escribir (y desarrollando hardware que no se podía desarrollar) y me encantó cada minuto. Nunca trabajé, fui a la oficina para disfrutar mi día y no pude retirarme hasta que cumplí los 70. (Y todavía escribo código, no para nada, solo porque veo algo y me pregunto “¿cómo se escribiría eso?” o “¿qué tan complejo sería un programa para hacer eso?” Todavía recibo ofertas de trabajo, pero disfruto molestando a la gente en Quora demasiado para perder 8 horas al día sin estar aquí. De lo contrario, probablemente todavía me paguen por ello. escriba el código en el 73. [Solía ​​decir que no me pagaron por escribir el código, me pagaron por solucionar los errores que escribí. No poder resolver errores si usted es un programador es como no poder manejar cebo si eres un pescador. Encuentra una manera de ganarte la vida que te guste.])

Ben Baert ya ha cubierto la mayor parte de lo que iba a decir, así que solo añadiré esto:

En su comentario a su respuesta, indicó que no es exactamente un principiante. En ese caso, su frustración también puede ser el resultado de que su mente subconsciente le haya dicho que está haciendo algo incorrecto .

Quizás esté escribiendo un código para un problema que puede resolverse mejor a través de medios no informáticos (esto es algo que veo con demasiada frecuencia en mi carrera de consultor).

O quizás lo esté haciendo de una manera innecesariamente complicada: tal vez esté atascado en detalles que ya se han abordado en una biblioteca disponible, o está gastando tiempo luchando contra un marco innecesariamente complicado para una tarea que realmente podría Código simple y desde cero.

Cualquiera que sea la razón (es), es probablemente un buen momento para detenerse y hacer una verificación de la realidad, preferiblemente (como sugirió Eric Wise) con un tercero. Para su situación específica (implementando un trazador de rayos), escribiría mi algoritmo en papel o en una pizarra, daría unos pasos atrás y algunas respiraciones profundas … e iría a hacer otra cosa. La pausa que refresca el cerebro, por así decirlo.

En cuanto a conocer a otros, si no está dispuesto a compartir información con Google, puede buscar una comunidad de interés en Google+ y participar por un tiempo. Cuando te sientes cómodo cuando los demás, y ellos contigo, solicita un Hangout para la bondad de F2F virtual.

No puedes evitarlo, tienes que aprender a canalizar tu ira.


¡Me gusta esto!

Este soy yo cuando Unity3D me da problemas con el compilador JIT en iPhone.

Ok, aparte del humor.

Cuando me frustro demasiado me detengo, me alejo por un tiempo y hago y pienso en otra cosa. Obtengo algo de comida, juego un par de rondas de un juego rápido en mi teléfono.

Lo que suele suceder es que, tan pronto como no esté luchando por encontrar respuestas al problema y me siento relajado y sin pensar en ello, mi cerebro encontrará la respuesta para mí y simplemente aparecerá en mi cabeza.

Tener una configuración que arroje informes de errores hacia ti es ciertamente útil. Probablemente estés codificando en algún lenguaje de programación real de la ciudad ; Solo soy un tipo de PHP + JS, así que tengo suerte: tengo errores de PHP claramente establecidos en mi entorno local, con el informe de errores activado en php.ini, y los errores de JS aparecen en la consola, por lo que Sé dónde buscar pistas.

Lo más probable es que también tengas herramientas para darte pistas; Sólo tienes que averiguar dónde y qué son. Eso te acelerará. Busque herramientas de seguimiento de errores de pieles para el idioma que elija, estoy seguro de que hay algunas herramientas geniales e IDE que puede utilizar para mejorar esto. Una advertencia: todas las herramientas dicen ser tan fáciles de configurar; Realmente no lo son. Aún así, tómese el tiempo para averiguarlo y configurar su entorno correctamente. A tientas en la oscuridad, estar perdido, eso no es nada divertido.

Suficiente sobre eso. Las tres horas que pasaste buscando ese error no fueron completamente desperdiciadas, probablemente aprendiste mucho de eso. La próxima vez será mejor.

Todo el mundo encuentra la caza de insectos frustrante y exasperante. Pero la mayoría de la gente piensa que la gran cantidad de éxitos durante un día compensa la frustración, y los éxitos son cada vez más significativos. En un momento dado, los fracasos se vuelven espectaculares, en lugar de triviales, y ahí es cuando puede dar un paso atrás y apreciar lo mucho que puede lograr ahora que antes estaba más allá de su alcance. Se pone mejor cada día.

Pero si nunca ha sentido la euforia de hacer que la computadora haga lo que le dice que haga, incluso si es algo simple y básico, entonces tal vez no tenga la pasión por la programación y deba buscar otros lugares para expresarse. tú mismo. No es para todos; Lo más seguro es que encuentre algo más que hacer si no encuentro la codificación gratificante cuando aplasto los errores o hago que las cosas funcionen.

Si estoy gastando por siempre buscando un error, realmente apesta. Pero, a su vez, en realidad ENCONTRAR que el error es enormemente gratificante. A veces me ha llevado varios días rastrear insectos particularmente horribles, pero después de encontrarlos, quiero levantarme y hacer un baile de touchdown en mi escritorio. Estoy en un alto por, como, horas después de eso.

Puede usar el desarrollo guiado por pruebas para reducir la cantidad de errores que pueden propagarse a través de su código, y puede usar funciones avanzadas de su IDE para depurar más rápidamente. Pero un hecho de la vida de los programadores es que casi siempre pasará más tiempo haciendo que algo funcione, en lugar de solo escribirlo. Si la parte de “hacer que funcione” es frustrante, tediosa e irritante para usted, entonces puede considerar otra línea de trabajo. Si no, es posible que te encuentres en una carrera infeliz.

Creo que la curva de aprendizaje para programar lokks como una “función S-Curve o Sigmoide
En este caso, la mejora de la competencia comienza lentamente, luego aumenta rápidamente, y finalmente los niveles ”
A pesar de tener más de 25 años de experiencia en TI, recientemente tuve dificultades para aprender los conceptos básicos del lenguaje de programación Haskell debido al cambio de paradigma.
Pasé por mucha frustración al usar una calculadora programable TI 57 alrededor de 1981. ¡Qué sensación de euforia cuando vi una fórmula calculada automáticamente! Eso me impulsó a usar el lenguaje de programación básico.
Solo toma la frustración inicial, y la recompensa será mucho mayor.

He pasado días intentando solucionar un problema (en realidad sucedió varias veces, tanto en la universidad como en el trabajo), no solo horas.

He estado frustrado, pero nunca enojado o molesto. Mi frustración toma una forma realmente útil: me niego a creerle a alguien o algo. Entonces, en ese estado, si veo una declaración como a = b + c, usaré un depurador para verificar que la adición ocurrió correctamente. Requiere mucho tiempo, pero siempre disfruto del resultado final. Es como ganar una batalla contra la computadora.

Pero en serio, si odias absolutamente la codificación, haz algo más en informática. O cambia tu campo. No conozco a nadie que disfrute de la programación, en realidad odia la depuración. Todos estamos molestos de vez en cuando, ¡pero las recompensas valen la pena!

Si no disfrutas de la programación y aún estás en la escuela, no entres en la programación como una profesión. No es para ti.

Si no te gusta cuando no tienes que tener un jefe, no tienes que escribir lo que alguien te dice que escribas, no tienes que lidiar con el calendario de lanzamiento de alguna compañía de software, entonces de repente no va a funcionar. más agradable para ti cuando tienes que aparecer en algún lugar del 9 al 5.

Solo cambia mayores.

Abro recursivamente (que está condicionado a estar frustrado) a Quora y comienzo a leer la respuesta a esta pregunta. Con una configuración de bandera booleana global en verdadero, eso se correlaciona con la declaración: “No responderé esta pregunta nuevamente”.
Espero que hayas disfrutado

El tipo que habla sobre cómo encontrar un error es como una novela de misterio que probablemente vive en el sótano de su madre. Jaja. Acabo de ver un video donde la gente dijo que su inspiración para comenzar a codificar era que tenían que hacer algo. Por supuesto. Si quieres contar hasta 100000. Acabo de intentar controlar mi tormenta de ideas con la entrada del controlador desde mi controlador de xbox one. He estado jugando con la codificación en Scratch from MIT cuando tenía unos 10 años. Ahora tengo 16 años. Puedo programar pathfinding, 3D básico, fractales, procesos de optimización, simulación orbital y mucho más en Scratch. Como Scratch se volvió demasiado lento para mis necesidades, probé algunos idiomas reales. Gran error. Para hacer cualquier cosa, necesito 100 líneas de sintaxis incomprensibles, donde, como en Scratch, necesitaba 3 líneas. Para hacer algo, primero necesito nadar a través de un mar imaginario de sintaxis / mierda, y copiar / pegar 50 líneas de código de las que no entiendo nada. Es o sigue copiando / pegando de toturials estúpidos en youtube de un tipo indio llamado dheli con astma hasta que te ahoges en un torbellino de sintaxis sin sentido que en última instancia se caga a sí mismo porque no entiendes lo que estás haciendo, o te pegas a las estúpidas ventanas de la consola . Menos mal que desperdicié mis vacaciones de verano en esto. Estoy usando C # por cierto.

Se mejora la programación, realmente es así de simple.

He estado programando para lo que parece ser toda mi vida, todavía me sorprenden los bichos tontos, es parte del paquete. Sin embargo, encontrará que el porcentaje de tiempo que dedica a la programación en comparación con la búsqueda de errores aumentará en favor de la programación.

Si tienes un error, diviértelo, no asumas que se está incrementando un contador, no asumas que has asignado suficiente memoria, no asumas que el puntero en realidad apunta a algo que realmente está ahí. A menudo, con los errores, pensamos demasiado, pensamos que el problema es más grande de lo que es, pero a menudo será la cosa más simple.

Aquí está la cosa. Con el tiempo, no solo encontrará la depuración más fácil, ya que comenzará a reconocer varias clases de errores, sino que también causará menos de ellos a medida que mejoren sus métodos. En este momento, usted está pagando sus cuotas.

Tomar satisfacción en el producto final.

La depuración puede ser molesta, no hay forma de evitar eso. Pero hay maneras de hacerlo mejor. Lo peor es si solo te golpeas la cabeza con el código y no haces ningún progreso. Pero si está siguiendo un proceso adecuado para cazar el error, puede ser más un desafío que una tortura.

Es difícil examinar una pieza grande de código para encontrar lo que está mal, por lo que debería dividirla en partes más pequeñas y examinar cada una de una en una. Desea ver si todo funciona como se espera o no. Puede usar sentencias de impresión para verificar esto, o un depurador real. Eventualmente encontrará la pieza de código que está equivocada y puede examinarla más de cerca para determinar qué está mal.

Para ayudar a evitar grandes bloques de códigos rotos misteriosos, puede comenzar a probar su código, preferiblemente con pruebas de unidades reales, pero con un código de prueba más casual.

Finalmente, cuando has hecho un gran esfuerzo y estás realmente atascado, ayuda tener a alguien a quien puedas pedir ayuda. Pruebe con otro estudiante, un asistente de asistencia técnica o StackOverflow.