È difficile rispondere perché, proprio come con l'intelligenza artificiale, una volta raggiunto questo obiettivo, sarà perché avremo scritto un programma che lo fa. E i critici diranno: "beh, questa macchina non è propriamente programmata! Segue esattamente il programma che gli hai dato!"
Ebbene si. Qualunque cosa avremo mai realizzato con i computer, lo faremo assegnandogli un programma e lo eseguirà. Se questo è un argomento contro, allora non possiamo realizzare nulla. Eppure, a un certo punto, la gente pensava che giocare a scacchi con il computer sarebbe stato ovviamente intelligente. Ora possono, e sappiamo esattamente come, e non pensiamo che sia intelligente. I sottomarini non possono ancora nuotare.
Quindi, prendi in considerazione alcuni esempi.
Da decenni abbiamo generatori di parser . Dai loro una descrizione di una lingua, essa viene elaborata e il risultato è codice per un parser per quella lingua. Sappiamo esattamente come è fatto, ma non è un computer che si programma da solo?
Secondo editor che ti dice che hai commesso un errore (errore di sintassi, variabile non esistente, ecc.). Non programma niente da solo, ma può dirti che hai fatto qualcosa di sbagliato. È molto solo in superficie.
Lingue in cui puoi semplicemente fare clic e trascinare i controlli dell'interfaccia utente e il codice che li renderà effettivamente operativi viene generato automaticamente.
Compilatori JIT. Software in grado di riconoscere gli hotspot nel software attualmente in esecuzione e sostituirlo con un codice compilato altamente ottimizzato, ottimizzandosi efficacemente durante l'esecuzione. Penso che questo sia un esempio di ciò che può sembrare una macchina di programmazione stessa, finché non si sa esattamente come accade, e poi si scopre che sta facendo semplicemente quello 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 l'uno contro l'altro. Quindi, invece di un programma di tic-tac-toe o di un programma di scacchi, questi sono programmi che leggono le regole del tic-tac-toe o degli scacchi o del nuovo gioco inventato sul posto e possono quindi riprodurli. Il programma non sta programmando da solo, ma gioca a scacchi senza che le regole degli scacchi siano state codificate. C'è stato un tempo in cui questo chiaramente è stato considerato come l'insegnamento del computer stesso.
Abbiamo fatto molti piccoli passi nella direzione generale.
Ma non riesco a pensare a nessun programma che riscrivi 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, poiché sarà solo una caratteristica dell'ultimo compilatore ...