Computer che si programmano da soli

Una nuova rete neurale rileva somiglianze tra programmi per aiutare i programmatori a scrivere software più veloce ed efficiente.

di Will Douglas Heaven

La programmazione informatica non è mai stata facile. I primi programmatori scrivevano i propri programmi a mano, scarabocchiando simboli su carta millimetrata prima di convertirli in grandi pile di schede perforate che potevano essere elaborate dal computer. Un segno fuori posto ed era tutto da rifare.

Al giorno d’oggi, i programmatori utilizzano una serie di potenti strumenti che automatizzano gran parte del lavoro, dalla rilevazione degli errori durante la digitazione, al test del codice prima che venga distribuito. Per altri versi però, poco è cambiato. Il più banale degli errori può ancora provocare il fallimento di un intero software. E man mano che i sistemi si fanno più complessi, rintracciare questi bug diventa sempre più difficile. “A volte possono essere necessari giorni di programmazione per risolvere un singolo bug”, dichiara Justin Gottschlich, direttore del gruppo di ricerca sul codice macchina presso Intel.

Questo è il motivo per cui alcuni sono convinti che le macchine dovrebbero semplicemente programmare sé stesse. La creazione di codici automatizzati è oggetto di ricerca da diversi anni. Microsoft sta integrando nei propri popolari strumenti di sviluppo di software una capacità di generazione di codice di base, Facebook ha creato un sistema chiamato Aroma che completa automaticamente piccoli programmi e DeepMind ha sviluppato una rete neurale in grado di inventare versioni più efficienti per semplici algoritmi ideati dagli utenti. Anche il modello di linguaggio GPT-3 di OpenAI può sfornare semplici frammenti di codice, come i layout di pagine Web, da istruzioni in linguaggio naturale.

Gottschlich e i suoi colleghi chiamano questa programmazione della macchina. Lavorando con un team di Intel, del MIT e del Georgia Institute of Technology di Atlanta, ha sviluppato un sistema chiamato Machine Inferred Code Similarity, o MISIM, in grado di estrarre il significato di un pezzo di codice: ciò che il codice dice al computer do – più o meno allo stesso modo dei sistemi di elaborazione in linguaggio naturale (NLP) possono leggere un paragrafo scritto in inglese.

Gottschlich e colleghi chiamano questa procedura codice macchina. In una collaborazione che vede coinvolte Intel, MIT e Georgia Institute of Technology di Atlanta, Gottschlich ha sviluppato un sistema chiamato Machine Inferred Code Similarity, o MISIM, in grado di interpretare il significato di un pezzo di codice – le istruzioni che codice invia al computer – più o meno come i sistemi di elaborazione del linguaggio naturale (NLP) sono in grado di leggere un paragrafo scritto in inglese.

MISIM è quindi in grado di proporre forme alternative di scrittura dle codice, suggerendo correzioni e metodi per renderlo più veloce o più efficiente. La capacità dello strumento di capire le intenzioni di un programma consente di identificare altri programmi con obiettivi simili. In teoria, questo approccio potrebbe essere utilizzato anche da macchine capaci di autocodificarsi, attingendo a una serie di programmi preesistenti con una minima supervisione o input umano.

MISIM funziona confrontando frammenti di codice con milioni di altri programmi che noti, tratti da un gran numero di repository online. Innanzitutto traduce il codice in una forma che ne cattura il significato, ma ignora il modo in cui è scritto, in quanto può capitare che due programmi scritti in maniera molto differente abbian lo stesso obiettivo. MISIM utilizza quindi una rete neurale per trovare altri codici di significato simile. In una prestampa, Gottschlich e i suoi colleghi riportano che MISIM è 40 volte più preciso rispetto a sistemi precedenti pensati con lo stesso obiettivo, Aroma incluso.

MISIM rappresenta un emozionante passo avanti, dichiara Veselin Raychev, CTO della società svizzera DeepCode, i cui strumenti per la cattura di bug – tra i più avanzati sul mercato – utilizzano reti neurali addestrate su milioni di programmi per suggerire miglioramenti ai programmatori mentre scrivono. Ma le prestazioni dell’apprendimento automatico nel distinguere un bug da un codice non sono ancora eccezionali, spiega Raychev. È difficile insegnare a una rete neurale come distinguere un errore da un tratto di codice legittimo senza l’intervento umano.

Sono in corso delle ricerche molto interessanti sulle possibilità delle reti neurali profonde nel campo della correzione di bug, dice, “ma nella pratica sono ben lontane dal realizzare i propri obiettivi”. In genere, gli strumenti di riconoscimento dei bug dell’AI producono molti falsi positivi, afferma. MISIM aggira questo problema utilizzando l’apprendimento automatico per individuare somiglianze tra programmi anziché identificare un bug direttamente. Confrontando un nuovo programma con un software esistente già corretto, il sistema può segnalare al programmatore eventuali differenze degne di nota che potrebbero essere errori.

Intel prevede di utilizzare lo strumento come sistema di raccomandazione del codice per i propri sviluppatori, offrendo suggerimenti alternativi per ottenere codici più veloci o più efficienti. Ma poiché MISIM non è legato alla sintassi di un programma specifico, c’è molto di più che potrebbe potenzialmente fare. Ad esempio, potrebbe essere utilizzato per tradurre il codice scritto in una vecchia lingua come COBOL in una lingua più moderna come Python. Ciò è importante perché molte istituzioni, incluso il governo degli Stati Uniti,  fanno ancora affidamento su software scritto in lingue che pochi programmatori sanno ormai mantenere o aggiornare.

Per finire, Gottschlich pensa che questa idea possa essere applicata anche al linguaggio naturale. Combinata con la PNL, la capacità di lavorare con il significato del codice separatamente dalla sua rappresentazione testuale potrebbe un giorno, secondo lui, permettere alle persone di scrivere software semplicemente descrivendo ciò che vogliono fare a parole. “Penso che potremo presto ottenere piccole app per il telefono o altre cose utili per la vita di tutti i giorni”, afferma Gottschlich. “Mi piacerebbe vedere 8 miliardi di persone creare software nella maniera per loro più naturale”.

Immagine di: MS Tech

(lo)

Related Posts
Total
0
Share