È difficile rispondere perché, proprio come con l'intelligenza artificiale, una volta che lo avremo fatto sarà perché avremo scritto un programma che lo fa. E i critici diranno: "beh, questa macchina non sta davvero programmando se stessa! Segue semplicemente esattamente il programma che gli hai dato!"
Beh si. Qualunque cosa riusciremo mai a realizzare con i computer, lo faremo dandogli un programma e lo eseguirà. Se questo è un argomento contrario, allora non possiamo realizzare nulla. Eppure, a un certo punto, la gente pensava che un computer che giocava a scacchi sarebbe stato ovviamente intelligente. Ora possono, e sappiamo esattamente come, e non pensiamo che sia intelligente. I sottomarini non sanno ancora nuotare.
Quindi, considera alcuni esempi.
Da decenni disponiamo di generatori di parser . Dai loro una descrizione di una lingua, viene elaborata e il risultato è il codice per un parser per quella lingua. Sappiamo esattamente come è fatto, ma non è un computer a programmare da solo?
Secondo: editor che indicano che hai commesso un errore (errore di sintassi, variabile inesistente, ecc.). Non programma nulla di per sé, ma può dirti che hai fatto qualcosa di sbagliato. È molto solo in superficie.
Lingue in cui è possibile semplicemente fare clic e trascinare i controlli dell'interfaccia utente e il codice che li farà effettivamente funzionare viene generato automaticamente.
Compilatori JIT. Software in grado di riconoscere gli hotspot nel software attualmente in esecuzione e sostituirne parte con codice compilato altamente ottimizzato, ottimizzandosi efficacemente durante l'esecuzione. Penso che questo sia un esempio di ciò che può sembrare una macchina programmatrice stessa, fino a quando non sai esattamente come succede, e poi si scopre che sta facendo ciò che il programmatore gli ha detto, come sempre.
Gioco generale. Questo è un campo di ricerca interessante, in cui i ricercatori scrivono programmi in grado di leggere le descrizioni delle regole dei giochi, che i programmi giocano uno contro l'altro. Quindi, invece di un programma tic-tac-toe o di un programma di scacchi, si tratta di programmi che leggono le regole del tic-tac-toe o degli scacchi o di un nuovo gioco inventato sul posto, e possono quindi giocarli. Il programma non sta programmando se stesso, ma gioca a scacchi senza che le regole degli scacchi siano state codificate. C'è stato un tempo in cui questo sarebbe stato chiaramente considerato il computer che insegnava a se stesso qualcosa.
Abbiamo fatto molti piccoli passi nella direzione generale.
Ma non riesco a pensare a nessun programma che si riscriva in base ai risultati di precedenti esecuzioni o che possa riconoscere routine obsolete o inefficienti nel proprio codice. Penso che un giorno lo avremo e non lo considereremo affatto speciale, in quanto sarà solo una caratteristica dell'ultimo compilatore ...