Por qué escribir código en 2026
(softwaredoug.com)- El rol del ingeniero de software se ha expandido más allá de producir código, hacia construir y mantener una fábrica de software, pero para entender y mejorar los sistemas sigue siendo necesario trabajar directamente con el código
- Si se guía a los agentes con prompts,
AGENTS.mdy bases de conocimiento, y se protege el resultado con pruebas, linting, sistemas de tipos y evaluaciones, incluso modelos de bajo rendimiento pueden producir cambios bastante útiles - Programar directamente permite pensar en el entorno de ejecución sin pasar por el inglés, lo que hace más evidente la presencia de vulnerabilidades, pruebas débiles y excepciones innecesarias que pueden pasar desapercibidas en una revisión pasiva de código
- Los agentes se parecen más a un becario recién incorporado que a un compilador: siguen de forma conservadora el código existente y requisitos imprecisos, y pueden amplificar errores puntuales de humanos con wrappers y capas indirectas
- Para mantener el sentido de propiedad y el criterio, los humanos deben probar directamente los enfoques y establecer patrones que luego los agentes puedan repetir, aprovechando así la productividad de la automatización
La fábrica de software donde trabajan los agentes
- Los ingenieros de software no solo mantienen el software, sino también una línea de ensamblaje que permite que cualquiera solicite cambios mediante prompts y los despliegue de inmediato
- Preparan de antemano la infraestructura para que los agentes tengan éxito mediante prompts, skills,
AGENTS.mdy bases de conocimiento - Protegen el resultado después con pruebas, linting, sistemas de tipos, evaluaciones y evaluación automatizada con ayuda de otras IA
- Preparan de antemano la infraestructura para que los agentes tengan éxito mediante prompts, skills,
- Si se proporcionan suficientes restricciones y contexto actualizado, incluso modelos menos inteligentes pueden producir cambios útiles sin desviarse del camino, y puede parecer que las personas ya no necesitan leer ni escribir código directamente
- Sin embargo, incluso si existieran agentes con inteligencia al nivel de Fable, programar directamente sigue permitiendo pensar directamente en el entorno de ejecución sin una capa intermedia como el inglés
- Leer pasivamente diffs y parches generados por agentes no basta para conectar en profundidad con la arquitectura del sistema
- Trabajar directamente con el código permite sentir de forma concreta qué se rompe al agregar funcionalidad encima
- Si se ordena el código y se documentan principios arquitectónicos consistentes que no acumulen excepciones, la fábrica de software también funciona de forma más estable
- Si durante la depuración se identifican y corrigen debilidades en la estrategia de pruebas, se puede bloquear toda una nueva clase de errores
- Programar directamente no es la única forma de entender el software, ni hace falta insistir en un trabajo manual extremo como en la aguja magnetizada y la mano firme
- Aunque la mayor parte del código real sea generada por IA, programar directamente sigue siendo una herramienta útil
Preservar la capacidad de pensar y el sentido de propiedad programando directamente
- Si uno se queda en el papel de centauro inverso, limitado a leer y aprobar código, disminuyen la concentración y el sentido de propiedad, el código de baja calidad pasa más fácilmente las revisiones y también se vuelve más difícil hacer ajustes finos
- Si no se presta atención a los detalles, se acumulan vulnerabilidades y, a largo plazo, el código de baja calidad también perjudica a los agentes
- Si los humanos prueban directamente los enfoques y luego los agentes repiten los patrones ya establecidos, es posible seguir involucrados y apropiarse del resultado
- El inglés es un lenguaje con especificación insuficiente para representar cálculos con precisión
- En tareas algorítmicas es necesario concebir y pensar en pasos ejecutables
- Según el caso, se puede ajustar la precisión necesaria eligiendo un lenguaje de bajo nivel con un espacio de diseño amplio o un lenguaje de alto nivel con un entorno computacional más restringido
- Tratar a los agentes de programación como si fueran compiladores puede llevar a la actitud de que está bien desplegar código mal escrito
- Los agentes se parecen más a un becario recién incorporado que a un compilador
- Leen código existente, que puede ser incompleto y de baja calidad, y generan nuevos cambios a partir de descripciones imprecisas de los cambios deseados
- Como los humanos no pueden transferir sin más su forma de pensar y sus preferencias a un grupo de becarios, no deben quedarse como simples consumidores, sino involucrarse directamente
- A los agentes les cuesta seguir por iniciativa propia la regla de los Boy Scouts de dejar el código en mejor estado de como lo encontraron, y también resulta incómodo delegarles eso
- Tienden a inclinarse por hacer el cambio actual lo más seguro posible, preservando de forma conservadora decisiones previas
- En una base de código, un humano usó sin pensarlo almacenamiento local del navegador para parte del estado, mientras el resto se guardaba en una base de datos backend; el agente intentó mantener esa decisión agregando wrappers y capas indirectas, y el número de líneas de código creció aproximadamente 3 veces
- Esa clase de conservadurismo puede amplificar decisiones erróneas y puntuales tomadas por humanos
- El proceso de borrar código directamente y explorar ayuda a llegar a una mejor arquitectura que limitarse a dar instrucciones solo en inglés
- Cuanta más atención se presta al código, más se fortalecen la capacidad de pensar, la sensibilidad de autor y la habilidad para dirigir la fábrica de software
- En una fábrica de software importan los detalles, desde los patrones de arquitectura hasta los algoritmos y el rendimiento
- Los agentes han aumentado la necesidad de evaluaciones, mediciones y mecanismos de protección, y han impulsado incluso en proyectos personales la incorporación temprana de CI en lugar de dejarla para después
- Gracias a eso, el estado del desarrollo de software ha mejorado considerablemente, pero toda línea de ensamblaje sigue teniendo debilidades
- Incluso en una fábrica de automóviles hay momentos en que hace falta desmontar la línea de ensamblaje, profundizar en los detalles de un motor de combustión interna para mejorarlo un 10%, o pasar todo el día observando pruebas de pastillas de freno para entender por qué no se detectó antes un problema en planta
- También en el software, para conectar los detalles con la estructura general, no se deben trazar límites arbitrarios sobre lo que uno puede tocar directamente
4 comentarios
El momento en que escribo código es cuando surge algún problema.
Incluso entonces, en vez de hacerlo yo mismo directamente,
modifico el harness para que ese tipo de problema no vuelva a ocurrir en el futuro,
así que cada vez tengo menos ocasiones de escribir código.
Me identifico con el proceso de pensamiento y el sentido de pertenencia...
Porque no hay tokens, qué triste.
Comentarios en Hacker News
Parece evidente que si no puedes escribir código, tampoco puedes revisarlo, pero hay personas y empresas que dicen que basta con que Claude lo escriba y Codex lo revise. Aun así, la razón por la que piden el resultado en lenguajes de alto nivel como Python o Java, y no en ensamblador o binarios compilados, es al final porque los humanos tienen que poder leer el código
Esperar que los desarrolladores lean, depuren y razonen sobre el código, mientras al mismo tiempo no se les quiere dar entrenamiento para desarrollar esa habilidad, es una contradicción
Queda la duda de si la industria puede seguir avanzando si se delega toda la creación a los LLM
No significa que una opción sea mejor que la otra; quizá quienes se fijan menos en los detalles terminen guiando al mundo, o quizá cada problema requiera un nivel distinto de precisión
El compilador ayuda a que el LLM escriba código que realmente pueda compilarse y ejecutarse, pero si emitiera lenguaje máquina directamente, es muy probable que ni siquiera corra. Claro, si no puedes escribir código en absoluto, revisarlo se vuelve mucho más difícil
“¿Cómo llama la industria a una especificación de proyecto lo bastante completa y precisa como para generar un programa? Código” — CommitStrip
Si está bien escrito, lo esencial del código debería ser expresar de la forma más simple la lógica de negocio subyacente. Puede que no sea necesario revisar todas las capas de soporte, pero si no se leyó el código, es difícil decir que realmente se entiende por completo la lógica de negocio
https://softwaredoug.com/blog/2026/07/04/write-code-not-specs
La pregunta importante es quién va a pagar por escribir código manualmente. Los clientes no pagan por el acto de escribir o generar código en sí, sino por resolver problemas, así que el negocio se lo queda quien lo resuelva con menos costo y menos fricción, y es difícil ignorar la ventaja de que las herramientas de IA compriman los tiempos
Llevo en esta industria desde los años 90, pero siempre ha habido muchos desarrolladores no tan buenos produciendo resultados mediocres. Se romantiza demasiado el código hecho a mano, pero en la práctica las bases de código tendían a volverse difíciles de mantener con el tiempo y llenas de bugs, y los proyectos mal ejecutados no son nada nuevo
Ahora mismo parece que quieren construir una fábrica de software con las dos manos atadas
Para concentrarse y entender, no basta con mirar al agente desde lejos y leer código de forma pasiva; hay que experimentar el código directamente. En el fondo, eso significa entrenar tu propio modelo mental
Al programar, el subconsciente emite muchos juicios como “esto se siente correcto”, y eso solo se desarrolla con repetición y concentración profunda; solo revisar código o leer documentación tiene límites. Cuando ese modelo mental ya existe, basta ver un mensaje de error en producción para señalar de inmediato la causa, pero con código generado uno puede tardar mucho más, recurriendo a un razonamiento consciente y lento
Para que un LLM sea realmente útil, habría que poder asumir que se encarga de todo el mantenimiento del código y funciona como una biblioteca externa; de lo contrario, los problemas seguirán apareciendo inevitablemente
Aún no sé cuál postura es la correcta y sigo investigándolo
Incluso en 2026, el código generado por IA sigue siendo bastante malo. Ya sea con Fable o con un harness personalizado de Pi/opencode LeetCode, los resultados son terribles, y si no puedes distinguir la diferencia de calidad entre tu código y el de la IA, eso son malas noticias
En el perfil de ejecución ya dejé explicitado en las reglas que el agente debe seguir la regla del boy scout, revisar la cobertura de código, hacer una revisión crítica y redactar reportes y tareas de seguimiento. Los LLM de punta de hoy siguen este tipo de reglas mucho mejor que el 90% de las personas con las que he trabajado, y me pregunto si eso realmente significa algo malo
El agente es conservador, así que puede amplificar errores humanos puntuales. Hay muchas formas de resolver esto y cada persona piensa distinto, así que tanto un enfoque de no leer el código como uno de leerlo y escribirlo directamente son posibles, pero también hay una gran ventaja en la precisión del código cuando no pasa por un LLM
La razón por la que necesito escribir código yo mismo es que, si no lo hago, el LLM termina creando demasiado código. Hay que entender el problema por completo y generalizarlo para evitar que a un “Hello World” le terminen colgando 10 mil líneas y 5 capas de abstracción
Como los LLM son predictores de tokens, cuanto más problemas haya que resolver, más tienden a aumentar los tokens de código que generan
Como quienes tienen el problema a resolver son humanos, si no se entiende el problema puede aparecer el problema X/Y, donde el LLM termina resolviendo algo que no tiene relación con la necesidad real. El LLM abstrae mejor elementos no centrales, como bibliotecas o lenguajes de alto nivel, pero el núcleo del problema sigue teniendo que expresarse formalmente
Incluso el vibe coding, donde se van agregando restricciones una por una hasta llegar al resultado deseado, al final sigue siendo una forma laxa e informal de programación. Es mejor dejarle al LLM la periferia del problema y escribir y entender uno mismo la parte central
En apariencia resolvió perfectamente lo pedido, pero era código innecesario y desprolijo. Las empresas que venden tokens por consumo tienen un incentivo económico para crear soluciones tipo Rube Goldberg que medio resuelven el problema mientras consumen la mayor cantidad posible de tokens, y se termina usando más tokens no solo al generar, sino también más adelante al tener que lidiar con un código enorme al que además se le mezclaron bugs nuevos
Es gracioso ver a gente que se burlaba del código copiado y pegado y ahora se entusiasma con código pegado de manera desprolija
Viendo el avance desde ChatGPT 3.5 en noviembre de 2022 hasta ahora, me pregunto si dentro de 4 años seguiré revisando código. Aun sin ser un extremista de la IA, si se mantiene la velocidad actual, es muy posible que en 5 a 10 años desaparezcan la ingeniería de software y el desarrollo tal como existen hoy
A los humanos quizá solo les quede algo como el diseño de UI, y todo lo demás podría quedar abstraído para que la IA haga el trabajo real
La web ya está lo suficientemente arruinada, así que al menos me gustaría que, como ahora, pudiéramos seguir culpando a humanos incompetentes
Sin importar la presión por KPI, sigo escribiendo código yo mismo cada vez que tengo la oportunidad, y de la IA solo espero algo como un autocompletado de código más inteligente
Escribo código yo mismo porque amo programar y eso realmente me hace feliz. No hay razón para renunciar a algo que me gusta