L’intelligenza artificiale e il futuro dello sviluppo software
Lo sviluppo software guidato dall’intelligenza artificiale non è più un sogno futuristico. Con GitHub Copilot, più di 1,2 milioni di sviluppatori si affidano già all’intelligenza artificiale per generare codice, facendo risparmiare tempo (e denaro) alle loro aziende. Ma mentre tendiamo a concentrarci su Copilot per le sue impressionanti, anche se ancora nascenti, capacità di generazione di codice, ci sono opportunità ancora migliori e di più immediato impatto per l’intelligenza artificiale e i modelli linguistici di grandi dimensioni (LLM) nello sviluppo del software.
Basta chiedere a Jaana Dogan, illustre ingegnere software di GitHub. Secondo Dogan, “le persone si concentrano troppo sulla generazione di codice e ignorano completamente che gli LLM sono utili per l’analisi del codice”. In altre parole, gli sviluppatori esperti dovrebbero considerare di utilizzare lo sviluppo di software basato sull’intelligenza artificiale non tanto per la creazione di codice, quanto per la revisione dello stesso.
Gli sviluppatori sanno che dovrebbero testare il loro codice. Tuttavia, i test del software (e lo sviluppo guidato dai test) sono più discussi che eseguiti. Gli sviluppatori potrebbero non avere l’obiettività necessaria per testare efficacemente il proprio codice, oppure semplicemente lo trovano un processo macchinoso e lento. Dai test unitari ai test di integrazione, fino ai test di regressione, esistono diversi modi per eseguire i test, ma tutti hanno un costo e tendono a rallentare lo sviluppo, o almeno così sembra. I risultati dello sviluppo a breve termine probabilmente rallenteranno, ma un buon testing porta a risultati più rapidi e a lungo termine.
Naturalmente, puntare sulla velocità di sviluppo a scapito dell’impatto è una pessima idea. L’obiettivo di ogni sviluppatore di software non dovrebbe essere quello di scrivere molto codice, ma di scriverne il meno possibile con il massimo impatto. I test sono un modo essenziale per garantire che ciò avvenga. È qui che gli LLM alla base di strumenti come Copilot possono avere un impatto enorme. Molti sviluppatori non amano fare il lavoro noioso ma necessario del testing del software. E se l’intelligenza artificiale potesse occuparsene al posto vostro?
Trovare i difetti
Gli LLM possono aiutare a creare codice generando, ad esempio, codice boilerplate, in modo che gli sviluppatori possano concentrarsi su codice di maggior valore, ma in questa fase può essere un po’ snervante dipendere dall’IA. Come ha sottolineato Ben Kehoe, ex ricercatore di robotica cloud per iRobot, “molte delle proposte sull’intelligenza artificiale affermano che l’IA sarà in grado di assumersi l’intera responsabilità di un determinato compito per una persona”. Uno sviluppatore esperto può sentirsi a proprio agio nel lasciare che gli LLM generino codice al posto suo, in quanto avrà l’esperienza necessaria per capire quando l’IA potrebbe sbagliare. Per quanto riguarda invece gli sviluppatori meno esperti, gli LLM possono portarli in situazioni in cui si affidano alle macchine senza però rendersi conto di avere ancora la responsabilità di quel lavoro.
La revisione del codice da parte degli LLM, invece, comporta meno rischi. “Personalmente, sono rimasto sorpreso di quanto siano stati utili gli LLM nell’identificare casi di test mancanti e persino nel dirmi cosa c’è di sbagliato nella mia policy IAM”, osserva Dogan. Questo non significa però che siano perfetti. “Gli LLM non sono poi molto utili per suggerire ottimizzazioni e non lo sono nemmeno per eliminare o ripulire il codice”.
Tuttavia, possono aiutare uno sviluppatore a individuare più efficacemente i problemi nei linguaggi con cui ha meno dimestichezza; ad esempio, uno sviluppatore Java potrebbe usare l’LLM per rivedere il codice Go. Inoltre, gli LLM possono essere utili per “navigare in piccoli blocchi di codice o in algoritmi specifici con cui non ho familiarità”, continua Dogan. L’intelligenza artificiale non toglierà il lavoro agli sviluppatori di software. Non a breve, comunque. Se fatta nel modo giusto, l’IA può anzi aiutare gli sviluppatori a diventare molto più bravi nel loro lavoro.
In sintesi, gli LLM, nello specifico, e l’IA, in generale, possono integrare il lavoro degli sviluppatori. L’ingegno umano non può essere sostituito, ma alcuni dei compiti più noiosi come i test saranno sempre più assunti dalle macchine, in modo da consentire agli sviluppatori di dedicare più tempo a essere… umani.