Dopo aver imparato a scrivere, l’intelligenza artificiale ora sta imparando a programmare. L’anno scorso abbiamo visto la nascita di GitHub Copilot, un sistema AI basato sul modello linguistico GPT-3 di OpenAI. Qualche settimana fa l’inglese DeepMind ha rilasciato AlphaCode, un altro modello AI in grado di scrivere codice, riuscendo a posizionarsi a metà classifica in una competizione per programmatori. Quale sarò il futuro di questi sistemi? Oggi ancora non riescono a rimpiazzare gli sviluppatori in carne e ossa, ma la strada sembra tracciata e nei prossimi anni potremmo assistere a problemi di impiego anche per quella che ancora oggi viene considerata la professione del futuro.
I problemi dei grandi modelli linguistici
I grandi modelli linguistici (LLM, large language models) come GPT-3 stanno rivoluzionando l’interazione fra esseri umani e macchine, consentendo a queste ultime di comprendere gli ordini e le intenzioni delle persone. Gli esempi sono molti e li abbiamo già affrontati in numerosi articoli su questo sito, basterebbe pensare ai chatbot o ai comandi vocali impartiti agli assistenti digitali.
Uno dei problemi di molti LLM, tuttavia, è quello di restituire con precisione risultati esatti di una certa operazione, come possiamo vedere nei seguenti esempi creati appositamente per questo articolo (le risposte del LLM sono evidenziate in verde).
Nonostante GPT-3 abbia compreso l’operazione e si sia avvicinato al risultato, non ha restituito il numero esatto (-7.7639320225002103035908263312687).
Qui il LLM ha deciso arbitrariamente di integrare la nostra domanda aggiungendoci “del duemila”, cosa che noi non avevamo chiesto. Ma anche così il risultato non è stato soddisfacente, poiché ha generato i primi venti anni del Duemila anziché l’istruzione richiesta.
Nonostante i problemi, è evidente che ci sono molti presupposti per poter creare uno strumento adatto a compiere operazioni precise, bisogna solo trovare il modo per evitare che i LLM escano fuori dal seminato. Alcune squadre di ricercatori negli ultimi tempi si sono concentrate nel creare LLM che siano in grado di programmare software. Come si può ben immaginare, realizzare codice è un compito dove è richiesta estrema precisione e attenzione: un solo carattere sbagliato potrebbe causare il malfunzionamento di tutto il programma. LLM che restituiscono numeri errati o risposte completamente sbagliate non potrebbero mai essere dei buoni sviluppatori di codice.
2021: GitHub Copilot
L’anno scorso OpenAI, l’azienda di San Francisco che ha sviluppato GPT-3, ha lanciato un prodotto chiamato GitHub Copilot. Sviluppato in collaborazione con GitHub (Microsoft, proprietaria di GitHub, nel 2019 investì un miliardo di dollari in OpenAI), Copilot si può considerare come una versione di GPT-3 addestrata su miliardi di righe di codice pubblico disponibile sulla piattaforma di Microsoft, usata da oltre settanta milioni di sviluppatori in tutto il mondo.
Copilot, in sostanza, genera suggerimenti per il file che si sta modificando, basandosi sia sui commenti all’interno del file, sia sul codice scritto in precedenza. A volte è sufficiente il nome della funzione o anche di parte della funzione per generare il resto del codice.
Ma Copilot, come suggerisce il nome, non mira a rimpiazzare lo sviluppatore umano, bensì ad assisterlo come un fedele co-pilota. Il modello AI non è in grado di scrivere programmi interamente da solo, non quando la qualità del codice o semplicemente il corretto funzionamento del programma sono fattori importanti. Inoltre, poiché il modello AI è stato addestrato con repository pubblici, potrebbe suggerire frammenti di codice provenienti da vecchi moduli o da vecchie librerie, rischiando così di inserire codice obsoleto nel programma. Tuttavia, le sue funzioni sono utili per aiutare gli sviluppatori a superare passaggi tediosi o per suggerire soluzioni a cui non avevano pensato.
2022: AlphaCode
Qualche settimana fa anche DeepMind (che, lo ricordiamo, fa parte della galassia Google) è scesa in campo con il suo LLM in grado di scrivere codice. Lo ha fatto in perfetto stile DeepMind, ovvero presentando i risultati ottenuti da una competizione. AlphaCode, questo il nome del modello AI, è stato messo alla prova su dieci recenti prove di programmazione su Codeforces, un sito web che ospita concorsi di programmazione competitivi mantenuto da un gruppo di sviluppatori dell’Università ITMO di San Pietroburgo, in Russia. AlphaCode ha risolto diversi problemi di programmazione che necessitavano di logica, generazione di algoritmi, pensiero critico, comprensione del linguaggio naturale e ovviamente sviluppo di codice. AlphaCode, come dimostrato dai risultati, si è piazzato nel 54% superiore dei concorrenti. O in altre parole, si è posizionato a metà classifica.
Non facciamoci ingannare dal punteggio apparentemente tutt’altro che sbalorditivo. Raggiungere autonomamente la parte media della classifica nella risoluzione di problemi di programmazione da una parte significa che AlphaCode ha attualmente le capacità di uno sviluppatore mediocre, ma allo stesso tempo rappresenta un risultato finora inarrivabile per altri LLM e che lascia ben sperare per il futuro. Sottovalutare questo risultato, come commentava uno sviluppatore, sarebbe come insegnare a un cane a parlare la nostra lingua, per poi lamentarsi del fatto che non ha conseguito un eloquio raffinato. Non dovremmo concentrarci sulla proprietà di linguaggio, dovremmo concentrarci sul fatto che un cane ha imparato a parlare. Da questo punto di vista, il 54% raggiunto da AlphaCode può essere considerato un risultato straordinario.
Fonte Deepmind
AlphaCode si basa sull’architettura Transformer, il che dimostra la fondatezza della nostra terza previsione per il 2022, e come Copilot anch’esso è stato addestrato su codice pubblico reperito da GitHub. AlphaCode però è stato successivamente messo a punto su un piccolo dataset composto da programmi usati nelle competizioni. Nella fase di valutazione, poi, per ogni problema venivano generati tantissimi programmi in C++ e in Python, che infine venivano filtrati e raggruppati. Da questi gruppi sono state successivamente selezionate dieci soluzioni per una valutazione esterna, in una procedura non del tutto dissimile da quello che si fa in una competizione di programmazione.
Al momento, dunque, AlphaCode è un buon candidato per risolvere gare di programmazione, ma questo non vuol dire che sia adatto a sostituire gli sviluppatori in un’azienda. Questi modelli, e qui includiamo anche Copilot, non sono in grado di affrontare le molteplici complessità legate all’ingegneria del software, quali per esempio la pianificazione, la gestione del ciclo di vita o anche solo la qualità del codice (non è raro che un LLM suggerisca codice con bug).
Come se non bastasse, il codice generato da una procedura automatica tende a essere inutilmente gonfiato. Una delle qualità di un buon sviluppatore è quella di arrivare al risultato con meno codice. Soluzioni considerate eleganti sono quelle che richiedono poche ed efficaci righe di programmazione. Se lasciati fare, invece, i LLM addestrati per generare codice finiscono per usarne più di quanto ce ne sarebbe davvero bisogno. Il che può non rappresentare un problema se tutto quello che vogliamo è un software che funzioni, ma per un’azienda ritrovarsi con il 10% o il 20% di codice in più nei propri programmi potrebbe rappresentare una spesa ingiustificata fra manutenzione, gestione e debugging.
Conclusioni
Come per moltissime altre innovazioni di intelligenza artificiale, la drastica sostituzione dei ruoli umani è ancora molto lontana nel tempo. Nessuno sviluppatore dovrebbe perdere la voglia o l’entusiasmo di programmare solo perché stanno arrivando i LLM che creano codice, così come nessuno scrittore sta perdendo la voglia di scrivere solo perché GPT-3 ha imparato a mettere qualche parola in fila.
Tuttavia, da questa innovazione possiamo trarre importanti conclusioni. Anzitutto, nel breve termine i potenziamenti derivanti dall’intelligenza artificiale saranno d’aiuto a chi oggi sviluppa codice, vuoi per velocizzare alcuni passaggi tediosi, vuoi per trovare soluzioni a problemi dove da soli non si riusciva a venirne a capo. Il risultato è che gli attuali sviluppatori hanno una funzione in più su cui poter contare, una specie di Stack Overflow integrato nell’IDE.
Questa stessa facilitazione, tuttavia, a medio termine si ripercuoterà sugli stessi sviluppatori, perché se saranno in grado di svolgere da soli il lavoro di due o tre persone, le aziende prenderanno nota. Se di colpo spunteranno fuori team di sviluppatori che, grazie a un massiccio e sapiente uso di questi sistemi AI, riusciranno a svolgere lo stesso lavoro a costi nettamente inferiori, il mercato potrebbe farsi più difficile per gli sviluppatori “tradizionali”.
A lungo termine, invece, potrebbero emergere modelli AI in grado di sostituire effettivamente gli sviluppatori per i compiti più semplici. Già oggi alcune piattaforme no-code sono così avanzate da aver ridotto la necessità da parte delle aziende di ricorrere a sviluppatori in carne e ossa. In un futuro, non si sa quanto lontano, resteranno sicuramente posizioni e opportunità per sviluppatori bravi e creativi, ma non è chiaro quanto spazio vi sarà per tutti gli altri.