Si credeva che formarsi nella programmazione fosse una scelta lungimirante. Ma anche qui l’IA potrebbe aver scombinato i nostri piani
Un paio di anni fa Jensen Huang, Ceo di Nvidia, durante una fiera informatica annunciò l’inizio di una “nuova era” che avrebbe cambiato il nostro rapporto con i computer in generale, e con il ruolo di programmatori in particolare: “Tutti possono essere programmatori: devono solo chiedere all’Intelligenza Artificiale”. Al di là dei conflitti di interesse – Nvidia produce microchip molto richiesti per i sistemi IA – resta il fatto che dopo Huang altri informatici hanno fatto previsioni simili sul modo in cui cambierà il mondo di chi sviluppa software.
Ma è davvero così? La professione di programmatore è destinata a scomparire? Lo abbiamo chiesto a Gabriele Bavota, Professore ordinario presso la Facoltà di scienze informatiche dell’Università della Svizzera italiana, presso la quale si occupa tra le altre cose proprio di software (ingegneria, analisi e sviluppo) ed è principal investigator di DEVINTA, un progetto che si prefigge di gettare le basi per una nuova generazione di sistemi per sviluppatori, basati su assistenti di Intelligenza Artificiale (IA) in grado di fornire loro supporto.
Prof. Gabriele Bavota
Professor Bavota, quali sono oggi i problemi di un programmatore?
Il problema principale è la complessità dei sistemi software. Pensiamo a Windows: la prima versione aveva circa 2 milioni di linee di codice (un’istruzione che diamo al computer, ndr), dopo 10 anni ne aveva 10 milioni, dopo 15 anni 50 milioni... È rarissimo trovare un software che evolvendo si rimpicciolisce. Oggi ci sono milioni di componenti che interagiscono tra loro: uno sviluppatore deve essere in grado di affrontare questa complessità, in modo da mantenere e far evolvere sistemi che utilizzano un mix di tecnologie e di linguaggi di programmazione.
Ci riusciamo?
È una necessità. Ci sono sistemi che sono stati scritti 40 anni fa e che nessuno ha il coraggio di riscrivere perché sono affidabili e perché costerebbe molto. Sono scritti in linguaggi non più molto utilizzati, ma può sorgere la necessità di aggiungervi nuove funzionalità. Abbiamo quindi bisogno di sviluppatori in grado di programmare in COBOL, un linguaggio progettato negli anni 60, così come in Java, oggi molto più popolare, ma anche in linguaggi futuri che ancora non abbiamo inventato.
Oggi gli studenti che vogliono diventare i programmatori di domani non devono essere formati per scrivere piccoli programmi come una calcolatrice o per creare una semplice app per il cellulare, ma per affrontare la complessità dei sistemi software moderni. All’USI abbiamo una forte specializzazione nell’ingegneria del software.
Ossia?
È un po’ come costruire un ponte: non iniziamo impilando mattoni, prima bisogna progettarlo. Con i software è la stessa cosa, per cui dobbiamo capire quali sono le componenti che ci servono, quali i requisiti funzionali (cosa deve fare) e quali quelli non funzionali (performance, sicurezza…). Dopodiché si sceglie l’architettura, si decide come testarlo, come trovare eventuali bug (altra grande sfida): solo in seguito inizia la vera e propria fase di scrittura del codice. Insegniamo a sviluppare un sistema dal suo concepimento quale idea fino alla sua realizzazione, le metodologie per mantenerlo, farlo evolvere e documentarlo (se lo scrivo e non lascio traccia, come fa chi arriverà dopo di me a capire come è fatto?). Dietro un software c’è un mondo: scrivere la prima versione del codice è solo il 10% del lavoro.
In cosa vi aiuta e che problemi vi dà l’Intelligenza Artificiale?
Oggi l’IA è in grado di supportare gli sviluppatori nello scrivere il cosiddetto codice boilerplate, un codice ripetitivo che si trova in diversi sistemi software. Pensiamo alla funzionalità di login: nel 90% delle app dobbiamo creare il profilo utente, la password e il sistema per recuperarla, cambiarla eccetera. Grazie all’Intelligenza Artificiale si risparmia tempo e si aumenta la produttività generando automaticamente funzionalità come questa. Tuttavia, quando si passa a problemi complessi o nuovi non c’è storia: l’IA difficilmente ci aiuterà; può scrivere una linea di codice, qualche pezzettino, ma poi sta al programmatore.
L’IA non è in grado di fare di più?
Abbiamo osservato che l’IA fornisce soluzioni plausibili, che però spesso contengono bug e difetti. L’IA al momento è in grado di risolvere problemi semplici, che richiedono poche centinaia di righe di codice; un software però ne contiene milioni: questo ci fa capire quanto siamo lontani dall’avere un’IA che possa realizzare un programma complesso autonomamente. E poi elaborarlo è una cosa, mantenerlo e farlo evolvere un’altra.
Manutenzione ed evoluzione non dovrebbero essere cose un po’ più semplici, alla portata dell’IA?
Abbiamo osservato che nei progetti open source sempre più persone usano l’Intelligenza Artificiale per scrivere nuove funzionalità; tuttavia, non hanno piena conoscenza di quello che hanno fatto. Questo è appunto l’altro grande problema: quando un’IA sarà in grado di scrivere un codice complesso, chi sarà in grado di farne la manutenzione? Quando subirò un attacco hacker, chi sarà in grado di contrastarlo? Questi sistemi sono utili per migliorare la produttività, supportando i programmatori soprattutto in task di programmazione semplici, ma c’è bisogno di esperti in grado di valutare la qualità di ciò che è prodotto.
Siamo al paradosso di Chomsky: l’Intelligenza Artificiale non è intelligente...
Nessun dubbio che sia in grado di scrivere codici. Ma la vera domanda è: capisce ciò che scrive? Perché l’IA opera tramite un modello statistico, per cui sceglie non la risposta o la sequenza di parole corretta, ma quella più probabile. Per rendere l’idea, abbiamo fatto un semplice test chiedendo a una IA se un programma di poche linee di codice implementava correttamente una funzionalità descritta in inglese: ha sbagliato nel 60% dei casi. Ciò significa che non ha capito ciò che il programma implementava, non ha capito il suo scopo. C’è una netta differenza tra scrivere qualcosa di sensato, come una sequenza di parole che hanno alta probabilità di esistere in un testo (o programma) scritto da umani, e capire se ciò che si è scritto ha senso. Ed è lì, anche, che sta la differenza tra un programmatore formato e uno no.
Quindi il futuro dei programmatori sarà…?
Secondo me formazione avanzata. Nel senso che in futuro i task semplici non richiederanno più un programmatore. Però chi sarà in grado di utilizzare l’IA anche per supportare task complessi, chi sarà in grado di capire ciò che l’IA sta facendo e di correggerla, avrà un grande vantaggio.
Però resta un lavoro di controllo che richiede tempo. Le due cose non si annullano?
Ci sono evidenze contrastanti. Uno studio di Microsoft mostra che i loro sviluppatori sono più produttivi da quando usano l’IA; altri che in realtà si perde tempo e si trovano falle nei programmi, perché gli sviluppatori guidati dall’Intelligenza Artificiale tendono a focalizzarsi su alcune parti del codice e ne perdono l’interezza. Nessuno oggi ha una risposta, né su questo, né sull’impatto che ha l’uso dell’IA sull’acquisizione della conoscenza da parte dei programmatori.
Ovvero, che succede se si lavora su un sistema solo o soprattutto utilizzando l’Intelligenza Artificiale? Si acquisisce la conoscenza di quel sistema oppure si fanno le cose in maniera automatica come l’IA ordina? A lungo termine è un vantaggio o uno svantaggio? Perché è possibile che in un primo momento siamo più produttivi, ma che in realtà, visto che abbiamo acquisito meno competenze, nel tempo lo saremo meno.
Il Ceo di OpenAI ha affermato che tra poco il miglior programmatore al mondo sarà l’Intelligenza Artificiale…
Dipende dalla nozione di miglior programmatore al mondo: è quello che scrive più linee di codice nel minor tempo possibile, oppure quello che le ha progettate, elaborate, testate, controllate… Ribadisco: la scrittura del codice è una piccola parte del lavoro di un programmatore, prima e dopo ci sono decine di altri problemi da risolvere.
Ci sono modelli di IA specifici per l’informatica?
Sì, si prendono dei modelli generici e poi li si specializza. Il problema reale sono i costi per ottenere un qualcosa che sia competitivo con modelli commerciali quali ChatGPT. Infatti, ciò che influisce sulle performance dei modelli di IA è la loro dimensione, che si misura in numero di parametri da imparare durante la fase di addestramento. Si stima che ChatGPT abbia 1’800 miliardi di parametri, il che risulta in costi esorbitanti per l’addestramento del modello, nell’ordine di milioni di dollari. Difficile che un’azienda interessata ad addestrare un proprio modello specializzato per supportare i propri programmatori possa affrontare tali costi. Una delle direzioni della nostra ricerca è però questa: come rendere performanti modelli di piccole dimensioni, magari per aziende che hanno il proprio linguaggio di programmazione, a costi contenuti. La questione è anche come democratizzare l’IA, oggi in mano a pochi.
Quali sono le vostre linee di ricerca?
Siamo stati tra i primissimi a utilizzare l’Intelligenza Artificiale per gli sviluppatori, focalizzandoci principalmente su tre temi: il fixing automatico di bug, la generazione automatica di codice java, e l’automatizzazione di code review. In tutti i casi, abbiamo sfruttato dati collezionati da progetti open source per insegnare all’IA come svolgere questi task complessi. L’automatizzazione di code review, ovvero il processo tramite il quale si ispezionano programmi per trovarne difetti, è stato probabilmente il progetto di maggior successo, ripreso e sviluppato ulteriormente da diversi gruppi di ricerca appartenenti ad altre università e a grandi aziende come Microsoft.
Oggi consiglierebbe ai giovani di diventare programmatori?
Lo consiglierei a patto che si formino e acquisiscano quelle conoscenze che consentiranno loro di affrontare sfide complesse. I modelli di Intelligenza Artificiale oggi esistenti hanno ancora performance bassissime, per cui è impensabile che tra pochi anni scrivano codici completi e facciano manutenzione di sistemi software. Senza dimenticare gli aspetti etici che sottostanno a qualsiasi progetto: chi li decide? L’IA?
Una rubrica a cura di