De Gutenberg a Darwin
La imprenta que lee sus propios libros
Ya conté hace unos meses por qué creo que abaratar el software no traerá menos, sino muchísimo más*, y sigo pensando que por ahí van los tiros. Lo que me ronda ahora es la pregunta que viene justo después de aceptar la abundancia: ¿qué pasa cuando producimos software más rápido de lo que somos capaces de seleccionarlo?
Boris Cherny*, que es el tipo que creó Claude Code y por tanto fabrica una de las máquinas de esta historia, dijo en febrero que lo más parecido que encuentra en la historia es la imprenta. Resulta que en la Europa de mediados del siglo XV menos del uno por ciento de la gente sabía leer, los escribas copiaban, y en los cincuenta años siguientes a Gutenberg se imprimió más que en los mil anteriores. Me vale. Pero la analogía se me queda corta justo en el sitio más interesante. La imprenta ni escribía los libros ni los leía: multiplicaba lo que un autor había escrito para que lo leyera otro. La IA hace las dos cosas. Escribe el software y consume lo que escribe: bibliotecas, compiladores, tests, documentación, protocolos. Autor, imprenta y lector en el mismo cacharro, y el circuito se realimenta solo. Y ahí Gutenberg se nos queda corto.
Para lo que viene después hace falta otro inglés, uno con barba. Darwin no descubrió que las especies cambian; eso ya lo sospechaba medio mundo. Descubrió el mecanismo: variación, selección, herencia. Y lo importante del mecanismo es que la variación, por sí sola, no es progreso. Casi todas las mutaciones son neutras o dañinas. Lo que convierte el ruido en adaptación es que la mayoría no sobrevive. Un circuito que se realimenta sin selección no evoluciona: se envenena.
Ahora pensemos lo que hace la IA con el software. Dispara la primera variable. Podremos generar mil implementaciones de un componente en una tarde. Lo que no dispara, o al menos, no al mismo ritmo, son las otras dos. Me da que estamos confundiendo las dos cosas: la IA no hace necesariamente mejor software, pero sí hace más mutaciones.
Hay un caso de este verano que lo cuenta mejor que yo. Bun, un runtime de JavaScript, estaba escrito en Zig, medio millón de líneas. Jarred Sumner*, su creador, lo reescribió entero en Rust en once días (sí, once): hasta sesenta y cuatro agentes trabajando a la vez, seis mil quinientos commits, unos ciento sesenta y cinco mil dólares en tokens. Un año de trabajo de un equipo pequeño, hecho en once días por un señor y una flota.
Y ojo al detalle que importa: la revisión también la hicieron agentes, con una sola instrucción, "encontrar bugs y razones por las que el código no funciona", y pasó el cien por cien de la batería de tests antes de fusionarlo. Paul Dix*, que fundó InfluxData y lleva años manteniendo una base de datos en producción, lo usó en agosto como prueba de que llegó el fin de la programación tal y como la conocíamos: la mayoría del código "no lo habrá escrito ni leído un humano", y a los humanos les quedará revisar resultados, no código.
Tela. Pero hubo réplica, y vino de donde más duele. Andrew Kelley*, el creador de Zig, el lenguaje que Bun acababa de abandonar, contestó al día siguiente. Resumió el razonamiento del otro lado en una frase, "la batería de tests es lo bastante buena para pillarlo todo", y la devolvió con filo: si esos tests no pillaban los bugs del Zig, ¿van a pillar los de "un millón de líneas de morralla sin revisar"? Puede que Kelley tenga sus motivos para estar dolido, y lo dice él mismo con una taza que pone "ya no es mi problema". Pero la pregunta tiene miga. Una batería de tests mide lo que alguien pensó en medir. Y nadie leyó el millón de líneas.
Pero dirás, en su empresa es cosa suya. Donde se vuelve asunto de todos es en el software libre, que es, si lo piensas, el mayor sistema de selección distribuida que construimos nunca. Linux no es bueno solo porque cualquiera pueda mandar un parche. Es bueno porque casi ningún parche entra. Mantenedores, revisión, tests, usuarios, forks, reputación: eso es la selección, hecha a mano durante treinta años. Y ese sistema está notando ya la mutación desbocada.
GitHub* abrió en enero una discusión pública para reconocer que el volumen de contribuciones de baja calidad "está creando problemas operativos significativos para los mantenedores": no siguen las guías, se abandonan a los días, y "a menudo están generadas por IA". Entre las medidas que barajan está una que hace cinco años habría sonado a herejía: dejar que un proyecto cierre las pull requests. Un botón para cerrar la puerta de la casa del software libre.
Debian*, que lleva treinta años votando sus reglas, votó esta en agosto: ocho opciones, desde prohibir la IA en el contrato social hasta aceptarla sin más. Ganó la del medio, "uso responsable": la IA se permite, pero el que firma tiene que entender, revisar y probar lo que entrega, y se le anima a decir que la usó. No prohíben la mutación. Regulan quién responde por ella.
Y me acordé de lo que escribió DHH*, el creador de Ruby on Rails, entrando con la caballería. En junio dijo que todas esas barreras a las contribuciones con IA son "un cuento proteccionista tan viejo como el mundo", que lo de la calidad y la atribución son excusas, y que el verdadero motivo es "tú, tus inseguridades y tus privilegios". Que el software libre se pasó décadas peleando por el derecho de todos a cambiar el software, y que ahora que por fin cualquiera puede, resulta que "todos" no era todos.
Tiene gran parte de razón en lo de la democratización. Pero creo que le falta una variable, y es la de Darwin. Mandar un parche sale casi gratis. ¿Y revisarlo? Eso sigue saliendo del tiempo del mantenedor, el mismo que antes. Un agente te planta diez pull requests en lo que un mantenedor tarda en entender una. Eso no es democratizar la participación. Es trasladarle el coste de la selección al que menos tiene.
Y la salida que ya muchos tomaron, y que quizás todos vamos a acabar tomando, es la de Bun: que seleccionen los agentes. Si la generación es automática y la selección también, el circuito entero gira sin que nadie lo revise. La imprenta escribiendo sus libros, imprimiéndolos y leyéndolos. Y esto no me deja muy tranquilo.
Puede salir bien: los agentes seleccionan, lo bueno se acumula, con lo acumulado se entrena un modelo mejor, que genera mejor. O puede salir mal: la selección es floja o se la salta todo el mundo, el ruido pasa, lo reusan otros proyectos, con el ruido se entrena el siguiente modelo, que genera más ruido y con más seguridad. El dibujo queda precioso en los dos casos, porque la morralla también pasa el test. La diferencia no está en la IA. Está en si la selección está a la altura de la variación.
Y el pesimista tiene aquí un buen rato para ganar, y se lo doy. Porque "seleccionar bien" esconde un problema que no se arregla con más máquinas. No existe el mejor organismo; existe el mejor adaptado a un sitio. Con el software puede que pase igual: SQLite y PostgreSQL son los dos excelentes porque resuelven problemas distintos. Lo que se puede medir, la IA lo va a medir cada vez más barato. Lo que no se mide es qué importa aquí, qué sacrificamos a cambio, y quién se lleva la culpa dentro de unos años. Eso no sale del mismo código que acaba de generar el modelo.
Así que creo que la ingeniería de software no se queda sin oficio; cambia de sitio, otra vez. Con Gutenberg no se acabó el oficio del libro; se movió. Anthony Grafton*, que se pasó años en los talleres de imprenta del Renacimiento, cuenta que la imprenta creó un tipo social nuevo, el corrector, gente muy formada que hacía el trabajo de un editor de mesa, y que el trabajo de escriba, lejos de desaparecer, se expandió. Hasta Tritemio, el abad que escribió en 1492 un elogio de los copistas contra la imprenta, lo mandó imprimir dos años después, que es por lo que lo conocemos.
Si puedo generar mil versiones de algo y mi trabajo ya no es producirlas, ¿qué me queda? Más de lo que había: diseñar lo que las distingue, los sistemas que las generan, los tests que importan, los benchmarks que no se dejan engañar, las reglas de qué entra y qué no, y quién responde. En términos de Darwin, la IA pone la variación y nosotros debemos poner la selección. Con una diferencia que la biología no tiene y que es toda nuestra: la selección la diseñamos a sabiendas, y si la diseñamos mal, lo que sobrevive es lo que mejor engaña al test.
Gutenberg explica la abundancia. Darwin explica lo que viene después. Y lo que viene después es que, por primera vez, la imprenta escribe y lee sus propios libros, y lo único que no hace es decidir cuáles entran en las bibliotecas. ¿O también? Eso nos debería tocar a nosotros.
¿Te ha gustado? Suscríbete.