Cuando empezamos a programar, una de las primeras cosas que descubrimos es que no siempre conseguimos que el ordenador haga exactamente lo que nosotros queremos que haga. Podemos escribir unas instrucciones pensando que el resultado será uno y, cuando ejecutamos el programa, encontrarnos con algo completamente diferente.
Un personaje que no se mueve, una puntuación que no se actualiza, un botón que no responde o un programa que deja de funcionar son situaciones muy habituales cuando estamos aprendiendo a programar. En estos casos, lo importante no es empezar de nuevo, sino averiguar qué está ocurriendo y encontrar la manera de solucionarlo.
Este proceso de buscar y corregir errores se conoce como depuración o debugging, y forma parte del trabajo de cualquier programador. De hecho, aprender a depurar un programa es una parte importante de aprender a programar: nos enseña a analizar lo que está pasando, a buscar las causas de un problema y a probar diferentes soluciones.
¿Qué ocurre cuando un programa no hace lo que esperabas?
Imaginemos que un niño está creando un pequeño videojuego y quiere que uno de los personajes salte cuando se pulsa la barra espaciadora. Escribe las instrucciones necesarias, ejecuta el juego y descubre que el personaje no salta. Puede que el programa no esté detectando que se ha pulsado la tecla, que la instrucción para hacer saltar al personaje no sea correcta o que exista otra parte del código que esté interfiriendo.
Antes de empezar a cambiar instrucciones sin saber muy bien por qué, tendremos que intentar averiguar dónde está el problema. Esto es precisamente lo que hace un programador cuando se encuentra con un error: analizar qué está pasando y buscar la causa del problema.
¿Qué tipos de errores puede tener un programa?
Cuando hablamos de errores de programación, podemos encontrarnos con diferentes situaciones.
Hay errores que impiden que el programa llegue a ejecutarse porque hemos escrito alguna instrucción de una forma que el lenguaje de programación no entiende. También puede ocurrir que el programa se ejecute pero aparezca un error durante su funcionamiento.
Y existe otro tipo de error que resulta especialmente interesante: aquel en el que el programa funciona correctamente, pero hace algo diferente de lo que nosotros queríamos. En este caso, el ordenador está haciendo exactamente aquello que le hemos indicado. El problema es que nosotros no le hemos indicado correctamente lo que queríamos que hiciera.
Esto es importante porque, cuando programamos, el ordenador no puede interpretar nuestras intenciones, solo puede seguir las instrucciones que le damos. Por eso, encontrar un error no consiste siempre en localizar una instrucción que está escrita “mal”. A veces tenemos que descubrir qué parte de nuestro razonamiento no ha funcionado como esperábamos.
¿Cómo encuentra un programador dónde está el error?
Cuando algo no funciona, un programador tiene que investigar. Puede probar una parte del programa por separado, comprobar qué valores está utilizando, observar qué ocurre justo antes de que aparezca el problema o modificar temporalmente alguna instrucción para ver qué sucede.
Poco a poco, va descartando posibilidades hasta encontrar la causa del error. Así pues, podemos pensar en este proceso como en la resolución de un pequeño misterio. Tenemos un resultado que no esperábamos y debemos descubrir qué ha ocurrido para llegar hasta él.
Por eso, depurar un programa se parece mucho más a investigar un problema que a corregir simplemente una línea de código. Además, esta forma de trabajar nos obliga a dividir un problema en partes más pequeñas, algo que resulta muy útil cuando nos encontramos ante un problema que, de entrada, parece complicado.
¿Qué hacemos después de encontrar el error?
Una vez que creemos haber encontrado el problema, podemos intentar solucionarlo, y después tendremos que volver a ejecutar el programa y comprobar qué ocurre. Puede que ahora funcione correctamente, pero también puede que el cambio que hemos hecho no haya solucionado el problema o incluso haya provocado otro distinto. En ese caso, tendremos que volver atrás, observar de nuevo lo que está pasando y probar otra solución.
Esta manera de trabajar (probar, observar, corregir y volver a probar) forma parte del día a día de la programación. Y precisamente por eso los errores tienen tanta importancia cuando aprendemos a programar. No son simplemente algo que aparece cuando hacemos las cosas mal, sino una parte habitual del proceso que nos ayuda a entender mejor cómo funciona nuestro programa.
¿Por qué los errores son importantes al crear un proyecto?
Cuando un niño empieza a programar, es normal que algunos de sus primeros programas no funcionen a la primera. De hecho, sería bastante difícil que fuera de otra manera. Un programa puede estar formado por muchas instrucciones y basta con que una de ellas no haga exactamente lo que debería para que el resultado final sea diferente del esperado.
Por eso es importante que el error no se convierta en un motivo para abandonar, sino en una pregunta: ¿por qué ha ocurrido esto? A partir de ahí podemos empezar a buscar una explicación, plantear diferentes posibilidades y comprobar cuál de ellas nos acerca a la solución.
Con la práctica, este proceso se convierte en algo cada vez más natural y aquello que al principio podía resultar frustrante acaba formando parte del aprendizaje. Todos los problemas que surgen durante el proceso pueden servir para seguir trabajando sobre el proyecto y entender mejor cómo funciona. Y cuando finalmente conseguimos encontrar el error y solucionarlo, la satisfacción es diferente de la que sentimos cuando simplemente seguimos unas instrucciones y obtenemos el resultado esperado. En este caso, hemos encontrado la solución por nosotros mismos.
¿Qué aprende un niño cuando aprende a depurar un programa?
Cuando pensamos en aprender programación, normalmente imaginamos a alguien escribiendo código delante de un ordenador. Sin embargo, una parte importante del aprendizaje tiene lugar precisamente cuando ese código no hace lo que esperábamos. Es entonces cuando tenemos que analizar el problema, buscar sus posibles causas, probar diferentes soluciones y comprobar los resultados.
Por este motivo, aprender a depurar un programa no sirve únicamente para conseguir que nuestro código funcione. También nos ayuda a desarrollar una manera de enfrentarnos a los problemas: dividirlos en partes más pequeñas, buscar soluciones, comprobar si funcionan y cambiar de estrategia cuando sea necesario.
Esta manera de pensar y trabajar es lo que llamamos el pensamiento computacional, una habilidad propia de los programadores que puede aplicarse en cualquier ámbito de la vida y que además nos enseña cosas tan importantes como prestar atención a los detalles y entender que una primera solución no tiene por qué ser la definitiva.
Programar también es aprender a buscar soluciones
Cuando un niño aprende a programar, no aprende únicamente a escribir instrucciones para que el ordenador haga determinadas cosas. También aprende qué hacer cuando esas instrucciones no producen el resultado esperado.
Tiene que observar, hacerse preguntas, buscar posibles causas, probar soluciones y volver a comprobar el resultado. Y, en ocasiones, tendrá que hacerlo varias veces antes de encontrar la respuesta. Por eso, los errores forman parte de aprender a programar. Un buen programador no es necesariamente quien consigue que todo funcione a la primera. Es quien sabe enfrentarse a un problema cuando algo no funciona y tiene las herramientas necesarias para encontrar una solución.
Y quizá esta sea una de las partes más interesantes de aprender programación: descubrir que, cuando algo sale mal, no siempre hay que empezar de nuevo. Muchas veces solo hay que parar, mirar con atención y preguntarse qué podemos cambiar para conseguir que funcione.