Sincronismo
Mi tocayo Tom Wilke dice que existe una especie de sincronía que hace que ciertas cosas ocurran en el momento justo, yo las veo como felics casualidades pero en fin Tom es psicoloco y se supone que sabe de esas cosas.
Este ciclo sicrónico partió el 20 con mi entrada "¿Y para qué sirven los ingenieros?", siguió el 21 con "Qué estudiaría hoy si tuviese 18 años" y ayer tuve el remate al encontrarme con la charla que dio Matt Welsh a los estudiantes de CS50 en la Universidad de Harvard a los alumnos que tomaban ese curso de ciencias de la computación.
Esa charla estuvo muy relacionada con las cosas que yo trataba en las dos entradas de mi blog, por ejemplo cuan útil resulta hoy en día estudiar en la universidad algunas carreras tecnológicas y el futuro laboral de los que hoy aprenden programación.
Muchas de las cosas que dijo Welsh fueron como si me estuviese leyendo la mente porque coinciden exactamente con algunas ideas que yo tengo sobre esos asunto. No es simplemente que esté de acuerdo con lo que dijo, sino que repite algunas ideas que yo -ingenuamente- pensaba que eran solo mías.
Por ejemplo los cambios en las herramientas disponibles para los ingenieros que no han sido correctamente asimilados por el paradigma que se usa en la enseñanza, es algo que los que estudiamos en los setentas podemos entender con mucha claridad.
Como afecta el cambio de herramientas
Recuerdo que cuando entré a estudiar para Técnico Electrónico en 1974, todos teníamos que llevar una regla de cálculo, en las primeras clases fueron con una regla gigante que se colgaba en el pizarrón donde teníamos que aprender a hacer las cuatro operaciones -hasta con tres decimales- aproximar correctamente, sacar cuadrados, raíces y logaritmos. Un semestre completo en eso.
Cuando entré a la universidad en 1978 las calculadoras se estaban empezando a popularizar y al principio estaba prohibido usarlas en las pruebas.
En 1980 yo estaba en el tercer año y vendía calculadoras junto con estudiar, así es que disponía de una Casio FX-702P, que no me dejaban usar -aunque ya habían soltado la mano con las calculadoras- porque era un verdadero torpedo electrónico.
Hasta entonces, las pruebas medían la capacidad de los estudiantes de memorizar decenas de fórmulas distintas para cada prueba, identificar cual era la aplicable y hacer el álgebra necesaria. Pero con un aparato capaz de guardar texto esas capacidades eran irrelevantes.
Un buen ingeniero tenía que ser experto en el dibujo técnico, nos decían que probablemente al entrar a la industria tendríamos que pasar el resto de la vida pegados a esas mesas de dibujo inclinadas, que eran la norma en toda oficina de ingeniería.
También debía ser capaz de hacer calculos aritméticos mentales, rápidamente y sabiendo aproximar los resultados a un nivel aceptable. Todo ingeniero en esos años era capaz de hacer esas cosas.
Los cambios que introdujo la calculadora y los computadores en la ingeniería han sido enormes pero han pasado medio inadvertidos, porque la academia sigue en grandes líneas, enseñando como si nada de eso hubiese pasado.
Las herramientas cambian y el modelo no se mueve
El paradigma académico hoy pretende que hay un corpus de conocimientos y habilidades que son fundamentales y que seguirán siéndolo a pesar de todos los cambios en la tecnología, esa es la Muralla China tras la que se atrincheran las universidades de todo el mundo y es lo que les permite seguir enseñando más o menos lo mismo durante décadas.
Es como si las universidades siguieran dando un semestre de "taller de código morse", aunque no se use hace décadas diran "no es el conocimiento específico, lo que importa es que adquieran rapidez, concentración, capacidad de atención y blablabla".
¿Sirve entrenar la mente?
Es como esos que dicen que enseñarles ajedrez a los niños los hará más inteligentes, no tengo nada contra el ajedrez que puede ser muy entretenido ¡pero es un maldito juego! Tal como gran parte de las matemáticas que -supuestamente- nos hacen más inteligentes.
La verdad que eso de entrenar el cerebro de los estudiantes es solo una excusa barata para no darse el trabajo de revisar críticamente qué sirve y qué no sirve, qué hay que eliminar y qué se debe agregar para vender un mejor servicio educativo.
Pero se escudan con esa estupidez que "la educación no es un negocio" para hacer perder montones de tiempo y plata a los estudiantes, facilitando la vida de los profesores, a costa de arruinar el futuro de generaciones y el desarrollo de todo el país.
Pero me estoy apartando del asunto, volvamos a la conferencia de Welsh donde dijo algunas ideas muy interesantes como:
Electrónica, ley de Moore y avance del software
La computación está intimamente ligada a la ingeniería electrónica, sus avances y limitaciones, pero los computines, engrupidos en sus capas de abstracción tienden a olvidarlo. En electrónica la Ley de Moore, que dice que los circuitos integrados hacen avances inmensos en muy poco tiempo, se ha cumplido desde hace varias décadas.
El software en comparación no ha avanzado prácticamente nada. Welsh muestra un programa escrito en Fortran en 1957 y para la misma tarea, uno escrito en Basic unos 10 años después, otro escrito en un lenguaje muy sofisticado (APL) en el año 1966 y el programa en RUST uno de los lenguajes usados en la actualidad.
Resulta que que ninguno de esos códigos es entendible a primera vista, incluso programadores expertos tienen que tomarse su tiempo para averiguar de que se trata. Además muchos son muy son muy similares. Años de avances en ciencias de la computación, estructuras de datos, lenguajes y todo eso y los códigos siguen siendo un dolor de cabeza mayor para escribir, depurar y mantener.
Por eso muchísimos de los programas críticos aún están escritos en Cobol, nadie ha podido traspasarlos todavía a un lenguaje un poco más inteligible. Y ni el UML, ni la programación orientada a objetos ni la chorrera de modas que han pasado por las aulas universitarias, que son defendidas a muerte por los que las aprendieron y no quieren aprender otras nuevas, ninguna de esas ha solucionado el problema.
Por eso a las grandes empresas de software cada codificador les cuesta más de 300.000 dólares al año y se pueden demorar varios años antes de tener un nuevo proyecto en producción. Y mientras más tiempo pasa mayor es la complejidad de los proyectos, empujados por un hardware cada vez más potente.
Los lenguajes de programación han avanzado poco y nada, nada en comparación con el hardware. Escribir un programa sigue siendo un asunto laborioso, irritante y tan difícil de revisar como era hace 50 años atrás, con la diferencia que hoy tienen miles o millones de líneas de código mintras que los antiguos solo tenían unos cientos, como mucho. Esto eleva el costo a las nubes.
De la programación tradicional a la inteligencia artificial
Aquí es donde la IA está haciendo un cambio fundamental porque permite generar código de manera automática en base a especificaciones en lenguaje natural que dicen cuales son los datos de entrada y cual es la salida que se requiere, Welsh da el siguiente ejemplo:
"Entrégueme un resumen en una o dos frases de la transcripción del siguiente segmento de video, NO use ningún otro conocimiento del mundo que tenga, incluya el título del podcast, el nombre del episodio y el nombre de los expositores, si se conoce"
Welsh afirma que un algoritmo así probablemente no se puede codificar en ninguno de los lenguajes de programación actuales, y probablemente tampoco en los futuros, pero un modelo de inteligencia artificial si puede hacerlo y genera un algoritmo para esto aunque no está escrito en ninguno de los lenguajes de programacion que existen, funciona, pero a su manera.
¿Y como funciona? Aprendiendo, si no nos entrega una respuesta adecuada se lo decimos y el modelo prueba otra forma, en ese sentido, además de usarlo, le estamos "enseñando" al modelo. En el fondo para funcionar, en lugar de seguir una secuencia de instrucciones, los modelos de IA completan frases.
Analizan el párrafo que ingresamos, lo comparan con billones de frases que contengan esas palabras o similares y elaboran un resultado del tipo "complete la oración" como el profesor Salomón de la tele. El proceso sería imposible para un ser humano, pero una máquina con gran capacidad de hardware y buenos motores de análisis de sintaxis pueden hacerlo sin problemas.
Aquí es donde la analogía con las calculadoras electrónicas vuelve en gloria y majestad. Con la aparición de las calculadoras no se extinguieron los ingenieros, pese a que casi todas las habilidades que eran fundamentales para la profesión quedaron obsoletas de un día para otro.
Tal vez llegue el día que cualquier persona que no sepa nada de construcción -por ejemplo- o de instalaciones eléctricas, etc. pueda entrar los requerimientos para hacerse una casa en lenguaje común y corriente y una aplicación se encague de todo lo demás: diseño, cálculos, planos, materiales, órdenes de compra, contratar trabajadores, etc, eso es perfectamente posible con el estado del arte que tenemos hoy.
Sin embargo arquitectos e ingenieros siguen ahí como si nada ¿terminarán siendo innecesarios? Puede ser, pero falta todavía para eso. Incluso los vehículos que se conducen solos, que son una aplicación para la que existe toda la técnica necesaria, todavía avanza a paso de tortuga. Estamos en una transición.
Otra cosa importante es que la inteligencia artificial está haciendo para los programadores exactamente lo mismo que lo que hicieron las calculadoras para los ingenieros en los ochentas. Existen aplicaciones como Copilot de Github que ya se están convirtiendo en las calculadoras del Siglo XXI para los programadores. Nunca había sido tan fácil y productivo programar como es hoy.
Por eso sigo creyendo que este es el momento ideal para aprender a programar. ¿Quedará obsoleto cualquier lenguaje que aprendan? Sin duda, ¿quedarán obsoletas el 70% de las habilidades que hacen hoy a "un buen programador"? Claro que si, eso es inevitable.
Pero tenemos un par de años de trabajos que estarán entre los mejor pagados y más fáciles del mundo. Google y otras grandes empresas de computación ya eliminaron el título profesional como requisito de contratación y lo reemplazaron por un proceso de entrevistas y pruebas.
Esas pruebas fundamentalmente miden la capacidad para entender un problema en lenguaje natural, en base a eso crear el algoritmo y codificarlo de la mejor manera posible. Eso es lo que se espera hoy de un buen programador.
La capacidad de crear el algoritmo donde lo único que se necesita saber es si el lenguaje de programación es capaz de solucionar el problema y cual es la secuencia que más "le acomoda", codificarlo es solo expresar ese algoritmo en una secuencia de instrucciones permitidas por el lenguaje.
Pero ahora existe la IA y Copilot, que pueden idear el algoritmo y codificarlo directamente en base a las especificaciones en lenguaje natural, esas habilidades para convertir problemas en algoritmos y codificarlos son el equivalente a la destreza de los antiguos ingenieros de hacer los cálculos correcta y rápidamente, usando la regla de cálculo o la Tabla Larsen. Ya son obsoletas.
Sin embargo los viejos ingenieros calculistas siguen vigentes y cotizados, porque se dan cuenta enseguida cuando el resultado de la calculadora parece sospechosamente malo, tienen el olfato y la experiencia para hacer el cálculo aproximado en la cabeza.
De manera parecida, a un buen programador, con cierta destreza para idear algoritmos, tal vez no llegue a usar esa destreza en el futuro, pero puede ser muy valiosa para alimentar y enseñar a los modelos de inteligancia artificial. Y para lo que haya que hacer a mano como complemeto, para eso está Copilot.
Al menos así es como yo lo veo, tal vez esto no interese a nadie leerlo pero a mi me divirtió mucho escribirlo. Alguna vez que me de un gustito ¿no?