Escribí un artículo en español y le pedí a "alguien más" que lo reescribiera.
El año pasado escribí un artículo en español sobre el futuro de los programadores.
TL;DR: En lugar de traducir manualmente mi documento, decidí reescribirlo completamente con GPT-3 .
De la misma manera, The Guardian preguntó a GPT-3 cuándo estaba en beta privada.
Cuando le pedí que tradujera el artículo, decidió que el título no era lo suficientemente bueno.
Entonces lo cambió a presente Y futuro
😱Aterrador, ¿no?
Vamonos.
Así que este es el documento original reescrito por GPT-3:
// Traduce esto al inglés y conviértelo en un artículo técnico:
El mercado actual está buscando programadores para apilar ladrillos (1) utilizando sus lenguajes de moda. Dichos profesionales están capacitados en herramientas específicas que tienen ciclos de vida muy cortos y luego se vuelven obsoletas.
Actualmente existen alternativas para realizar desarrollos informáticos utilizando personas inteligentes, capaces de tomar sus propias decisiones y participar en el proceso creativo.
Los programadores del futuro tendrán que ser excelentes y declarativos (2). Profesionales que saben de algoritmos y complejidad y que saben hacer
La mayoría de los desarrolladores en el mundo están haciendo cambios en los sistemas antiguos o tienen que usar bibliotecas o marcos preexistentes complejos sobre los que tienen poco control y pocas oportunidades de modificar. (3)
En la industria del software actual, es muy poco probable encontrar la necesidad de desarrollar desde cero, con una página completamente en blanco.
La vida específica de la edad de un programador junto con el lenguaje de moda. Este periodo de tiempo suele ser inferior a una década, por lo que la industria descarta como obsoletos a los profesionales antes de los diez años de formación. (4)
En las últimas décadas estuvieron de moda como supuestas balas de plata (5), lenguajes como Visual Basic, C++, Java, Php, Perl, Javascript, Ruby, Python y GoLang.
Algunos de ellos ya están dejando de usarse, dejando su lugar a nuevas modas. (6)
Los conceptos generales (que Frederick Brooks llama esenciales (7)) se absorben mejor en nuestra primera etapa académica. Debemos centrarnos en formar estos conceptos para que los profesionales puedan migrar fácilmente de una tecnología (que Brooks llama accidental) a otra tecnología (también accidental y, por lo tanto, rápidamente obsoleta).
Para 2021 ya existen numerosas alternativas a la inteligencia artificial y el aprendizaje automático, capaces de realizar tareas algorítmicas y de programación de bajo nivel (8) (9).
Las modernas máquinas virtuales (aquellas que interpretan el lenguaje de alto nivel en el que programamos y que existen, por ejemplo, en los navegadores web) optimizan el código por nosotros. (10)
A medida que avanza la tecnología, ya no se requerirán programadores de bajo nivel de la misma manera que hoy en día nadie busca bibliotecarios (11). Similar a lo que ocurre con otras profesiones automatizables y obsoletas. (12)
Nuestra profesión todavía se basa en enseñar programación imperativa de bajo nivel como si estuviéramos enfrentando los problemas de los años 60 o 70 cuando el hardware especializado eran las tarjetas perforadas y las máquinas de cinta abiertas.
Educamos a nuestros alumnos para realizar optimizaciones algorítmicas absurdas y obsoletas, muy cercanas al lenguaje de las máquinas y muy alejadas del modelado de entidades del problema que estamos representando en nuestra solución informática.
Formamos profesionales para entender cómo funciona una computadora y rebajarse a hablar en su lenguaje, formando modelos mentales de bajo nivel y tratando de razonar en la forma algorítmica en que procesa una máquina de Turing.
Sin embargo, hoy en día podemos desarrollar modelos semánticos con varias capas de abstracción por encima a medida que nos acercamos a los modelos mentales declarativos nos alejamos al mismo tiempo de las abstracciones computables de las máquinas. Los lenguajes de programación más declarativos nos permiten razonar e inferir reglas sobre nuestros modelos. En contra de esta tendencia, nuestros alumnos escriben sus instrucciones a base de unos y ceros.
La ley de Moore (14) nos habla de la velocidad de cambio del hardware y su crecimiento exponencial en potencia de procesamiento. Con respecto al software, crecemos linealmente limitados por las realidades de hace muchas décadas y la inercia de los entrenadores. En analogía con la teoría económica maltusiana (15), necesitamos alcanzar la curva del hardware para poder liberar todo nuestro potencial antes de que las máquinas lo hagan por nosotros.
La falta de abstracción y comprensión de la realidad es síntoma de una mentalidad inercial, basada en las restricciones de tiempo de los procesadores y almacenamiento de los años 60 y 70. Estas restricciones se limitan hoy a dominios muy específicos y no son representativas de los problemas que tenemos que resolver hoy como ingenieros de software en la mayoría de nuestros trabajos. (dieciséis)
Necesitamos formar generalistas, pero no teóricos. Personas que entiendan los conceptos básicos y fundamentos de la ingeniería de software y puedan adaptarse a implementaciones accidentales basadas en herramientas actuales, pero también a futuras que aún hoy no conocemos.
Conceptos como diseño de software, modelos de ciclo de vida, trabajo en equipo y construcción de una teoría compartida (17), integración y despliegue continuo o arquitectura, son mucho más importantes que aprender a minimizar el uso de la CPU, a utilizar React, el framework Vue o la librería Keta. .
“Es muy difícil hacer predicciones, especialmente sobre el futuro”. Esta frase, atribuida al gran Niels Bohr, nos dice que debemos tener cuidado al intentar anticiparnos al futuro.
Parafraseando el Premio Turing 2004 (18) Alan Key, dijo: “La mejor manera de predecir el futuro es inventarlo”.
No sabemos a ciencia cierta cuál será el camino de la automatización de máquinas, pero podemos vaticinar que la parte más creativa y de ingeniería de nuestra profesión debe ser uno de los últimos baluartes en caer ante la automatización.
La próxima generación de desarrolladores de software tendrá que centrar sus habilidades en el diseño, el modelado del mundo real y la creación de abstracciones que evolucionen junto con el dominio del problema para evitar crear software obsoleto y heredado (19).
Este enfoque estratégico no se limita solo a las carreras de desarrollo. En ciencia de datos hay problemas similares: científicos de datos centrados en optimizar algoritmos existentes en lugar de formar profesionales generalistas, capaces de entender los problemas académicos y comerciales de nuestro país con una batería de soluciones y buen criterio para determinar cuál elegir en cada situación. Deben estar capacitados para modelar el problema real y evaluar diferentes soluciones posibles.
Los profesionales de la ciencia de datos tienen una increíble variedad de herramientas para ajustar sus modelos. Todavía estamos lejos de encontrar el segundo "superalgoritmo" (20) capaz de resolver problemas específicos con una solución genérica. Nuestros futuros profesionales cuentan con la única computadora de propósito general que puede resolver razonablemente varios problemas específicos: Sus mentes brillantes.
Nuestra responsabilidad es alimentar y estimular esos cerebros con problemas reales y no con soluciones de juguete que los ordenadores resuelven (ya en 2020) de forma mucho más eficiente.
Paradójicamente, desperdiciar nuestros cerebros pidiéndoles que realicen optimizaciones de bajo nivel para las máquinas es la peor manera de optimizar nuestro recurso más costoso.
Históricamente, hemos privilegiado el desarrollo de herramientas muy específicas y teóricas. Esto es muy común y deseable en la ciencia porque los avances teóricos suelen preceder a las implementaciones y usos concretos por décadas.
Sin embargo, en el desarrollo de software, los descubrimientos y hallazgos se encuentran principalmente en el sector privado antes que en la academia. Nuestros profesionales deben estar formados en metodología y conceptos por encima de tecnologías y lenguajes casuales de moda. Esto genera tensión entre el mercado que quiere “implementadores expertos en una herramienta” para desecharlos cuando cumple su ciclo de moda de 5 o 10 años.
Nuestros profesionales no deben ser desechables ni reciclables. Debemos formarlos en técnicas y deben mantenerse en constante actualización, como ocurre en otras profesiones como la medicina, la física o la biotecnología.
Además de habilidades “blandas” como la construcción y el trabajo en equipo (ya que el software surge de una actividad colectiva) (17), debemos enseñar técnicas de diseño y prototipado para validar nuestras soluciones de alto nivel.
En cuanto al software, es imperativo enseñar diseño de soluciones, centrándonos en el comportamiento de nuestros modelos y, parafraseando a Donald Knuth (21), el autor histórico de la mayoría de los algoritmos que usamos hoy en día, evitando optimizaciones prematuras porque queremos jugar un juego. que las máquinas dominan mucho mejor que nosotros.
Formar talento es una opción accesible para cualquier país con un buen nivel académico, como Argentina.
Invertir en formar excelentes ingenieros de software es una decisión estratégica y una oportunidad de despegue que ya han aprovechado muchos otros países como Estonia, Irlanda, Israel o India. La Fundación Sadosky trabaja actualmente en esta dirección. (22)
En Argentina tenemos excelentes profesores, buen nivel de inglés, un horario inmejorable para dialogar con USA y Europa, y una cultura compatible con los países más desarrollados. Necesitamos priorizar las tecnologías de la información y, dentro de ellas, formar ingenieros inteligentes y declarativos en lugar de programadores mecanizados y optimizadores de bajo nivel.
Nuestros profesionales deben tener conocimientos básicos de programación, algoritmos, complejidad y bases de datos.
Sobre todo, deben aprender a realizar diseños basados en modelos de integración continua y despliegue continuo, con pruebas automatizadas, utilizando técnicas ágiles como el Test-Driven Development. (23)
El software producido debe ser declarativo y basado en el comportamiento deseado (y especificado en las pruebas funcionales automatizadas); debemos dejar de pensar en el paradigma reinante de los años 60 y 70, basado en tipos de datos y manipulación de archivos y cadenas, para centrarnos en modelos de alto nivel que acompañen la simulación de cualquier aspecto del mundo real que queramos representar para resolver un cierto problema (24)
Las técnicas de diseño basadas en el comportamiento son agnósticas con respecto a la tecnología accidental de la moda y esto permite que un ingeniero formado con estos conceptos hace 30 años pueda realizar desarrollos concretos aún hoy.
Lamentablemente, tal situación no la replican los programadores que dominan algún lenguaje de moda, que prácticamente no tiene utilidad y que hace que no encuentren buenas opciones en el mercado laboral. La paradoja es que un oficio con pleno empleo descarta a estos profesionales por no haber sabido adaptarse. (25)
El cambio, actualmente, es aún más vertiginoso. Las tecnologías duran mucho menos y la obsolescencia nos acecha, a menos que seamos inteligentes y amplios, y tengamos la formación adecuada.
Este es un artículo de opinión. Como trabajo futuro para apoyar la presente tesis, deberíamos realizar un estudio cuantitativo que incluya cifras de rotación de empleados (25), tiempo medio en cada puesto de trabajo según edad y estudios realizados, etc.
Para ello debemos utilizar técnicas afines a las ciencias sociales bajo un enfoque multidisciplinario.
El futuro ya ha llegado. No tenemos mucha idea de cómo será el trabajo de un programador dentro de 5 o 10 años, pero tenemos fuertes indicios de que no estará relacionado con escribir algoritmos basados en estructuras de datos. Debemos formar profesionales que entiendan rápidamente un problema de la vida real y sepan construir simuladores con saltos conceptuales muy pequeños, para que puedan evolucionar a la par de los problemas que hoy estamos resolviendo.
Parte de las ideas de este artículo nacen del trabajo docente en la carrera de Ingeniería de Software en la carrera de Informática de la Facultad de Ciencias Exactas de la Universidad de Buenos Aires.
La traducción es precisa y hermosa.
Lo verifiqué con la aplicación Grammarly and Hemmingway y encontré solo algunos errores gramaticales.
Como ejemplo:
Trabajo Futuro (español para trabajo futuro)
Este es un artículo de opinión. Como trabajo futuro para apoyar la presente tesis deberíamos realizar un trabajo cuantitativo incluyendo cifras de rotación de empleados (25), tiempo promedio en cada trabajo según la edad y los estudios realizados etc. Para ello debemos utilizar técnicas relacionadas a las ciencias sociales bajo un enfoque multidisciplinario.
Se traduce en GPT-3 como:
Este es un artículo de opinión. Como trabajo futuro para apoyar la tesis actual, deberíamos realizar un estudio cuantitativo que incluya cifras de rotación de empleados (25), tiempo promedio en cada puesto de trabajo según edad y estudios realizados, etc. Para ello debemos utilizar técnicas relacionadas con las ciencias sociales. desde una perspectiva multidisciplinar.
Mientras que Google Translate produce:
Trabajo futuro
Este es un artículo de opinión. Como trabajo futuro para sustentar esta tesis, deberíamos realizar trabajos cuantitativos que incluyan cifras de rotación de empleados (25), tiempo promedio en cada puesto de trabajo según edad y estudios realizados, etc. Para ello debemos utilizar técnicas relacionadas con las ciencias sociales bajo un enfoque multidisciplinario.
Usé el modelo text-davinci-002 con tokens de temperatura 0 (aleatoriedad) y longitud máxima 2000
¿Cuál es tu opinión sobre este artículo?
Creo que este artículo presenta algunos puntos válidos sobre el futuro de la programación y la necesidad de que los programadores se adapten al cambio. Estoy de acuerdo en que la industria se está moviendo hacia soluciones más automatizadas y que esto eventualmente conducirá a una disminución en la necesidad de programadores. Sin embargo, creo que siempre habrá una necesidad de programadores que sean capaces de comprender y resolver problemas complejos.
😱 (¡¡Miedo otra vez!!)
Definitivamente seguiré usando GPT-3 para escribir artículos técnicos para mejorarlos.