Code, Learn

GitHub Copilot: ne vale la pena?

13 Dicembre 2022 - 7 minuti di lettura

Da circa un mesetto ho iniziato a usare e sperimentare GitHub Copilot, in questo articolo vorrei condividervi i miei pensieri e le mie considerazioni in merito.

Cos’è GitHub Copilot?

Copilot viene raccontato come un “pair programmer artificiale”, o meglio un compagno per la scrittura di codice. Stiamo sostanzialmente parlando di uno strumento per l’autocompletamento del codice basato su OpenAI Codex, un modello d’Intelligenza Artificiale di tipo GPT-3 (Generative Pre-trained Transformer 3), un’IA addestrata per il completamento di testi esclusiva per lo sviluppo di software.

Funzionamento

OpenAi Codex è stato allenato utilizzando miliardi di righe di codice proveniente da repository pubblici e open source. Per questo motivo Copilot è in grado di fornire suggerimenti per un’infinità di linguaggi, anche se la loro qualità potrebbe variare a seconda della disponibilità di codice scritto. Più un linguaggio, o un framework, è utilizzato in repository open source, e più Copilot genererà suggerimenti di qualità nettamente superiore rispetto a quelli meno utilizzati.

I suggerimenti sono contestualizzati a partire dal contenuto del file su cui si sta lavorando e ai file correlati. Il tool userà questi contenuti e la posizione del cursore come input, per cercare di predire che cosa il programmatore vorrà scrivere successivamente.

Come si installa GitHub Copilot?

Copilot è disponibile per diversi IDE di sviluppo, io l’ho installato sia in Webstorm (adatto per scrivere codice JavaScript), sia in Rider (ideale per .NET e C#) ed è stata un’operazione molto semplice. Dopo essermi registrato alla prova gratuita, ho cercato “GitHub Copilot” nella sezione dei plugin, l’ho installato e in ultimo l’ho collegato al mio account GitHub.

Potrete iniziare a usare il tool non appena vedrete comparire la seguente icona nella sezione in basso a destra dell’IDE.

Lasciatemi fare una nota doverosa inerente all’abbonamento: prima di tutto si deve procedere a definire un piano (mensile da 10€ oppure annuale al costo di 100€) e a fornire i dati della carta di credito. La prova gratuita dura 60 giorni, dopodiché si attiverà automaticamente il piano scelto, con addebito diretto sulla carta inserita. La disdetta è un’opzione valida in qualsiasi momento e se si annulla la prova prima dello scadere dei 60 giorni non si paga nulla.

“Tips & Tricks”

Dal momento che lo scopo di GitHub Copilot è completare il codice che si sta scrivendo, con un poco di pratica si possono ingegnerizzare gli input per ottenere diverse funzionalità e vantaggi.

Codice autogenerato da un commento

Se si scrive un commento dichiarando ciò che si vuole fare, Copilot sarà in grado di comprenderlo e scrivere un algoritmo che lo traduca in codice.

Proposte di traduzione in un’altra lingua

Sebbene Copilot sia in grado di completare il codice in diverse lingue, usando l’inglese sarà più accurato dato che la grande maggioranza del codice con cui è stato allenato il modello OpenAI Codex è stato scritto in inglese. È comunque possibile sfruttare lo strumento per un caso comune, le traduzioni. Qualora si dovessero gestire i testi di una applicazione in diverse lingue, creando quindi tante coppie “variabile-testo”, Copilot sarebbe in grado di suggerire le traduzioni dei testi associati alle variabili.

Supporto al TDD

Sapevate che Copilot è ottimo quando si sviluppa seguendo l’approccio Test-Driven Development? Io no, e ne sono rimasto estremamente sorpreso. Se si scrivesse un test in un file e si iniziasse a scrivere il nome della funzione testata, il tool sarebbe in grado di scrivere una funzione che faccia passare quel test. È la stessa dinamica che avviene quando scriviamo un commento, ma, per la natura del test e della precisione delle informazioni che fornisce, lo strumento sarà molto più accurato. Ovviamente è in grado di fare anche l’inverso, ossia scrivere i test di una funzione già scritta, o addirittura proporre dei nuovi test sulla base della funzione.

GitHub Copilot Labs

Per gli utilizzatori dell’IDE Visual Studio Code esiste Copilot Labs, un’estensione molto interessante che permette di sfruttare lo strumento per la traduzione del codice in diversi linguaggi e persino per spiegarlo in lingua comune! Immaginate voi quanto possa essere utile per navigare una nuova codebase oppure per un programmatore alle prime armi che sta imparando da solo. Purtroppo Copilot Labs non è disponibile per gli IDE IntelliJ, ma sono convinto che arriverà a breve. In ogni caso le funzionalità rimangono le stesse anche senza Labs, è sufficiente un minimo di “prompt engineering“.

GitHub Copilot – I miei “Pros & Cons”

Riprendendo la famosa metafora

“Non è tutto oro quel che luccica”

ho pensato di stilare una serie di lati positivi e negativi che ho riscontrato nell’utilizzo quotidiano di GitHub Copilot.

Pros

  • Copilot può velocizzare e facilitare la vita del programmatore, specialmente nei contesti in cui si deve scrivere del codice relativamente ripetitivo. La configurazione di un mock o di una classe per far passare un test, per esempio, diventerà un’operazione più veloce perché una volta che il tool capirà dal primo paio di righe che cosa si vuole fare, suggerirà il resto, spesso con pochi errori o addirittura nessuno. In generale, sarà velocizzata la fase di scrittura del codice dei test.
  • Lo strumento è molto utile quando si è indecisi sulla nomenclatura delle variabili: dato che si basa su codice scritto da moltissime persone, spesso verranno suggeriti nomi migliori e più comprensibili.
  • Copilot a volte suggerisce soluzioni per risolvere i problemi dei quali non si era a conoscenza, permettendo così al programmatore d’imparare modi migliori di scrivere il codice.
  • È stimolata l’analisi del codice: ovviamente Copilot raramente sarà in grado di scrivere il codice perfetto per quello che si vuole fare, per questo stimolerà l’occhio del programmatore, che lo correggerà permettendogli di aggiustare il tiro.
  • Come suggerisce il suo nome, Copilot ha il ruolo di pilota, che nella tecnica del pair programming è la persona che scrive il codice focalizzandosi sul “come” senza pensare troppo al “cosa”. Seppur con qualche imperfezione, permette a chi scrive codice di risparmiare risorse cognitive per ragionamenti ad alto livello, mantenendo più facilmente traccia di quello che si sta facendo.
  • Quando si fa pair programming con una persona reale, Copilot non sostituisce completamente il pilota, ma è come se si generasse un terzo ruolo: abbiamo il navigatore (il driver), il pilota e, appunto, il copilota. Il ruolo del copilota è estremamente interessante perché permette al pilota di seguire meglio le indicazioni del driver lasciandolo concentrare sull’organizzazione del codice a un livello più alto. La mera scrittura del codice sarà infatti compito del copilota, spesso garantendo un codice meglio strutturato sin da subito.
  • Nei casi in cui si usano delle strutture complesse e si deve accedere a qualche informazione innestata in qualche alberatura di classi, spesso Copilot darà suggerimenti errati. Vi starete chiedendo “Matteo, perché lo inserisci tra i vantaggi?”. Il suggerimento che fornisce Copilot sull’utilizzo di un’alberatura mi spinge a pensare se effettivamente non avrei potuto usare pattern migliori.
  • Copilot offre un piano gratuito per gli studenti e per i contributori di repository open source.

Cons

  • Come già accennato, le previsioni di Copilot non saranno quasi mai perfette e a volte può capitare che siano sbagliate in parti talmente minimali che solo un occhio molto attento potrà accorgersi subito dell’errore. A volte, invece, i suggerimenti sono del tutto insensati e possono distrarre dal codice che si sta scrivendo.
  • Proprio perché si basa su codice scritto in repository open source, può capitare che Copilot proponga pattern antiquati, funzionalità dismesse o, peggio, codice con falle a livello di sicurezza. I suggerimenti, quindi, andranno sempre letti con occhio critico e, se da un lato ciò stimola il ragionamento e l’apprendimento, dall’altro una svista potrebbe tradursi nell’incappare in non pochi problemi.
  • Il meccanismo di autocompletamento offerto da Copilot non si amalgama benissimo con quello degli IDE, dato che lo strumento non riesce a dare dei suggerimenti “nel mezzo” di una “sentence” di codice. Un esempio è la gestione delle parentesi graffe: se in una riga non abbiamo il cursore posizionato alla fine, quando l’IDE completa automaticamente l’apertura e la chiusura delle parentesi, per esempio, Copilot non sarà in grado di suggerire nulla se non ci si sposta oltre alla parentesi appena suggerita. Copilot tenderà inoltre a suggerire le proprie chiusure, che quindi raddoppieranno la quantità di parentesi chiuse.
  • Copilot è un servizio che prevede piani di abbonamento sia freemium che premium, a seconda delle proprie esigenze. A parer mio non vale la pena pagare per uno degli abbonamenti premium se non si è professionisti del settore.
  • Il costo: il servizio è in abbonamento, 10€ al mese oppure 100€ l’anno, al termine dei 60 giorni di prova gratuita. Non è poco se si pensa al costo in sé e non penso ne valga la pena se non si è professionisti del settore.

Conclusioni

GitHub Copilot è un ottimo strumento, credo che non sostituirà mai il lavoro del programmatore e non penso nemmeno che sia questo il suo obiettivo, che per com’è strutturato, avrà sempre bisogno di occhi attenti e prompt sensati.

Mi sento di sconsigliarlo a programmatori inesperti per il semplice fatto che potrebbe essere un elemento distraente all’apprendimento, al netto di Copilot Labs, che potrebbe essere utile a tutti i livelli di esperienza.
Al contrario, consiglio fortemente Copilot ai professionisti, specialmente coloro che lavorano con linguaggi molto usati, come Java, JavaScript, Python e C#.

In ultima analisi, sono convinto che strumenti di questo tipo diventeranno sempre più parte integrante del nostro lavoro di sviluppatori software; iniziare a usarli ora permette di avere una marcia in più sin da subito.

Articolo scritto da