É difícil responder porque, assim como a inteligência artificial, uma vez que tenhamos conseguido isso, será porque teremos escrito um programa que o fará. E os críticos dirão: "Bem, esta máquina não está realmente se programando! Apenas segue exatamente o programa que você deu!"
Bem, sim. Tudo o que conseguiremos realizar com computadores, faremos dando a ele algum programa e ele será executado. Se isso é um argumento contra, então não podemos realizar nada. E, no entanto, em algum momento, as pessoas pensavam que um xadrez jogando computador seria obviamente inteligente. Agora eles podem, e sabemos exatamente como, e não pensamos que isso seja inteligente. Submarinos ainda não sabem nadar.
Então - considere alguns exemplos.
Desde décadas, temos geradores de analisadores . Você fornece a descrição de um idioma, ele é processado e o resultado é o código para um analisador desse idioma. Sabemos exatamente como é feito, mas isso não é um programa de computador?
Segundo - editores que informam que você cometeu um erro (erro de sintaxe, variável inexistente, etc.). Ele não programa nada, mas pode dizer que você fez algo errado. É muito apenas na superfície.
Idiomas nos quais você pode simplesmente clicar e arrastar os controles da interface do usuário, e o código que realmente os fará funcionar é gerado automaticamente.
Compiladores JIT. Software que pode reconhecer pontos ativos no software atualmente em execução e substituir alguns deles por código compilado altamente otimizado, otimizando-se efetivamente enquanto é executado. Penso que este é um exemplo do que pode parecer ser uma máquina programada em si, até que você saiba exatamente como isso acontece, e acaba fazendo o que o programador mandou, como sempre.
Jogo geral. Esse é um campo interessante de pesquisa, no qual os pesquisadores escrevem programas que podem ler descrições das regras dos jogos, que os programas jogam um contra o outro. Portanto, em vez de um programa do jogo da velha ou um programa de xadrez, esses são programas que lêem as regras do jogo da velha ou do xadrez ou algum novo jogo criado no local e podem ser jogados. O programa não está programando sozinho, mas joga xadrez sem que as regras do xadrez tenham sido codificadas. Houve um tempo em que isso seria claramente considerado como o computador ensinando algo a si mesmo.
Demos vários pequenos passos na direção geral.
Mas não consigo pensar em nenhum programa que se reescreva com base nos resultados de execuções anteriores ou que reconheça rotinas obsoletas ou ineficientes em seu próprio código. Acho que um dia teremos isso, e não consideraremos nada de especial, pois será apenas um recurso do compilador mais recente ...