L’intelligenza artificiale sta diventando uno strumento imprescindibile per la vita di un programmatore informatico. L’AI è ormai un aspetto cruciale della programmazione informatica e mette a disposizione tool che semplificano di gran lunga la vita di un developer, specialmente per quanto riguarda quei task che spesso si rivelano monotoni e ripetitivi. Per un web developer, impostare per un sito web una pagina che contenga un form responsivo per login e registrazione utente potrebbe essere un valido esempio dei task sopracitati.
Ti avevamo già parlato dell’ormai celebre GitHub Copilot, creato da GitHub. Si tratta di uno strumento di AI che si presta a semplificare la vita di web developer e non. Ma facciamo un attimo un passo indietro.
GitHub: cos’è?
GitHub è uno strumento per la condivisione di progetti software attraverso un servizio di hosting di repository basato su Cloud. Usando questo tool i programmatori possono lavorare in modo coordinato sulla stessa repository, contenente il codice sorgente, pur sviluppando in modo indipendente.
GitHub offre funzionalità di hosting e revisione del codice, commenti e feedback, collaborazione e gestione del team. I programmatori vengono aggiornati in tempo reale sull’evoluzione del progetto e, inoltre, è possibile ripercorrere l’intera storia del codice e ripristinarne una versione precedente, grazie al salvataggio di ogni modifica, branch e fork effettuati.
Dopo aver visto GitHub come funziona, possiamo capire meglio come Copilot può semplificare la vita di uno sviluppatore.
I casi d’uso per GitHub Copilot sono diversi e possono essere sfruttate attraverso delle estensioni di Copilot stesso:
- Code generation: Copilot è noto per le sue funzionalità di completamento del codice. Se viene fornito un commento nel codice o si digita l’inizio di una riga di codice, Copilot suggerirà una soluzione che è possibile accettare, ignorare o esplorarne le alternative. Una volta installata l’estensione Copilot ed effettuato l’accesso (su Git), il completamento del codice è semplice come digitare le istruzioni e premere il tasto Tab una volta visualizzato il suggerimento. Per esempio, se uno sviluppatore di siti web necessita di creare un’API Rest su Node.js con funzioni CRUD per una determinata categoria, Copilot genererà del codice funzionale.
- Code explanation: è facile imbattersi in righe di codice di cui non si conosce l’origine, il significato o semplicemente il contesto. Quindi bisogna immergersi in una lettura approfondita del codice, ricercare online la documentazione, capire quali sono le librerie esterne…e ciò comporta una perdita di tempo. Copilot invece può spiegarti il codice nel momento in cui glielo “dai in pasto”. La spiegazione non è solo sintattica, ma anche logica, cercando di dare un contesto a quello che stai leggendo o modificando. Da web developer ti capiterà spesso di cercare codice online o collaborare su repository che non hai mai toccato. Copilot sarà un compagno utile nella comprensione di questi script.
- Refactoring: pratica ormai fondamentale nella programmazione, specialmente se si lavora in un team e più sviluppatori agiscono sullo stesso codice. Copilot è in grado non solo di uniformare i nomi delle variabili, ma addirittura di rendere il codice più modulare, guardiamo un esempio.
1. def price_with_discount 2. price - (price * discount_rate) 3. end
Copilot automaticamente gestisce questa funzione e la trasforma in…
1. def price_with_discount(price, discount_rate) 2. raise ArgumentError, "Il prezzo deve essere un numero positivo" unless price.is_a?(Numeric) && 3. price >= 0 3. raise ArgumentError, "Discount rate deve essere un float tra 0 e 1" unless 4. discount_rate.is_a?(Float) && discount_rate >= 0 && discount_rate <= 1 5. price - (price * discount_rate) 6. end
- Test generation: L’uso di Copilot per generare test è tecnicamente un sottoinsieme della “Code generation” citata sopra. Generare unit test per il codice può essere noioso, specialmente se si tratta dei soliti controlli su stringhe, numeri positivi o negativi e simili. Il nostro codice price_with_discount riportato sopra necessita di casi di test per garantire che venga generato un errore se il prezzo o il tasso di sconto non soddisfano i requisiti. Inoltre, potremmo voler testare quanto segue:
- Un prezzo senza tasso di sconto
- Un prezzo con un tasso di sconto ragionevole (ad esempio, uno sconto del 10%)
- Un prezzo con un tasso di sconto del 100% (ad esempio, se vogliamo regalare il prodotto)
- Un prezzo senza tasso di sconto
- Un prezzo con un tasso di sconto ragionevole (ad esempio, uno sconto del 10%)
- Un prezzo con un tasso di sconto del 100% (ad esempio, se vogliamo regalare il prodotto)
Copilot genererà codice simile a questo:
1. RSpec.describe Product do 2. describe "#price_with_discount" do 3. context "quando vengono dati un prezzo ed un discount rate valido" do 4. it "ritorna il prezzo con il discount rate applicato" do 5. product = Product.new("Test Product", 100, 0.2) 6. expect(product.price_with_discount(product.price, product.discount_rate)).to eq(80) 7. end 8. end
- Traduzione in un altro linguaggio: nella tua carriera da sviluppatore web ti capiterà spesso di dover scrivere lo stesso script, ma in linguaggi differenti, da Python a Java, passando per PHP. In questo caso la logica resta la medesima, ma cambia la sintassi, come se dovessimo tradurre una frase dall’inglese al francese. Copilot permette di preservare la logica del codice, fornendo rapidamente lo script tradotto nel linguaggio che ci interessa. Questo rappresenta un grande vantaggio in termini di tempo per un web developer.
Copilot rappresenta uno strumento di grande importanza per la produttività. Consente di investire risorse temporali, ma anche mentali, su task ben più dispendiose, lasciando al nostro “collaboratore virtuale” le mansioni più noiose. Il programmatore informatico ad oggi deve ottimizzare sempre più il tempo a sua disposizione e l’AI si sta facendo spazio proprio per questo.