Aprender y mejorar sus habilidades de depuración

Los programadores dedican un alto porcentaje del tiempo a depurar en lugar de escribir código. Probablemente tuvo algo de capacitación en el aprendizaje de un idioma o marco, pero ¿cómo aprendió a corregir los defectos de su software?

Cuando te enamoraste de la programación (o al menos decidiste que era una carrera remunerada), probablemente pensaste en ella como un esfuerzo creativo. Diseñaría un gran software, escribiría el código y ¡puf! —Funcionaría perfectamente la primera vez.

Si. Correcto.

En el mundo real, pasaste mucho tiempo depurando código en lugar de escribir cosas nuevas. Estoy seguro de que podría desenterrar algún porcentaje oscuro del tiempo del desarrollador que se dedica a corregir defectos en lugar de crear nuevas funciones, pero dudo que necesites escuchar un número. Puede imaginarse con demasiada facilidad los días que pasó buscando el Bug From Hell y su efecto en el cronograma de su proyecto.

Ahora, hay muchas formas en que los programadores pueden aprender nuevas habilidades de software, ya sea leyendo un libro, asistiendo a una conferencia tecnológica o visitando sitios como JavaWorld.com. (Me alegra que hagas lo último). Sin embargo, estos suelen centrarse en herramientas, como lenguajes o marcos, y no en meta-técnicas, como "Cómo encontrar ese error en dos horas en lugar de dos días". Los idiomas pueden aparecer y desaparecer, al igual que los depuradores IDE, pero la capacidad de discernir bajo qué roca se esconde su error es algo que se quedará con usted para siempre.

Una gran parte de la habilidad de aprender a depurar es, por supuesto, la experiencia. Esa podría ser su propia experiencia o la oportunidad de ser un saltamontes a los pies de un programador maestro. También sospecho que algunas personas tienen un talento innato para la resolución de problemas (igualmente relevante para reparar un automóvil averiado como una aplicación que se porta mal), y aquellos de nosotros sin él solo podemos hacer pucheros de envidia.

Sin embargo, se puede aprender algo de esto. Por ejemplo, un programador maestro que conozco tenía un axioma: si ha estado buscando un error durante un tiempo (relativamente) largo y no puede encontrarlo, dijo: "Está buscando en el lugar equivocado". Suena obvio, pero ciertamente cierto ... ¿y con qué frecuencia ha perdido el tiempo mirando en el módulo XYZ cuando el problema estaba en otra parte?

Pregunté a varios desarrolladores por las formas en que aprendieron o mejoraron sus habilidades de depuración. Un número sorprendente de ellos habló sobre su dominio del depurador del IDE o alguna otra experiencia en herramientas, pero la mayor parte de lo que quería saber es su consejo sobre cómo mejorar la capacidad de corregir errores. Aquí hay un breve resumen de sus respuestas.

  1. Ser disciplinado. La depuración es un proceso, dijo un desarrollador, no una serie de eventos aleatorios. No modifiques las perillas al azar; siga el proceso de ejecución del código. Como arreglar una cortadora de césped, dijo. ¿La parte A obtiene la información que necesita? ¿Qué tal la salida? Si está bien, sigue adelante.
  2. Para mejorar sus habilidades, depure el código de otras personas en lugar del suyo. Será más fácil ver las fallas en las suposiciones de la otra persona que ver las suyas propias. Puede hacer esto como parte de una revisión de código entre pares y una depuración entre pares. Desarrollará la capacidad de reconocer las causas comunes de los defectos más rápidamente, prometió un desarrollador, y le enseñará a reconocer (y abandonar) sus propias malas prácticas de desarrollo.
  3. Imagina que eres el compilador. Busque y corrija tantos errores como pueda antes de presionar el botón Compilar. Si bien la mayoría de los IDE modernos incluyen depuradores integrados (como Intellisense de Visual Studio), aprenderá menos de su automatización que de examinar conscientemente el proceso. (De la misma manera que nunca aprenderá a escribir correctamente si depende de un corrector ortográfico para hacer todo el trabajo).
  4. Aprenda a corregir errores lo antes posible en el proceso de desarrollo. Eso podría significar algo formalizado, como el desarrollo impulsado por pruebas. Eso también significa dedicar tiempo a depurar su diseño en lugar de adentrarse en la codificación.
  5. La depuración es más fácil cuando puedes tener todo el sistema en tu cabeza. No cometa el error de concentrarse en una sola parte de una aplicación. Preste atención a las interrelaciones entre módulos. Lea el código en múltiples niveles de abstracción, aconsejó un programador. "Encontrar el error es la parte más difícil, y se necesita una comprensión clara de lo que están haciendo varias partes del código", dijo.
  6. Creo que parte del mismo consejo es la sugerencia de otra persona: obtenga una buena comprensión del sistema un nivel por debajo del nivel en el que está trabajando. "Si está depurando un programa de nivel de sistema C, es útil saber algo de ensamblaje y algo sobre el sistema operativo", explicó un ingeniero jefe de software del sistema. "Si está depurando una aplicación J2EE, es útil saber algo sobre los subprocesos de Java, RMI y GC". En muchos casos, señaló, los mensajes de error provienen de ese nivel inferior. "Si puedes entender lo que eso significa, te ayudará a descubrir qué está fallando en tu nivel de abstracción", explicó.

Algunos desarrolladores también recomendaron recursos adicionales. Entre ellos se encuentra el libro de David Agan, Debugging, que promete nueve reglas indispensables, y Why Programs Fail: A Guide to Systematic Debugging, que está a punto de ser publicado en una segunda edición. El desarrollador que recomendó este último dice que enseña un enfoque sistemático para la depuración con muchos ejemplos prácticos. Otro sugirió un ensayo en línea, Diez habilidades de probadores de software altamente efectivos.

Me gustan todas esas respuestas, pero sospecho que hay más sabiduría para compartir. ¿Cómo adquirió sus habilidades de depuración? ¿Cómo ha ayudado a otros a mejorar los suyos?

Esta historia, "Aprender y mejorar sus habilidades de depuración" fue publicada originalmente por JavaWorld.