Siempre voy a recordar al 2026, ya desde el comienzo, como una montaña rusa de emociones, caracterizado principalmente por el impacto y la penetración de lo que coloquialmente llamamos Inteligencia Artificial en la vida profesional y cotidiana. 2026 también es el año donde oficialmente comienzo a utilizar de manera más profunda a los modelos de programación para generar código.
Hasta este punto utilizaba LLMs pero de manera más complementaria, ya sea para responder dudas o consultas, para generar pequeños snippets de código, o ya sobre el final para automatizar casi completamente la generación o actualización de unit tests. Aplicaciones que hasta ese momento me resultaban útiles y productiva, y colaboraban con mi objetivo de producir más ágilmente implementaciones a la altura de lo esperado, por no caer en el lugar común de categorizarlo como "de calidad".
Sin entrar en opiniones que prefiero reservar para un entorno más íntimo, o menos público, mi posición inmediata desde el lanzamiento masivo de las LLMs allá por el 2023 ha sido de incertidumbre y precaución. No porque no me entusiasme la tecnología (aunque en algún momento me gustaría compartir mis pensamientos sobre los "entusiastas de la tecnología"), ya que siempre he estado atento a cualquier salto tecnológico como fue React en su momento, sino porque había algo que no olía bien. Y como todo ávido lector de Tolkien, tengo siempre presente la importancia de estar atento al olfato.
Esto que no olía bien no era ningún prejuicio, sino justamente mi conclusión después de interactuar con los modelos, evaluar lo producido, complementado por observar a los demás interactuar con esta tecnología y por escuchar las promesas y proyecciones de sus promotores. Todo esto subrayado también por la importancia que le doy al cuidado de mis propias facultades cognitivas.
Saltándome unos cuántos capítulos y haciendo fastforward al momento de escribir este post, dejando atrás el tal vez demasiado extenso preámbulo, el principal motivo que me inspira a escribir este post es porque recientemente me he encontrado con un punto de inflexión, donde la generación de código atravesó esta contención inicial y entró más de lleno en el código de producción.
¿Qué es lo que cambió? Seguramente yo cambié, que es probablemente una obviedad y también una constante, pero principalmente empecé a notar que el código generado parecía finalmente más correcto, menos alucinatorio, o en general más apropiado, bastante más cercano a lo que haría yo. Y eso es innegablemente útil.
Otra tangente que Siempre voy a recordar al 2026, ya desde el comienzo, como una montaña rusa de emociones, caracterizado principalmente por el impacto y la penetración de lo que coloquialmente llamamos Inteligencia Artificial en la vida profesional y cotidiana. 2026 también es el año donde oficialmente comienzo a utilizar de manera más profunda a los modelos de programación para generar código.
Hasta este punto utilizaba LLMs pero de manera más complementaria, ya sea para responder dudas o consultas, para generar pequeños snippets de código, o ya sobre el final para automatizar casi completamente la generación o actualización de unit tests. Aplicaciones que hasta ese momento me resultaban útiles y productiva, y colaboraban con mi objetivo de producir más ágilmente implementaciones a la altura de lo esperado, por no caer en el lugar común de categorizarlo como "de calidad".
Sin entrar en opiniones que prefiero reservar para un entorno más íntimo, o menos público, mi posición inmediata desde el lanzamiento masivo de las LLMs allá por el 2023 ha sido de incertidumbre y precaución. No porque no me entusiasme la tecnología (aunque en algún momento me gustaría compartir mis pensamientos sobre los "entusiastas de la tecnología"), ya que siempre he estado atento a cualquier salto tecnológico como fue React en su momento, sino porque había algo que no olía bien. Y como todo ávido lector de Tolkien, tengo siempre presente la importancia de estar atento al olfato.
Esto que no olía bien no era ningún prejuicio, sino justamente mi conclusión después de interactuar con los modelos, evaluar lo producido, complementado por observar a los demás interactuar con esta tecnología y por escuchar las promesas y proyecciones de sus promotores. Todo esto subrayado también por la importancia que le doy al cuidado de mis propias facultades cognitivas.
Saltándome unos cuántos capítulos y haciendo fastforward al momento de escribir este post, dejando atrás el tal vez demasiado extenso preámbulo, el principal motivo que me inspira a escribir este post es porque recientemente me he encontrado con un punto de inflexión, donde la generación de código atravesó esta contención inicial y entró más de lleno en el código de producción.
¿Qué es lo que cambió? Seguramente yo cambié, que es probablemente una obviedad y también una constante, pero principalmente empecé a notar que el código generado parecía finalmente más correcto, menos alucinatorio, o en general más apropiado, bastante más cercano a lo que haría yo. Y eso es innegablemente útil.
Y abro otra tangente sobre otro de los temas relacionados con las LLMs que siempre me generaron incomodidad, o mal tufo: el énfasis en la velocidad. Siendo el código generado algo que sigo evaluando como posiblemente incorrecto y con riesgo de alucinación, el rol del humano en el proceso me parece más importante que nunca. Es por eso que nunca encontré particularmente atractiva la idea de "gestionar enjambres de agentes" y dejar que la cosa se haga sola. ¿Para qué? Porque de la única forma que me parece factible tener instancias sobre instancias de agentes generando código es si no tenés planeado revisar mínimamente lo producido. Y con revisar no me refiero a escribir tests o cualquier otro tipo de artefacto de aceptación, sino esa sensación, o evaluación, de que lo producido mueve el sistema, la implementación, en la dirección deseada y sin regresiones de cualquier tipo. Además de encontrar particularmente agotadora la tarea de revisar y evaluar código generado, donde un pequeño prompt de pronto genera una explosión de líneas de código.
Como comento en esta charla https://www.youtube.com/watch?v=qDSKasyhxdQ que dí hace unos meses, al igual que un libro es más que un conjunto de letras, un programa es mucho más que líneas de código: tiene un contexto, un hilo conductor, un argumento. Y si yo no controlo este argumento, si no soy parte tanto de su escritura como de su actuación, no estoy desarrollando software. Al menos según mi visión personal.
Entonces, ¿cómo utilizo estas herramientas?
Fantaseando en mi imaginación con este post, pensaba en mi día a día como una especie de nuevo proceso incremental de desarrollo de software donde la LLMs ocupaba un punto en esta espiral, y donde cada ciclo termina como un commit. Algo así como:
- Análisis: pensar sobre el problema, evaluar la implementación actual.
- Diseño: prompt.
- Generación: LLM
- Validación: leer el diff y o volver atrás a la fase de diseño o ajustarlo manualmente.
- Commit.
- Repetir las veces que sea necesario.
Algo así, pero también varía según la tarea específica o el resultado obtenido. A veces veo lo generado, me da una idea general, y luego lo hago a mano. Otras veces lo generado puede hacerse mejor o de una manera más inteligente, y en vez de continuar gastando tokens lo implemento yo.
Una constante en este proceso es que continúo siendo una pieza fundamental, no solo pensando sobre lo que hay que hacer, sino también participando activamente de la generación de código. Y, por supuesto, continúo generando implementaciones que no solo disfruto hacer, sino que están a la altura de lo que yo espero, y lo que se espera de mí, ahora un poco o bastante más rápido.
Para mí, el énfasis del desarrollo de software (y de tantas otras cosas) nunca fue la velocidad, sino la eficacia. No solo por mi compromiso personal y profesional con la profesión, y mi amor personal por el código, sino porque (como he repetido ya varias veces en muchos ámbitos) este código tiene muchos usuarios, y mi misión y compromiso es con ellos. Estos usuarios son:
- El equipo, incluyéndome a mí y a cualquiera que lo tenga que mantener en el futuro.
- La organización.
- El usuario final.
Este es más o menos en snapshot al momento de escribir este post, y muy probablemente cambie, pero lejos estoy de poder predecir cómo. Si hay algo que he observado de todo este proceso es que cualquier tipo de futurología que cualquiera intente hacer va a estar equivocada.