Está claro que la IA generativa ya está siendo utilizada por una mayoría (una gran mayoría) de programadores. Eso es bueno. Incluso si las ganancias de productividad son menores de lo que muchos piensan, entre un 15% y un 20% es significativo. Facilitar el aprendizaje de la programación y comenzar una carrera productiva tampoco es motivo de queja. Todos quedamos impresionados cuando Simon Willison le pidió a ChatGPT que lo ayudara a aprender Rust. Tener ese poder al alcance de la mano es asombroso. Pero hay una duda que comparto con una cantidad sorprendentemente grande de otros desarrolladores de software. ¿El uso de la IA generativa aumenta la brecha entre los desarrolladores principiantes y los desarrolladores sénior? La IA generativa facilita muchas cosas. Cuando escribo Python, a menudo me olvido de poner dos puntos donde deben estar. Con frecuencia me olvido de usar paréntesis cuando llamo a print(), aunque nunca usé Python 2. (Los viejos hábitos son difíciles de eliminar y hay muchos lenguajes antiguos en los que print es un comando en lugar de una llamada a una función). Normalmente tengo que buscar el nombre de la función Pandas para hacer, bueno, casi cualquier cosa, aunque uso Pandas bastante. La IA generativa, ya sea que uses GitHub Copilot, Gemini o algo más, elimina ese problema. Y he escrito que, para el principiante, la IA generativa ahorra mucho tiempo, frustración y espacio mental al reducir la necesidad de memorizar funciones de biblioteca y detalles arcanos de la sintaxis del lenguaje, que se multiplican a medida que cada lenguaje siente la necesidad de ponerse al día con su competencia. (¿El operador morsa? Dame un respiro). Sin embargo, hay otra cara de esa historia. Todos somos perezosos y no nos gusta recordar los nombres y las firmas de todas las funciones en las bibliotecas que usamos. Pero, ¿no es bueno no necesitar saberlos? Existe algo llamado fluidez con un lenguaje de programación, igual que con el lenguaje humano. No se adquiere fluidez usando un libro de frases. Eso puede permitirte pasar un verano viajando de mochilero por Europa, pero si quieres conseguir un trabajo allí, tendrás que esforzarte mucho más. Lo mismo ocurre en casi cualquier disciplina. Tengo un doctorado en literatura inglesa. Sé que Wordsworth nació en 1770, el mismo año que Beethoven; Coleridge nació en 1772; muchos textos importantes en Alemania e Inglaterra se publicaron en 1798 (más o menos unos pocos años); la revolución francesa fue en 1789. ¿Significa eso que estaba sucediendo algo importante? ¿Algo que va más allá de que Wordsworth y Coleridge escribieran unos pocos poemas y Beethoven escribiera unas pocas sinfonías? Resulta que sí. Pero ¿cómo se le ocurriría a alguien que no estuviera familiarizado con estos hechos básicos avisar a una IA sobre lo que estaba sucediendo cuando todos estos eventos separados colisionaron? ¿Pensarías en preguntar sobre la conexión entre Wordsworth, Coleridge y el pensamiento alemán, o en formular ideas sobre el movimiento romántico que trascendió a los individuos e incluso a los países europeos? ¿O nos quedaríamos atrapados con islas de conocimiento que no están conectadas, porque somos nosotros (no las IA) quienes las conectamos? El problema no es que una IA no pueda hacer la conexión, es que no pensaríamos en pedirle que haga la conexión. Veo el mismo problema en la programación. Si quieres escribir un programa, tienes que saber lo que quieres hacer. Pero también necesitas una idea de cómo se puede hacer si quieres obtener un resultado no trivial de una IA. Tienes que saber qué preguntar y, en un grado sorprendente, cómo preguntarlo. Experimenté esto el otro día. Estaba haciendo un análisis de datos simple con Python y Pandas. Estaba yendo línea por línea con un modelo de lenguaje, preguntando «¿Cómo hago?» para cada línea de código que necesitaba (algo así como GitHub Copilot), en parte como un experimento, en parte porque no uso Pandas con la suficiente frecuencia. Y el modelo me acorraló en un callejón sin salida del que tuve que salir por mis propios medios. ¿Cómo llegué a ese callejón sin salida? No por la calidad de las respuestas. Todas las respuestas a cada una de mis indicaciones eran correctas. En mi análisis posterior, revisé la documentación y probé el código de muestra que proporcionaba el modelo. Me acorraló en el callejón sin salida debido a la única pregunta que no sabía que necesitaba hacer. Fui a otro modelo de lenguaje, redacté una indicación más larga que describiera todo el problema que quería resolver, comparé esta respuesta con mi torpe truco y luego pregunté «¿Qué hace el método reset_index()?» Y luego me sentí (no incorrectamente) como un principiante despistado: si hubiera sabido pedirle a mi primer modelo que reiniciara el índice, no me habría acorralado. Supongo que podrías leer este ejemplo como “mira, realmente no necesitas saber todos los detalles de Pandas, solo tienes que escribir mejores indicaciones y pedirle a la IA que resuelva todo el problema”. Está bien. Pero creo que la verdadera lección es que necesitas dominar los detalles. Ya sea que dejes que un modelo de lenguaje escriba tu código en grandes fragmentos o una línea a la vez, si no sabes lo que estás haciendo, cualquiera de los dos enfoques te meterá en problemas más temprano que tarde. Quizás no necesites conocer los detalles de la función groupby() de Pandas, pero sí necesitas saber que está ahí. Y necesitas saber que reset_index() está ahí. Tuve que preguntarle a GPT “¿no funcionaría mejor si usaras groupby()?” porque le pedí que escribiera un programa donde groupby() era la solución obvia, y no lo hizo. Es posible que necesites saber si tu modelo ha usado groupby() correctamente. Las pruebas y la depuración no han desaparecido, y no desaparecerán. ¿Por qué es esto importante? No pensemos en el futuro lejano, cuando la programación como tal ya no sea necesaria. Tenemos que preguntarnos cómo los programadores junior que entran ahora en el campo se convertirán en programadores senior si se vuelven demasiado dependientes de herramientas como Copilot y ChatGPT. No es que no deban usar estas herramientas: los programadores siempre han creado mejores herramientas para sí mismos, la IA generativa es la última generación en herramientas y un aspecto de la fluidez siempre ha sido saber cómo usar las herramientas para ser más productivos. Pero a diferencia de las generaciones anteriores de herramientas, la IA generativa se convierte fácilmente en una muleta; podría impedir el aprendizaje, en lugar de facilitarlo. Y los programadores junior que nunca llegan a dominar el lenguaje, que siempre necesitan un libro de frases, tendrán problemas para dar el salto a los senior. Y eso es un problema. He dicho, muchos de nosotros lo hemos dicho, que las personas que aprenden a usar la IA no tendrán que preocuparse por perder sus trabajos a causa de la IA. Pero hay otra cara de la moneda: las personas que aprenden a utilizar la IA sin dominar lo que hacen con ella también tendrán que preocuparse de perder su trabajo a causa de la IA. Serán reemplazables, literalmente, porque no podrán hacer nada que una IA no pueda hacer. No podrán idear buenos mensajes porque tendrán problemas para imaginar lo que es posible. Tendrán problemas para averiguar cómo hacer pruebas y tendrán problemas para depurar cuando la IA falle. ¿Qué hay que aprender? Es una pregunta difícil, y mis ideas sobre la fluidez pueden no ser correctas. Pero estaría dispuesto a apostar a que las personas que dominan los lenguajes y las herramientas que utilizan utilizarán la IA de forma más productiva que las personas que no lo hacen. También apostaría a que aprender a ver el panorama general en lugar de la pequeña porción de código en la que estás trabajando te llevará lejos. Por último, la capacidad de conectar el panorama general con el microcosmos de los detalles minuciosos es una habilidad que pocas personas tienen. Yo no. Y, si te sirve de consuelo, no creo que las IA lo hagan tampoco. Así que aprende a usar la IA. Aprende a escribir buenos mensajes. La capacidad de usar la IA se ha convertido en un requisito indispensable para conseguir un trabajo, y con razón. Pero no te quedes ahí. No dejes que la IA limite lo que aprendes y no caigas en la trampa de pensar que «la IA sabe esto, así que yo no tengo que hacerlo». La IA puede ayudarte a adquirir fluidez: la respuesta a «¿Qué hace reset_index()?» fue reveladora, aunque tener que preguntarla fue humillante. Sin duda, es algo que no es probable que olvide. Aprende a hacer preguntas generales: ¿Cuál es el contexto en el que encaja este fragmento de código? Hacer esas preguntas en lugar de simplemente aceptar el resultado de la IA es la diferencia entre usar la IA como una muleta y usarla como una herramienta de aprendizaje.