Esto es difícil de responder porque, al igual que con la inteligencia artificial, una vez que hayamos logrado esto, será porque habremos escrito un programa que lo haga. Y los críticos dirán: "¡bueno, esta máquina no se está programando realmente! ¡Simplemente sigue exactamente el programa que le diste!"
Bueno, sí. Lo que sea que podamos lograr con las computadoras, lo haremos dándole algún programa y lo ejecutará. Si ese es un argumento en contra, entonces no podemos lograr nada. Y, sin embargo, en algún momento, la gente pensó que una computadora de ajedrez sería obviamente inteligente. Ahora pueden, y sabemos exactamente cómo, y no creemos que sea inteligente. Los submarinos aún no pueden nadar.
Entonces, considere algunos ejemplos.
Desde hace décadas, hemos tenido generadores de analizadores sintácticos . Usted les da una descripción de un idioma, se procesa y el resultado es el código de un analizador para ese idioma. Sabemos exactamente cómo se hace, pero ¿no es eso una programación de computadora en sí misma?
Segundo: editores que le dicen que ha cometido un error (error de sintaxis, variable no existente, etc.). No programa nada en sí mismo, pero puede decirte que hiciste algo mal. Es mucho en la superficie solamente.
Idiomas en los que puede hacer clic y arrastrar los controles de la IU, y el código que realmente los hará funcionar se genera automáticamente.
Compiladores JIT. Software que puede reconocer zonas activas en el software actualmente en ejecución y reemplazar parte de eso por código compilado altamente optimizado, optimizándose efectivamente mientras se ejecuta. Creo que este es un ejemplo de lo que puede parecer una programación de máquina en sí misma, hasta que sepa exactamente cómo sucede, y luego resulta que solo está haciendo lo que el programador le dijo, como siempre.
Juego general jugando. Este es un campo de investigación interesante, en el que los investigadores escriben programas que pueden leer descripciones de las reglas de los juegos, que luego los programas juegan uno contra el otro. Entonces, en lugar de un programa de tic-tac-toe o un programa de ajedrez, estos son programas que leen las reglas de tic-tac-toe o ajedrez o algún juego nuevo inventado en el lugar, y luego pueden jugarlos. El programa no se está programando en sí, pero sí juega ajedrez sin que las reglas del ajedrez hayan sido codificadas. Hubo un momento en que esto se consideraría claramente que la computadora se enseña a sí misma algo.
Hemos dado muchos pasos pequeños en la dirección general.
Pero no puedo pensar en ningún programa que se reescriba basándose en los resultados de ejecuciones anteriores, o que pueda reconocer rutinas obsoletas o ineficientes en su propio código. Creo que algún día tendremos eso, y no lo consideraremos nada especial, ya que será solo una característica del último compilador ...