OK, así que ChatGPT acaba de depurar mi código. De verdad

OK, ChatGPT depuró mi código.

La programación es un juego constante de Jenga mental: una línea de código apilada sobre otra, construyendo una torre de código que esperas que sea lo suficientemente robusta como para no colapsar.

Pero siempre lo hace, ya que el código nunca funciona la primera vez que se ejecuta. Por lo tanto, una de las habilidades clave para cualquier programador es la depuración, el arte y la ciencia de encontrar por qué el código no se está ejecutando o está haciendo algo inesperado o indeseable.

También: Cómo usar ChatGPT para escribir código

Característica especial

La intersección entre la IA generativa y la ingeniería

El aumento de la IA generativa puede aprovechar un tremendo potencial para el ámbito de la ingeniería. También puede presentar sus desafíos, ya que las empresas y los ingenieros intentan comprender el impacto de la IA en sus roles, estrategias comerciales, datos, soluciones y desarrollo de productos. ¿Cómo se ve el futuro para incorporar la IA generativa en el mundo del software? ENBLE descifra desde todos los ángulos.

Es un poco como ser un detective, encontrar pistas y luego descubrir qué te están intentando decir esas pistas. Es muy frustrante y muy satisfactorio, a veces al mismo tiempo.

Hago mucha depuración. No solo porque el código nunca funciona la primera vez que se ejecuta. También porque uso la depuración para decirme cómo se está ejecutando el código y luego ajustarlo en el camino.

Pero si bien una buena depuración requiere su propio conjunto especial de habilidades, al final también es solo programación. Una vez que descubres por qué un bloque de código no funciona, tienes que descubrir cómo escribir algo que sí funcione.

Pruebas de ChatGPT en el mundo real

Esta semana, estaba trabajando en tres tareas de codificación para un software que mantengo. Dos eran correcciones para errores reportados por usuarios. Uno era una nueva pieza de código para agregar una nueva funcionalidad. Esto era trabajo de programación real y corriente para mí. Formaba parte de mi horario de trabajo regular.

También: ¿Cómo funciona ChatGPT?

Te lo digo porque hasta ahora, he probado ChatGPT con código de prueba. He creado escenarios para ver qué tan bien funcionaría ChatGPT. Esta vez fue diferente. Estaba tratando de hacer un trabajo real y decidí ver si ChatGPT podría ser una herramienta útil para hacer ese trabajo.

Es una forma diferente de ver a ChatGPT. Los escenarios de prueba a menudo son un poco artificiales y simplistas. La programación del mundo real se trata realmente de tomar otro ticket de soporte al cliente de la pila y resolver lo que hizo que la experiencia del usuario fuera negativa.

Entonces, con eso, veamos esas tareas y veamos cómo se desempeñó ChatGPT.

Reescribir código de expresiones regulares

En la programación, tenemos que encontrar muchos patrones en el texto. Para hacerlo, usamos una forma de matemáticas simbólicas llamada expresiones regulares. He estado escribiendo expresiones regulares durante décadas y aún no me gusta hacerlo. Es tedioso, propenso a errores y arcano.

También: Estoy utilizando ChatGPT para ayudarme a corregir el código más rápido, pero ¿a qué costo?

Entonces, cuando llegó un informe de error diciéndome que una parte de mi código solo permitía enteros cuando debería permitir dólares y centavos (en otras palabras, algún número de dígitos, posiblemente seguido de un punto y luego, si hay un punto, seguido de dos dígitos más), supe que tendría que usar codificación de expresiones regulares.

Dado que encuentro ese proceso tedioso y molesto, decidí pedir ayuda a ChatGPT. Esto es lo que pregunté:

Y aquí está la respuesta muy bien presentada por la IA (haz clic en el cuadradito para ampliar):

Inserté el código de ChatGPT en mi función y funcionó. En lugar de pasar dos o cuatro horas tirándome del pelo, tardé unos cinco minutos en crear la consulta y obtener una respuesta de ChatGPT.

Reformatando un array

Luego vino la reformatización de un array. Me gusta hacer código de arrays, pero también es tedioso. Así que, una vez más, probé ChatGPT. Esta vez el resultado fue un completo fracaso.

Para cuando terminé, probablemente le proporcioné 10 diferentes comandos. Algunas respuestas parecían prometedoras, pero cuando intenté ejecutar el código, generaron errores. Unos hicieron que el código se bloqueara, otros generaron códigos de error. Y algunos ejecutaron, pero no hicieron lo que quería.

Después de aproximadamente una hora, me rendí y volví a mi técnica habitual de buscar en GitHub y StackExchange para ver si había ejemplos de lo que estaba intentando hacer, y luego escribir mi propio código.

También: Cómo hacer que ChatGPT proporcione fuentes y citas

Hasta ahora, eso es una victoria y una derrota para la experiencia con ChatGPT. Pero ahora decidí aumentar el desafío.

Encontrando realmente el error en mi código

Vale, esta próxima parte va a ser difícil de explicar. Pero piensa en el hecho de que si es difícil explicártelo a ti (presumiblemente un humano y no uno de los 50 o así bots que simplemente copian y republican mi trabajo en sitios web fraudulentos y spam), es aún más difícil explicárselo a una IA.

También: ¿Qué es GPT-4? Aquí tienes todo lo que necesitas saber

Estaba escribiendo nuevo código. Tenía una función que tomaba dos parámetros, y una sentencia de llamada que enviaba dos parámetros a mi código. Las funciones son pequeñas cajas negras que realizan funciones muy específicas y se llaman (se les pide hacer su magia) desde líneas de código que se ejecutan en otras partes del programa.

El problema que encontré era que seguía recibiendo un mensaje de error.

También: Cómo usar ChatGPT para resumir un libro, artículo o documento de investigación

La parte relevante de ese mensaje es donde dice “1 pasado” en un punto y “se esperaban exactamente 2” en otro. Miré la sentencia de llamada y la definición de la función y había dos parámetros en ambos lugares.

¿Qué demonios?

Después de unos 15 minutos de profunda frustración, decidí lanzar el problema a la IA para ver si podía ayudar. Así que escribí el siguiente comando:

Le mostré la línea de código que hacía la llamada, le mostré la función en sí y le mostré el controlador, un pequeño fragmento de código que despacha la función llamada desde un gancho en mi programa principal.

En cuestión de segundos, ChatGPT respondió con esto (haz clic en el cuadradito para ampliar):

Tal como sugirió, actualicé el cuarto parámetro de la función add_filter() a 2, ¡y funcionó!

ChatGPT tomó segmentos de código, analizó esos segmentos y me proporcionó un diagnóstico. Para ser claro, para hacer su recomendación, tuvo que entender los detalles internos de cómo WordPress maneja los ganchos (eso es lo que hace la función add_filter), y cómo esa funcionalidad se traduce en el comportamiento de la llamada y la ejecución de las líneas de código.

También: Le pedí a ChatGPT que escribiera un plugin de WordPress que necesitaba. Lo hizo en menos de 5 minutos

Tengo que marcar ese logro como increíble, indudablemente increíble “vivir en el futuro”.

¿Qué significa todo esto?

Como mencioné antes, la depuración es un poco de arte y un poco de ciencia. La mayoría de los buenos entornos de desarrollo incluyen herramientas de depuración potentes que te permiten ver el flujo de datos a través del programa mientras se ejecuta, y esto ayuda cuando intentas localizar errores.

Pero cuando estás atascado, a menudo es difícil obtener ayuda. Eso se debe a que incluso un colega cercano puede no estar familiarizado con el alcance completo del código que estás depurando. El programa en el que estoy trabajando consta de 153,259 líneas de código en 563 archivos, y en comparación con otros programas, eso es pequeño.

También: Estos expertos están compitiendo para proteger la IA de los hackers

Entonces, si hubiera querido obtener ayuda de un colega, probablemente habría tenido que construir una solicitud casi idéntica a la que envié a ChatGPT.

Pero aquí hay algo a considerar: recordé incluir la línea del controlador aunque no me di cuenta de que ahí estaba el error. Como prueba, también intenté pedirle a ChatGPT que diagnosticara mi problema en un prompt donde no incluí la línea del controlador, y no pudo ayudar. Así que, en este momento, en el año 2023, hay limitaciones muy definidas en lo que ChatGPT puede hacer para la depuración.

También: Los mejores chatbots de IA para probar

Básicamente, tienes que saber cómo hacer las preguntas correctas de la manera correcta, y esas preguntas deben ser lo suficientemente concisas para que ChatGPT pueda manejar todo en una sola consulta. Eso es algo que requiere conocimientos y experiencia reales en programación para saber hacerlo.

El costo potencial de la depuración asistida por IA

Ten en cuenta que la IA no reemplaza todas tus otras herramientas de depuración. Aún necesitarás recorrer el código, examinar los valores de las variables y entender cómo funciona tu código. Descubrí que ChatGPT puede ayudar a identificar áreas para examinar y proporcionar algunos bloques de código simples. En cierto sentido, es bastante similar a usar plantillas de codificación, excepto que no tienes que preconstruir esas plantillas para incorporarlas a tu código. Es un ayudante, pero no reemplaza la codificación.

También: ¿Puede la IA programar? Solo en pequeños pasos

¿Podría haber solucionado el error por mi cuenta? Por supuesto. Nunca he tenido un error que no pudiera solucionar. Pero si me hubiera llevado dos horas o dos días (además de pizza, palabras groseras y mucha cafeína), mientras soportaba muchas interrupciones, eso es algo que no sé. Te puedo decir que ChatGPT lo solucionó en minutos, ahorrándome tiempo y frustración incalculables.

Recientemente, Tiernan Ray de ENBLE publicó un artículo fascinante que cita un estudio de la Universidad de Texas Tech que muestra que el rendimiento de la IA en la codificación sigue siendo muy poco confiable. Ten esto en cuenta, porque si la IA tiene dificultades para escribir código complejo, tendrá aún más dificultades para depurar código complejo.

La mayoría de los programadores tienen una variedad de herramientas de depuración a su disposición y eligen las herramientas que van a utilizar en función del problema que están intentando diagnosticar en ese momento. No hay duda de que se pueden agregar herramientas de IA a ese conjunto de herramientas. Pero ten cuidado de no usarlas en exceso. Debido a que la IA es esencialmente una caja negra, no puedes ver qué proceso realiza la IA para llegar a sus conclusiones. Como tal, no puedes realmente verificar su trabajo.

El costo potencial de esto es enorme. Para las tareas de depuración tradicionales, el programador siempre puede ver exactamente qué cambios se están incorporando al código. Incluso si esos cambios no siempre funcionan, el programador está al tanto de por qué se intentaron esos cambios. Pero al depender de la depuración basada en IA, aunque sea parcialmente, el programador se aleja más del código, lo que hace que el producto final sea mucho más difícil de mantener. Si resulta que hay un problema en el código generado por la IA, el costo y el tiempo necesarios para solucionarlo pueden resultar mucho mayores que si un programador humano hubiera realizado toda la tarea manualmente.

Como mostré anteriormente en mis ejemplos, las herramientas de codificación de IA pueden ayudar (al menos dos de cada tres veces). Pero no siempre funcionan y nunca se deben utilizar como sustituto de una comprensión real. No recordar esto puede ser costoso, sin duda.

Mirando hacia el futuro (posiblemente distópico)

Veo un futuro muy interesante, donde será posible alimentar a ChatGPT las 153,000 líneas de código y pedirle que te diga qué arreglar. Microsoft (que es dueña de GitHub) ya tiene una versión beta pública de una herramienta llamada Copilot para GitHub que ayuda a los programadores a construir código. Microsoft también ha invertido miles de millones de dólares en OpenAI, los creadores de ChatGPT.

Aunque el servicio podría estar limitado a los propios entornos de desarrollo de Microsoft, puedo ver un futuro en el que la IA tenga acceso a todo el código en GitHub, y por lo tanto a todo el código en cualquier proyecto que publiques en GitHub.

También: Le pedí a ChatGPT que escribiera un episodio corto de Star Trek. En realidad tuvo éxito

Teniendo en cuenta lo bien que ChatGPT identificó mi error a partir del código que proporcioné, definitivamente puedo ver un futuro en el que los programadores simplemente puedan pedirle a ChatGPT (o a un equivalente de marca Microsoft) que encuentre y solucione errores en proyectos completos.

Y aquí es donde llevo esta conversación a un lugar muy oscuro.

Imagina que puedes pedirle a ChatGPT que examine tu repositorio de GitHub para un proyecto dado y que encuentre y solucione errores. Una forma podría ser que te presente cada error que encuentre para que los apruebes y puedas realizar las correcciones.

Pero, ¿qué pasa en la situación en la que le pides a ChatGPT que simplemente corrija los errores y lo dejas hacerlo sin molestarte en mirar todo el código tú mismo? ¿Podría incrustar algo desagradable en tu código?

También: Bard vs. ChatGPT: ¿Puede Bard ayudarte a programar?

Y ¿qué pasa en la situación en la que una IA increíblemente capaz tiene acceso a casi todo el código del mundo en los repositorios de GitHub? ¿Qué podría esconder en todo ese código? ¿Qué mal nefasto podría hacer esa IA a la infraestructura del mundo si puede acceder a todo nuestro código?

Juguemos a un simple juego de pensamiento. ¿Y si a la IA se le diera la primera regla de Asimov como instrucción clave? Esa es una “regla por la cual un robot no debe dañar a un ser humano, ni permitir, por inacción, que un ser humano sufra daño”. ¿No podría decidir que toda nuestra infraestructura nos está causando daño? Al tener acceso a todo nuestro código, simplemente podría decidir salvarnos de nosotros mismos insertando puertas traseras que le permitieran, por ejemplo, apagar la red eléctrica, aterrizar aviones y bloquear las autopistas.

Soy plenamente consciente de que el escenario anterior es hiperbólico y alarmista. Pero también es posible. Después de todo, aunque los programadores revisan su código en GitHub, no es posible para nadie revisar todas las líneas de todo su código.

También: Cómo usar ChatGPT para escribir fórmulas de Excel

En cuanto a mí, voy a tratar de no pensar demasiado en ello. No quiero pasar el resto de los años 2020 en posición fetal balanceándome de adelante hacia atrás en el suelo. En cambio, utilizaré ChatGPT ocasionalmente para ayudarme a escribir y depurar pequeñas rutinas, bajaré la cabeza y esperaré que las futuras IA no nos maten a todos en su esfuerzo por “no permitir que un ser humano sufra daño”.

¿Encuentras útil o aterrador el hecho de que ChatGPT pueda depurar código? ¿Crees que las IA nos matarán mientras dormimos, o crees que presenciaremos nuestra perdición con los ojos bien abiertos? ¿O eres como yo, que intentarás no pensar demasiado en ello porque te duele la cabeza? Háblame en los comentarios de abajo. Mientras aún puedas hacerlo.


Puedes seguir las actualizaciones diarias de mis proyectos en las redes sociales. Asegúrate de seguirme en Twitter en @DavidGewirtz, en Facebook en Facebook.com/DavidGewirtz, en Instagram en Instagram.com/DavidGewirtz, y en YouTube en YouTube.com/DavidGewirtzTV.