David Gewirtz/

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 derrumbarse.

Pero siempre funciona, ya que el código nunca funciona la primera vez que se ejecuta. Entonces, 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 ejecuta o está haciendo algo inesperado o indeseable.

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

Es un poco como ser un detective, encontrar pistas y luego descubrir qué intentan decirte esas pistas. Es muy frustrante y muy satisfactorio, a veces exactamente al mismo tiempo.

Hago mucha depuración. No es sólo porque el código nunca funciona la primera vez que se ejecuta. También se debe a que uso la depuración para decirme cómo se está ejecutando el código y luego lo modifico a lo largo del camino.

Pero si bien una buena depuración requiere su propio conjunto especial de habilidades, en última instancia 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 funcione.

Pruebas de ChatGPT en el mundo real

Esta semana estuve trabajando en tres tareas de codificación para el software que mantengo. Dos fueron correcciones de errores reportados por los usuarios. Uno era un nuevo fragmento de código para agregar una nueva característica. Para mí, este fue un trabajo de programación real y común y corriente. Era parte de mi horario de trabajo habitual.

También: ¿Cómo funciona ChatGPT?

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

Es una forma diferente de ver ChatGPT. Los escenarios de prueba suelen ser un poco artificiales y simplistas. La codificación en el mundo real consiste en realidad en sacar otro ticket de atención al cliente de la pila y analizar lo que hizo que la experiencia del usuario fuera mal.

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

Reescribir código de expresión regular

Al codificar, tenemos que encontrar muchos patrones en el texto. Para hacerlo, utilizamos una forma de matemática simbólica llamada expresiones regulares. Llevo décadas escribiendo expresiones regulares y todavía no me gusta hacerlo. Es tedioso, propenso a errores y arcano.

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

Entonces, cuando llegó un informe de error que me decía que una parte de mi código solo permitía números enteros cuando debería permitir dólares y centavos (en otras palabras, cierta cantidad de dígitos, posiblemente seguidos por un punto, y luego, si había un punto, seguido de dos dígitos más), sabía que necesitaría usar codificación de expresión regular.

Como ese proceso me parece tedioso y molesto, decidí pedirle ayuda a ChatGPT. Esto es lo que pregunté:

Captura de pantalla de David Gewirtz/

Y aquí está la respuesta muy bien presentada de la IA (haga clic en el pequeño cuadrado para ampliar):

Captura de pantalla de David Gewirtz/

Coloqué el código de ChatGPT en mi función y funcionó. En lugar de entre dos y cuatro horas de tirarse de los pelos, tomó unos cinco minutos encontrar el mensaje y obtener una respuesta de ChatGPT.

Reformatear una matriz

El siguiente paso fue reformatear una matriz. Me gusta hacer código de matriz, pero también es tedioso. Entonces, probé ChatGPT una vez más. Esta vez el resultado fue un fracaso total.

Cuando terminé, probablemente le di 10 indicaciones diferentes. Algunas respuestas parecían prometedoras, pero cuando intenté ejecutar el código, se produjo un error. Algún código falló; Algunos códigos generaron códigos de error. Y se ejecutó algo de código, pero no hizo lo que quería.

Después de aproximadamente una hora, me di por vencido y volví a mi técnica normal de buscar en GitHub y StackExchange para ver si había algún ejemplo de lo que estaba tratando de 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 ChatGPT. Pero ahora decidí plantear el desafío.

Realmente encontrando el error en mi código

Bien, lo siguiente será difícil de explicar. Pero piense en el hecho de que si es difícil de explicárselo a usted (presumiblemente a un ser humano y no a uno de los aproximadamente 50 robots que simplemente copian y republican mi trabajo en sitios web fraudulentos y spam), es aún más difícil explicárselo a un AI.

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

Estaba escribiendo un nuevo código. Tenía una función que tomaba dos parámetros y una declaración 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 que hagan su magia) desde líneas de código que se ejecutan en otras partes del programa.

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

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

La parte más destacada de ese mensaje es cuando dice “aprobé” en un momento y “exactamente 2 esperaba” en otro. Miré la declaración de llamada y la definición de la función y había dos parámetros en ambos lugares.

¿Quién-el-siempre-amoroso-F?

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

Captura de pantalla de David Gewirtz/

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

En cuestión de segundos, ChatGPT respondió con esto (haga clic en el pequeño cuadrado para ampliar):

Captura de pantalla de David Gewirtz/

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

ChatGPT tomó segmentos de código, los analizó y me proporcionó un diagnóstico. Para ser claros, para poder hacer su recomendación, necesitaba comprender los aspectos 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 ejecución de líneas de código.

Además: le pedí a ChatGPT que escribiera un complemento de WordPress que necesitaba. Lo hizo en menos de 5 minutos.

Debo calificar ese logro como increíble: innegablemente, “vivir en el futuro” es increíble.

Que significa todo esto?

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

Pero cuando estás estancado, a menudo es difícil conseguir ayuda. Esto se debe a que incluso un colega cercano puede no estar familiarizado con el alcance completo del código que está depurando. El programa en el que estoy trabajando consta de 153.259 líneas de código en 563 archivos y, en términos de programas, eso es pequeño.

Además: estos expertos se apresuran para proteger la IA de los piratas informáticos

Entonces, si hubiera querido obtener ayuda de un colega, podría haber tenido que crear 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í era donde estaba el error. Como prueba, también intenté pedirle a ChatGPT que diagnosticara mi problema en un mensaje en el que no incluía la línea del controlador y no pudo ayudar. Por lo tanto, existen limitaciones muy definidas sobre lo que ChatGPT puede hacer para la depuración en este momento, en 2023.

También: Los mejores chatbots de IA para probar

Esencialmente, debes 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 conocimiento y experiencia reales en programación para saber cómo hacerlo.

El costo potencial de la depuración asistida por IA

Tenga en cuenta que la IA no reemplaza todas las demás herramientas de depuración. Aún necesitarás recorrer el código, examinar los valores de las variables y comprender cómo funciona el código. Descubrí que ChatGPT puede ayudar a identificar áreas a considerar y proporcionar algunos bloques de código simples. En cierto modo, es muy parecido a usar plantillas de codificación, excepto que no es necesario crear esas plantillas previamente para incorporarlas a su código. Es una ayuda, pero no un reemplazo de la codificación.

Además: ¿Puede la IA codificar? Sólo en pequeños pasos

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

Tiernan Ray de publicó recientemente un artículo fascinante que cita un estudio de la Universidad Tecnológica de Texas que muestra que el rendimiento de la IA en la codificación aún es muy poco confiable. Tenga esto en cuenta, porque si la IA tiene dificultades para escribir código complejo, tendrá aún más dificultades. depuración 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 actualmente. No hay duda de que se pueden agregar herramientas de inteligencia artificial a esa caja de herramientas. Pero tenga cuidado con el uso excesivo de ellos. Debido a que la IA es esencialmente una caja negra, no se puede ver qué proceso emprende la IA para llegar a sus conclusiones. Como tal, realmente no podrás comprobar su funcionamiento.

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 ciertamente sabe por qué se intentaron esos cambios. Pero cuando se confía en la depuración basada en IA, incluso en parte, el programador está más separado del código, y eso hace que el producto de trabajo resultante sea mucho más difícil de mantener. Si resulta que hay un problema en el código generado por IA, el costo y el tiempo que lleva solucionarlo pueden resultar mucho mayores que si un codificador humano hubiera realizado toda la tarea a mano.

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 debe confiar en ellos como sustitutos de una comprensión real. De hecho, no recordar esto podría resultar costoso.

Mirando hacia el futuro (posiblemente distópico)

Veo un futuro muy interesante, donde será posible alimentar a ChatGPT con las 153.000 líneas de código y pedirle que le diga qué arreglar. Microsoft (propietario de GitHub) ya tiene una versión beta pública de una herramienta Copilot para GitHub para ayudar a los programadores a crear código. Microsoft también ha invertido miles de millones de dólares en OpenAI, los creadores de ChatGPT.

Si bien 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 de cualquier proyecto que publique en GitHub.

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

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

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

Imagine que puede pedirle a ChatGPT que busque en su repositorio de GitHub un proyecto determinado y que busque y corrija errores. Una forma podría ser que le presente cada error que encuentre para su aprobación, de modo que pueda realizar las correcciones.

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

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

¿Y qué pasa con el…?