paint-brush
Programadores de formación GPT-3 para el presente (y el futuro)por@mcsee
3,321 lecturas
3,321 lecturas

Programadores de formación GPT-3 para el presente (y el futuro)

por Maximiliano Contieri2022/06/27
Read on Terminal Reader
Read this story w/o Javascript

Demasiado Largo; Para Leer

El mercado actual está buscando programadores para apilar ladrillos utilizando lenguajes de moda. Dichos profesionales están capacitados en herramientas específicas que tienen ciclos de vida muy cortos y luego se vuelven obsoletas. Para 2021 ya existen numerosas alternativas a la inteligencia artificial y el aprendizaje automático, capaces de llevar a cabo tareas algorítmicas y de programación de bajo nivel. Debemos centrarnos en formar estos conceptos para que los profesionales puedan migrar fácilmente de una tecnología a otra tecnología (también accidental y, por tanto, rápidamente obsoleta). La amenaza de la inteligencia artificial sigue siendo la misma que la de las profesiones automatizables y obsoletas.

People Mentioned

Mention Thumbnail

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - Programadores de formación GPT-3 para el presente (y el futuro)
Maximiliano Contieri HackerNoon profile picture

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:


El papel

// Traduce esto al inglés y conviértelo en un artículo técnico:

Resumen

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

Introducción

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).

La amenaza

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)

La alternativa

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.

¿Qué necesitamos enseñar?

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.

La oportunidad

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.

¿Qué debemos enseñar a nuestros ingenieros?

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.

Trabajo futuro

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.

Conclusiones

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.

Expresiones de gratitud

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.

  1. GoLang
  2. programación declarativa
  3. Código heredado
  4. Programadores obsoletos
  5. Sin bala de plata
  6. Idiomas de moda
  7. No hay bala de plata
  8. Codificador profundo
  9. Codificación aumentada
  10. Procesar máquinas virtuales
  11. Bibliotecarios obsoletos
  12. Futuro del trabajo en Argentina
  13. máquina de Turing
  14. ley de moore
  15. modelo de crecimiento maltusiano
  16. Software de negocios
  17. Construcción de teoría
  18. Premio Turing
  19. software heredado
  20. IA general
  21. Knuth - El arte de la programación informática
  22. Fundación Sadosky
  23. Desarrollo basado en pruebas
  24. Pensamiento de objetos
  25. lenguas muertas
  26. Volumen de negocios del programador

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.

Calibración del modelo

Usé el modelo text-davinci-002 con tokens de temperatura 0 (aleatoriedad) y longitud máxima 2000

Opinión GPT-3

¿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!!)

Metaconclusión

Definitivamente seguiré usando GPT-3 para escribir artículos técnicos para mejorarlos.