¿Qué tan cerca estamos técnicamente de desarrollar software que pueda escribir software, esencialmente reemplazando la mayoría de los trabajos de programación y desarrollo de software realizados por humanos?

Recuerdo haber leído predicciones a mediados de la década de 1990 de que CASE Tools (ver: Ingeniería de software asistida por computadora) pronto se desarrollaría hasta el punto de que los programadores ya no serían necesarios para muchas tareas de desarrollo de software. Todo lo que se necesitaría sería expertos en un área comercial particular para crear diagramas y la herramienta generaría el código necesario. En caso de que se lo pregunte, las herramientas solo fueron moderadamente útiles y en gran medida han caído en desgracia.

En el momento de la predicción, me reí un poco, solo unos meses antes, había leído que se había hecho la misma predicción para otra tecnología. Este fue en 1959 y le permitiría a un no programador expresar un problema comercial en una sintaxis simple similar al inglés. El lenguaje era COBOL: ese tampoco eliminaba a los programadores.

Creo que el problema es que la gente no comprende lo que hace un programador. El conocimiento de un lenguaje de programación es realmente fácil de adquirir. La parte difícil es aprender a conceptualizar un problema comercial de una manera estructurada, de modo que pueda traducirse en estructuras de datos, algoritmos y, en última instancia, en software de trabajo. Muchos programadores aspirantes se encuentran en la posición en la que han estudiado un idioma y aprendido la sintaxis, pero no saben cómo comenzar a construir una solución real. Simplemente se han topado de frente con la parte difícil de ser programadores. No veo que esta parte difícil sea superada por las máquinas en el corto plazo.

EDITAR: Encontré este artículo. Mi predicción ahora es que DARPA creará un software que escriba software: Próximamente: Autocompletar para programadores

1. A medida que los lenguajes de programación lleguen a un nivel superior, el programador realizará menos trabajo, será más fácil y rápido escribir código, y los trabajos de programación serán reemplazados. Sin embargo, se crearán más trabajos de programación a través de las posibilidades que se crean a través de estos lenguajes de nivel superior.

2. Creo que esto ya se está haciendo usando redes neuronales. El software puede usar algoritmos de red neuronal para crear programas de red neuronal para resolver problemas específicos sin ningún diseño o codificación de un programador.

Estamos cada vez más cerca cada año.

La automatización de la programación es difícil de descifrar, pero el progreso se ha acelerado en los últimos años. En la década de 1980, trabajé en un generador de aplicaciones escrito en FORTRAN que, en principio, podría eliminar al programador intermediario. Solo requería especificaciones del usuario final como entrada. Sin embargo, era más o menos un producto de mercado vertical.

Hoy en día, hay productos más sofisticados que pueden crear aplicaciones sin necesidad de codificación. Sin embargo, todavía tienen un largo camino por recorrer antes de lograr una verdadera generalidad.

El progreso será constante en los próximos años y décadas. Big Data y el aprendizaje automático analizarán miles de millones de líneas de código fuente para “comprender” cómo codificar ciertos algoritmos. Este conocimiento permitirá que la automatización de la programación se acerque cada vez más a la eliminación de programadores humanos. No se trata de “si” sino de “cuándo”.

Nadie puede proporcionar una predicción precisa. Podría ser de 2 a 3 décadas. Podría ser más largo Pero es inevitable.

Si bien no se desarrolla una IA, la escritura del software seguirá dependiendo de que una persona dirija la acción a un alto nivel.
Creo que podría contar las optimizaciones avanzadas que hace un software como software que escribe más software, pero nuevamente una persona está involucrada en alguna parte.
Además, si recuerdo correctamente, hay una biblioteca de álgebra lineal que esencialmente se reescribe para ser lo más rápida posible en cada máquina en la que se ejecuta.
La gente dice que la optimización manual del código es aún mejor que la salida de una pieza de software, pero diría que, según mi experiencia, la mayoría de las veces los compiladores hacen un trabajo bastante bueno (como lo suficientemente bueno).

PD: también compila macros de tiempo como el software de escritura de Clojure,

Escribí sobre este concepto en esta respuesta. Aquí está la parte relevante:

Si pudiéramos describir los programas perfectamente, ya no necesitaríamos programadores.

Permítanme volver la pregunta sobre sí misma. ¿Cómo podría describir un programa de tal manera (incluyendo todos los detalles y casos extremos) donde la descripción no sería, en sí misma, el programa?

Antes de que podamos entrar en detalles acerca de cómo un programa puede escribir otro programa, primero tenemos que describir un programa arbitrario con tal detalle que podamos alimentar esos requisitos en la computadora para resolverlo.

¿Qué crees que es SQL?
SQL es un lenguaje declarativo. Le pide que busque algunos datos con una propiedad para usted, pero no le dice cómo obtener esos datos. Decide cómo hacerlo seleccionando la mejor situación para su consideración. Puede buscar cada elemento en la tabla para esa propiedad, o puede tener un índice para acelerar su búsqueda. ¿No hace eso que SQL sea inteligente?
Considere también compiladores y ensambladores. Analizan un lenguaje que está más cerca del lenguaje humano y lo traduce al lenguaje de máquina para que la computadora lo entienda. No solo eso, optimizan el código y eliminan las condiciones de carrera. Mientras escribe un programa en C, por ejemplo, no escribe explícitamente en qué registro almacenar y buscar una variable. Creo que eso requiere algo de inteligencia (no podría hacerlo todo yo mismo).

Ya existe un software de “Business Intelligence” (p. Ej., “Business Objects”) que convertirá los comandos del usuario al permitirles arrastrar y soltar campos u objetos en una cuadrícula que el software convierte al lenguaje de consulta estándar de la base de datos SQL.

Es discutible, pero para el público promedio esto parece “software de escritura de software”.

¡Planteo esto, pero dejaré que lo más técnicamente logrado decida si este es realmente el caso! 🙂

Estoy bastante seguro de que ya hay aplicaciones que escriben otro software. PERO estos son muy limitados y no permiten mucha personalización.
En lugar de un programador para establecer instrucciones para que una aplicación imprima ‘Hello World’, en su lugar establecería instrucciones para que una aplicación cree otra aplicación (escriba el código, compile, etc.) que imprima ‘Hello World’.

Un programa no funcionará hasta que alguien lo entienda. Una computadora no puede entender nada, como se señaló anteriormente, simplemente obedece. Se han escrito programas para eliminar gran parte del tedio de la programación. Un compilador le permite escribir en un lenguaje de alto nivel, sin tener que lidiar con los detalles del espacio de memoria, cómo la computadora realmente compara los números, cómo maneja los números complejos, cómo escribir un bucle que se ejecuta correctamente varias veces en lugar de estar “apagado por uno”, oculta los detalles de acceso a un dispositivo periférico, etc. Pero el programador aún debe decidir cuál es el gran problema a resolver y luego dividirlo en pequeños problemas que pueda resolver y luego verificar que el programa final haga lo que se pretendía.

Los ensambladores y compiladores son programas que escriben programas. Primero escribimos ensambladores y compiladores durante la década de 1950. Hoy en día hay muchos programas que escriben programas que incluyen compiladores de diagramas de flujo, generadores frontales de bases de datos, generadores de sitios web y evaluadores parciales. Así que no solo estamos cerca: lo hemos estado haciendo durante casi sesenta años.

Ninguno de estos requiere Machine Intelligence, pero sí requieren que una persona explique qué resultado final se desea. Ya sea que llame a esta persona programador o no, no veo que esto cambie, incluso si Machine Intelligence se aplica al problema.

Ahora desea reemplazar trabajos de software. Pero alguien tendrá que dar instrucciones al software sobre qué software escribirá. Estas instrucciones, nos guste o no, siguen siendo un programa, aunque de muy alto nivel.

Hemos estado haciendo esto desde los primeros días de la informática.

Las computadoras originales se programaron en código de máquina, y escribimos un software que nos permitiría escribir programas en conjunto y el software escribiría el código de máquina correspondiente (instrucciones binarias). Este proceso ha continuado a los lenguajes de programación de nivel superior.

El código que escribe son solo instrucciones para que un software escriba otro código hasta que algún software escriba el código de la máquina.

El objetivo de todo esto es crear un software capaz de tomar instrucciones escritas de una manera que los humanos puedan entender fácilmente y escribirlas como código de máquina.

Siempre habrá una criatura inteligente que describirá la lógica empresarial. Eso es lo que llamamos “programación”.

Ahora, la pregunta puede interpretarse como: ¿Qué tan cerca estamos de desarrollar una IA?

Esto ha sido regularmente predicho por personas que no entienden la programación durante el tiempo que han existido las computadoras programables. Nunca ha sucedido y no sucederá, porque solo los seres humanos saben lo que quieren que hagan las computadoras.

Hay muchas compañías que tienen una aplicación llamada CodeGenerator. Usted da algunas condiciones y la aplicación crea operaciones de inserción, actualización, eliminación, etc. Si tiene un marco poderoso, no es tan difícil. Estas aplicaciones también pueden hacer pantallas. los ensambladores y compiladores hacen esto durante años. Escribe en lenguaje C y finalmente se convierte en lenguaje máquina.

Si te refieres a un programa que tomará una entrada de voz como “escribir un programa para resolver este problema”, no por mucho tiempo . Si te refieres a un programa que puede ser utilizado por personas que no son programadores para producir programas que de alguna manera hagan lo que la persona tenía en mente, los hemos tenido durante años.

Pero, ¿quién mantendrá esos programas que pueden pasar de un problema a una solución, codificados para ejecutarse, una vez que los tengamos? Oh, eso requerirá programadores, ¿no? Por lo tanto, los programadores no serán reemplazados hasta que tengamos robots inteligentes que no se puedan distinguir de las personas. (Gran parte de lo que aprendemos se aprende de nuestras interacciones con otras personas. El programa que escribe estos programas tendrá que interactuar con las personas de la misma manera que nosotros).

No estamos

De alguna manera, ya tenemos un software que escribe software, eso es lo que son los lenguajes de alto nivel y las herramientas de software como los IDE. Estas herramientas hacen que los programadores modernos sean 30 veces más productivos que los programadores en 1944

Si está buscando una varita mágica que va a dejar a personas como yo sin trabajo, estará esperando mucho tiempo. La parte más difícil de automatizar el desarrollo de software es la obtención de los requisitos del usuario, y un sistema de inteligencia artificial que lo haga será aún más irritante que los nerds a los que actualmente tiene que enfrentarse durante mucho tiempo.

Si estuviera en el negocio de mejorar el proceso de desarrollo de software, estaría creando herramientas que pongan la programación en manos de cada vez más usuarios para que puedan construir lo que quieren más fácilmente. En gran medida, esto continúa la tendencia de los últimos 70 años.

Un concepto responde a su pregunta: LISP

More Interesting

¿Cómo empiezo a contribuir en proyectos de código abierto?

¿Cuáles son las cosas que un desarrollador de software debe saber aparte de los lenguajes de programación?

¿Cómo se actualizan los desarrolladores de software con nuevas tecnologías y herramientas?

Estoy trabajando en una empresa de TI como desarrollador de software y necesito cambiar a roles de administración. ¿Hay alguna salida sin hacer MBA?

¿Debería considerar un cambio de carrera? Llevo más de una década trabajando en el campo del desarrollo de software. La salud se está deteriorando, la vida social está hecha jirones (la abandoné para "cumplir el plazo") y estoy cansada. ¿Cómo debo hacerlo?

¿Se puede escribir un buen código C ++ sin utilizar la metaprogramación de plantilla?

Como desarrollador de software para principiantes, ¿qué tan importante es poder escribir código rápidamente? ¿Cuál es la cantidad mínima de horas que necesito pasar un día para dominar Java en 3-6 meses?

Después de ver los Oscar de anoche, me inspiré para trabajar en la industria del cine. ¿Qué posibles oportunidades hay para los desarrolladores de software?

¿Cómo se podría diferenciar entre desarrollar un prototipo y crear una versión beta en el desarrollo de software?

¿Cuál tiene más posibilidades de trabajar, seguridad de internet o desarrollo de software?

Soy un programador de sofware. ¿Qué especializaciones de MBA puedo hacer que me hagan trabajar en la industria de TI pero en una posición gerencial?

¿Por qué un empleador debería preferir un matemático a un desarrollador de software para algunas tareas de programación?

¿Cuánto cobran en los Estados Unidos o el Reino Unido por el desarrollo de software?

¿Cuáles son las 5 cosas importantes sobre las que un desarrollador de software siempre toma nota?

¿Es cierto que no es probable que los desarrolladores de software se conviertan en CEO porque no están dispuestos a abandonar la programación y centrarse solo en los negocios?