GitHub, il popolare sito per la gestione di codici e tra i maggiori repository di software open source al mondo, ha rilasciato la nuova versione in produzione dell’assistente basato su AI chiamato Copilot.
La tecnologia era già in parte disponibile ma con l’ultimo rilascio è possibile interagire con un assistente di intelligenza artificiale capace di assistere ragionando sul codice esistente e contribuendo a generare codice nuovo. Cerchiamo di capire quali sono le novità e le implicazioni del suo uso nello sviluppo del software.
Esaminiamo l’uso di Copilot all’interno di Visual Studio Code, il cui funzionamento è analogo a quello degli altri editor.
Indice degli argomenti
Usare GitHub Copilot
GitHub Copilot richiede, come succede spesso per le tecnologie basate su AI generativa, una licenza specifica, che per sviluppatori indipendenti costa circa 100$ all’anno, la metà circa della licenza per i business (è importante notare come per docenti e studenti di istituti che hanno aderito all’iniziativa campus di GitHub la licenza è gratuita). È possibile anche attivare una versione di prova del servizio per poterne provare le capacità.
Copilot può essere utilizzato all’interno di editor molto diffusi sia proprietari come Visual Studio che open come Visual Studio Code. Copilot può inoltre essere utilizzato all’intero della command line di GitHub (il comando gh).

La prima cosa da fare è installare l’estensione Copilot all’intero di Visual Studio Code cercandola nel marketplace delle estensioni. Vanno installate due estensioni:
- GitHub Copilot
- GitHub Copilot Chat

Alla prima esecuzione le estensioni richiedono l’account GitHub per poter attivare la funzione.
Per fare qualche esempio ho creato un progetto ASP.NET MVC:
dotnet new mvc -o copilottest
Aprendo il file HomeController.cs generato nello scheletro di applicazione appare il codice C# dell’applicazione. Selezionando la vista della chat di Copilot è possibile fare domande sul codice, come ad esempio chiedere spiegazione su un frammento di codice come nel seguente esempio:

È interessante come sia possibile anche richiedere la modifica del codice, come ad esempio generare i commenti del codice:

L’assistente mostra il codice generato e si può decidere se consolidarlo nel sorgente vero e proprio. È possibile chiedere anche la scrittura di codice a partire da una specifica espressa in base a un requisito. Nel seguente esempio abbiamo chiesto di aggiungere una URL all’applicazione Web che consenta di sommare due numeri usando i parametri della richiesta nel Web browser; il Copilot propone il codice spiegandone il funzionamento:

Copilot funziona anche proponendo un completamento del codice che si sta scrivendo basandosi sul contesto. Se vogliamo aggiungere un metodo capace di sottrarre due numeri possiamo cominciare a scrivere e non appena l’assistente comprende l’intenzione propone il completamento corretto:

Ma come funziona GitHub copilot ?
Ormai sappiamo bene che addestrare un’intelligenza artificiale generativa richiede grandi moli di dati che saranno usati dalla rete neurale per apprendere la struttura dei dati in input che saranno poi usati per generare nuova informazione. Anche nel caso di GitHub Copilot l’addestramento è stato effettuato utilizzando l’enorme base di codice ospitata dalla piattaforma, patrimonio che ha portato Microsoft ad acquisirla a giugno 2018.
Il nodo del copyright
Anche nel caso di GitHub copilot si pone il problema se l’addestramento dell’AI generativa rientri nel cosiddetto FAIR use dei sorgenti, oppure l’AI abbia ottenuto informazioni protette da copyright per fare business. Non è un caso che molte aziende abbiano proibito l’uso di queste tecnologie nella paura che la proprietà intellettuale possa essere messa a rischio. Va però detto che la produttività aumenta così tanto che molti dipendenti cercano di aggirare le restrizioni imposte pur di beneficiarne. L’evoluzione del quadro giuridico sul perimetro di addestramento dell’intelligenza artificiale e la tutela della proprietà intellettuale contribuiranno a determinarne l’uso, anche se sicuramente l’impiego nella scrittura di codice aperto non può che beneficiare, anche perché l’assistente tende a proporre schemi di programmazione che tendono a seguire le best practices offrendo spesso spunti al programmatore che contribuiscono alla propria crescita come sviluppatore.
GitHub Copilot ha usato il modello Codex di OpenAI, ma non è chiaro come la collezione sia aggiornata al passare del tempo, anche se è presumibile che ci si limiti ad usare codice con licenza aperta per ridurre il rischio di contenzioso legale. Alcuni sostengono che comunque anche l’uso dei codici aperti al fine di addestrare una AI vada oltre i termini della licenza, ma ad oggi i tentativi di sostenere questa tesi non hanno prodotto risultati significativi.
L’AI e la cybersecurity
L’uso di codice generato da un’intelligenza artificiale tende ad alterare il processo di verifica degli aspetti non funzionali come, ad esempio, quelli della cybersecurity: come sappiamo che il codice proposto non si riveli insicuro? Si tratta di una questione di non poco conto, da una parte l’AI potrebbe aver appreso pattern di programmazione molto usati ma insicuri (magari non ancora noti), dall’altra il programmatore è davvero capace di prestare attenzione a tutti i dettagli senza concentrarsi solo sulla realizzazione delle funzionalità?
Come sempre la qualità del codice dipenderà dallo spirito critico del programmatore e nell’uso che intende fare dei suggerimenti dell’AI. Se si accettano pattern e algoritmi che non si conoscono e non si comprendono è possibile che il codice risultante sia non corretto o vulnerabile, d’altra parte la conoscenza dell’AI è tale da superare le conoscenze di un programmatore medio probabilmente suggerendo pattern più corretti e sicuri dettati dalla conoscenza degli esperti.
Sarà cruciale che i processi che verificano l’integrità e la correttezza dei programmi scritti verifichino attentamente il risultato mediante tecniche di testing per assicurare che si comporti secondo le specifiche e le attese.
Va anche detto che Copilot può essere utilizzato per valutare le proprietà del codice, chiedendo l’analisi sia in termini di correttezza che di sicurezza, questa possibilità abbatte i costi di verifica di codici sorgenti, anche vecchi, contribuendo ad individuarne potenziali vulnerabilità.
Ecco un esempio di richiesta di valutazione che produce alcune raccomandazioni del tutto ragionevoli nel semplice progetto usato:

I programmi si scriveranno da soli?
Ci si potrebbe interrogare sul fatto di quale sia il ruolo del programmatore in un mondo in cui un programma (Copilot) scrive altri programmi. In realtà la cosiddetta “metaprogrammazione” ovverosia la scrittura di programmi da parte di altri programmi è una disciplina vecchia quanto l’informatica: un compilatore non è altro che un programma che, dato un codice sorgente scritto in un linguaggio di programmazione, genera il codice macchina equivalente a quel programma. Quello che l’AI porta quindi è semplicemente la capacità di generare una bozza di algoritmo, ma non sostituisce, almeno per ora il programmatore, quantomeno colui che è in grado di comprendere il codice generato.
Le figure professionali a rischio
Esistono però figure professionali a rischio: i programmatori di siti Web, ad esempio, non sviluppano codice complesso e normalmente non hanno abbastanza conoscenze per apprezzarne le sofisticazioni. Il codice che scrivono è spesso abbastanza semplice e regolare ed assolutamente generabile dall’intelligenza artificiale.
È quindi lecito aspettarsi una diminuzione nella richiesta di programmatori di applicazioni (grazie alla produttività aumentata con l’AI generativa). Allo stesso tempo saranno richieste maggiori competenze a questi programmatori in modo da non subire il codice generato dal processo ma poterne governare lo sviluppo in modo consapevole.
Come Copilot cambia il rapporto con la scrittura di codice
Personalmente uso Copilot da oltre un anno e posso dire che è cambiato molto il mio rapporto con la scrittura di codice: è aumentata significativamente la mia produttività, riesco a commentare il codice (o meglio, a chiedere di commentare all’AI), e riesco ad automatizzare la scrittura del codice di “plumbing” ovverosia quel codice noioso da scrivere, sempre uguale, ma necessario al funzionamento di un programma. Riesco anche a concentrarmi di più sugli aspetti critici dei sistemi che sviluppo lasciando i dettagli all’automazione dell’AI generativa. Quello che non smette mai di sorprendermi è come l’AI sia capace di adattarsi al mio stile di programmazione, mimando il mio modo di dare nomi alle variabili e agli altri oggetti del programma. Non si tratta quindi solo di scrivere codice corretto ma anche di generare codice che sia comprensibile per poter essere manutenuto in futuro.
Conclusioni
Quindi se si è programmatori è bene investire sulle proprie competenze senza cercare scorciatoie, perché saranno le competenze nella programmazione a caratterizzare il mercato del lavoro nel futuro.