Contexto: Estoy programando ESP32 en un entorno Arduino para cargar algunos datos del sensor a una nube. El dispositivo se configura mediante un sitio web local accesible para una red WiFi autoproporcionada (modo aprovisionamiento) y tiene un botón físico para cambiar al “modo operativo” (la red WiFi autoproporcionada desaparece y se conecta al WiFi configurado). Notice es un proyecto bastante “nicho”, por lo que no esperaba una buena precisión con las sugerencias.
Detectar patrones de código
Tengo muchos
Comprender la lógica algorítmica
Copilot también es bueno para generar lógica inexistente (al menos en el código base actual). Aquí estaba formando una dirección IPv4 concatenando 4 números. Y el copiloto notó que era necesario borrar el primer punto. ¡Elegante!
Proponer una forma alternativa de hacer algo.
No es tan impresionante como el anterior, pero es útil: estaba refactorizando y comentando la función “sendToBackend” que usa XMLHttpRequest. Automáticamente Copilot sugiere una forma de hacerlo usando jQuery.
Comprender el propósito y el contexto
Este ejemplo me sorprendió por dos razones: Copilot notó mi intención cuando dije “cambiar_modo” (cambiar entre proporcionar una red WiFi o no) y también detectó y entendió qué desencadenó la llamada a la función (que se presionó el botón).
Personalmente creo que es mejor poner el mensaje de depuración donde se llamó la función (porque de esa manera puedes llamar la función en otro lugar y el comentario seguirá teniendo sentido). Pero uno de los grandes errores de Copilot es (lo digo a continuación) que sólo propone cambios después de donde tienes el cursor.
Creo que, por más desafiante que sea enseñar las habilidades necesarias para desarrollar productos de IA, el diseño del producto.
Copilot parece sorprendente, capturando la semántica de lo que estamos tratando de lograr. Pero mi humilde opinión para hacer un mejor producto es: codificar no siempre se trata de agregar líneas de código. Piensa en cuánto tiempo pasas modificando el código copiado y pegado?
Propuesta #1: Sería fantástico si le sugirió hacer modificaciones en el código que ya tienes. (tal vez seleccionando el bloque de código que debe sufrir modificaciones).
Estaba creando una constante para no repetir algunas cadenas literales en este módulo. Copilot me propuso con éxito crear todas las constantes que necesito después de escribir la primera (y la propuse con un nombre coherente). Pero no me ayudó a reemplazar los literales siguientes con las constantes creadas.
También hay algunos trabajos que no son críticos pero sí necesarios. El copiloto lo hace muy bien: comenta el código y sugiere registrar mensajes.
Propuesta #2: Un atajo que presionas y comienzas sugiriéndole comentarios/registro en todo el código base. Piénselo: estoy seguro de que no soy el único que deja los comentarios/registro para el final y esta característica parece sencilla con la funcionalidad ya existente y probablemente ahorra mucho tiempo.
Un ejemplo de buenos comentarios generados por Copilot: notó que la clase era la encargada de escribir la memoria flash.
Solo puedo verificar si un botón está presionado o no. Entonces escribí la lógica de la “pulsación de tecla”. Aquí Copilot captura asombrosamente el significado de “liberado”: se presionó la última vez que se ejecutó este código y ahora no. ¡¡Asombroso!! Simplemente comete un error después: no estamos restableciendo la configuración de fábrica sino cambiando el modo operativo.
Aquí Copilot realmente me sorprendió: ¡asociaba las macros CONFIGVAR_<…> con un método declarado pero no implementado actualmente! A continuación tenéis la declaración en el momento de la sugerencia.
La única pista que había para la sugerencia mostrada antes era el comentario sobre la declaración de la función. Tenga en cuenta también que el tipo de argumentos es Cadena, por lo que no es muy útil para decidir nada.
Si te gustó este post/mi estilo sígueme.
Intentaré seguir publicando periódicamente sobre SE, Web, ML y DApps siempre con un objetivo en mente:
que sea brevesiendo significativoexplicar con ejemplos