Artículo de Julia Evans sobre la aventura que constantemente vivimos cuando estamos programando. url: https://jvns.ca/blog/2022/12/08/a-debugging-manifesto/
¡Hola! Llevo seis meses trabajando en una revista sobre depuración con mi amiga Marie , y uno de los problemas que tuvimos fue explicar la actitud correcta al depurar.
Terminamos escribiendo un breve manifiesto de depuración para empezar el fanzine, y estoy muy contento con el resultado. Aquí está como imagen y como texto (con algunas explicaciones adicionales).
Cuando se detecta un error, el instinto natural es intentar solucionarlo lo antes posible. Y, por supuesto, a veces es justo lo que hay que hacer: si el error está causando un incidente grave en producción, hay que mitigarlo rápidamente antes de adentrarse en la causa raíz.
Pero en mi depuración diaria, encuentro que generalmente es más efectivo (¡y más rápido!) dejar el error en su lugar , descubrir exactamente qué salió mal y luego solucionarlo después de entender lo que sucedió.
Intentar solucionarlo o agregar soluciones alternativas sin comprender completamente qué sucedió generalmente termina dejándome aún más confundido.
A veces me desmoralizo mucho al depurar y siento que NUNCA progresaré.
Tengo que recordarme a mí mismo que he corregido muchos errores antes y probablemente arreglaré este también :)
¡A veces los errores surgen de fuentes inesperadas! Por ejemplo, en " ¿Creo que encontré un error en el kernel de Mac?" , describo cómo, la primera vez que intenté escribir un programa para Mac OS, encontré un error causado por un error en el kernel de Mac OS.
Esto fue realmente sorprendente (¡normalmente el sistema operativo no tiene la culpa!), pero a veces incluso fuentes normalmente fiables se equivocan. ¡Incluso si se trata de una biblioteca popular, tu sistema operativo, la documentación oficial o un compañero de trabajo extremadamente inteligente y competente!
Dicho esto, casi siempre el problema no es que haya un error en Mac OS. Solo puedo hablar por mí, pero el 95 % de las veces que algo falla con mi programa es porque hice algo tonto.
Por lo tanto, es importante buscar primero el problema en su propio código antes de intentar culpar a alguna fuente externa.
He aprendido muchísimo pidiendo ayuda a compañeros de trabajo o amigos con la depuración. Creo que es una de las maneras más divertidas de colaborar porque tienes un objetivo específico y hay muchísimas oportunidades para compartir información como:
Cómo utilizar una herramienta de depuración específica (“aquí se explica cómo utilizar GDB para inspeccionar la memoria aquí…”)
Cómo funciona una cosa informática (“oye, ¿puedes explicarme CORS?”)
Errores similares del pasado ("He visto esta ruptura de X manera en el pasado, ¿quizás sea eso?")
Esto habla por sí solo: a veces parece que las cosas se rompen aleatoriamente sin ninguna razón, pero eso nunca es cierto.
Incluso si sucede algo realmente extraño (como un problema de hardware), eso sigue siendo una razón.
He escrito MUCHO sobre mi amor por las herramientas de depuración como tcpdump, strace y más en este blog.
Para corregir errores necesitas información sobre lo que hace tu programa y, para obtener esa información, a veces necesitas aprender una nueva herramienta.
Además, a veces necesitas crear tus propias herramientas mejores, por ejemplo, mejorando tu conjunto de pruebas, la impresión atractiva, etc.
Como probablemente ya sepas si lees este blog con frecuencia, me encanta depurar y he aprendido muchísimo. ¡Aprendes algo nuevo! ¡A veces te toca una gran historia de guerra que contar! ¿Qué podría ser más divertido?
Realmente considero la depuración como una inversión en mi conocimiento futuro: si algo falla, a menudo es porque hay algo mal en mi modelo mental, y esa es una oportunidad para aprender y asegurarme de saberlo para la próxima vez.
Claro, no todos los errores son aventuras (ese error de un solo punto que estaba depurando hoy ciertamente no me pareció una aventura divertida). Pero creo que es importante (en la medida de lo posible) reflexionar sobre los errores y ver qué se puede aprender de ellos.