In un panorama tecnologico in continua evoluzione, Amazon ha riproposto il suo assistente AI generativo per sviluppatori, CodeWhisperer, sotto una nuova veste e con funzionalità notevolmente potenziate. Ora conosciuto come Amazon Q Developer, questo strumento promette di rivoluzionare il modo in cui i programmatori interagiscono con il codice, offrendo un supporto avanzato che va ben oltre la semplice autocompletamento.

Già a metà giugno 2023, avevamo avuto modo di esaminare da vicino tre strumenti di intelligenza artificiale generativa per sviluppatori, tra cui spiccava proprio Amazon CodeWhisperer. All'epoca, lo strumento non includeva la possibilità di chattare direttamente sul codice né di fornire spiegazioni approfondite. Queste lacune sono state brillantemente colmate da Amazon con la versione attuale, che ha visto CodeWhisperer trasformarsi e adottare il nuovo nome di Q Developer.

Cos'è Amazon Q Developer?

Amazon Q Developer è un assistente AI generativo progettato specificamente per gli sviluppatori, che mira a semplificare e velocizzare numerosi aspetti del processo di programmazione. È alimentato da Amazon Bedrock e addestrato su "contenuti AWS di alta qualità", il che significa che l'IA possiede una profonda conoscenza dei pattern, della documentazione e delle implementazioni specifiche di AWS.

Attualmente, lo strumento GenAI può essere eseguito in diverse delle più popolari integrazioni e ambienti di sviluppo:

  • Visual Studio Code
  • Visual Studio
  • JetBrains
  • Eclipse (Preview)
  • La console AWS
  • La riga di comando macOS

Q Developer non si limita a promettere funzionalità avanzate come gli agenti asincroni e le traduzioni tra linguaggi di programmazione, ma offre anche un supporto cruciale nella scrittura di unit test e nell'identificazione di potenziali vulnerabilità. La sua versatilità si estende a un'ampia gamma di linguaggi di programmazione, supportando codice scritto in:

  • Python
  • Java
  • JavaScript
  • TypeScript
  • C#
  • Go
  • Rust
  • PHP
  • Ruby
  • Kotlin
  • C
  • C++
  • Shell Scripting
  • SQL
  • Scala

Funzionalità di Chat e Contesto AWS

Una delle aggiunte più significative di Q Developer è la sua funzione di chat generativa. Questa permette agli utenti di interagire con lo strumento per discutere di svariati argomenti, come le funzionalità del codice, l'utilizzo delle risorse, l'architettura dei sistemi o persino le informazioni sulla fatturazione attuale. Questa capacità di conversazione, alimentata da Amazon Bedrock e basata su un vasto corpus di conoscenze AWS, rende Q Developer un consulente digitale per qualsiasi sviluppatore che lavori nell'ecosistema Amazon. Tuttavia, è importante notare che la funzione di chat è attualmente limitata a conversazioni in lingua inglese.

Panorama Competitivo

Amazon Q Developer si trova a competere in un mercato affollato e in rapida crescita. La sua concorrenza è sia diretta che indiretta. Sul fronte della concorrenza diretta, Q Developer si scontra con offerte consolidate come:

  • GitHub Copilot
  • JetBrains AI
  • Tabnine

Indirettamente, deve confrontarsi anche con una serie di modelli linguistici di grandi dimensioni (LLM) e di piccole dimensioni (SLM) capaci di gestire il codice di programmazione, tra cui:

  • Code Llama
  • StarCoder
  • Bard (ora Gemini)
  • OpenAI Codex
  • Mistral Codestral

Installazione di Amazon Q Developer

Data la molteplicità degli ambienti in cui Amazon Q Developer può essere eseguito, sono disponibili diversi programmi di installazione. La buona notizia è che l'installazione in sé è abbastanza lineare. L'unico aspetto che può creare un po' di confusione è l'autenticazione, poiché ci sono più opzioni e passaggi che richiedono di passare tra l'IDE e il browser web.

Installazione per Ambienti Specifici

Esaminiamo ora i dettagli dell'installazione per alcuni degli ambienti supportati:

Visual Studio Code

Per gli utenti di Visual Studio Code, Amazon Q Developer è disponibile sia tramite il marketplace di Visual Studio Code sia direttamente tramite la barra laterale delle estensioni. Una volta installato, Q Developer in Visual Studio Code include una finestra di chat (posizionata a sinistra) e la possibilità di generare codice direttamente nell'editor.

Visual Studio

Gli sviluppatori che utilizzano Visual Studio possono trovare Amazon Q Developer nell'ambito del AWS Toolkit, accessibile tramite il marketplace di Visual Studio.

JetBrains

Similmente a Visual Studio Code, anche JetBrains offre un marketplace per i plugin IDE dove Amazon Q Developer è disponibile. È importante notare che l'installazione di questo plugin disattiva la funzione locale di completamento del codice inline di JetBrains. In ambienti come IntelliJ IDEA, la finestra di chat di Q Developer si posiziona sulla destra dell'interfaccia.

Riga di Comando macOS

Per quanto riguarda la riga di comando, Amazon Q Developer è attualmente disponibile solo per macOS. Una versione per Linux è prevista per il futuro. L'installazione su macOS consiste essenzialmente nello scaricare ed eseguire un file DMG, trascinare e installare il file "Q" nella directory delle applicazioni. Successivamente, è possibile utilizzare il comando Q TRANSLATE per generare comandi shell o Q CHAT per richiamare l'assistente AI. Il programma da riga di comando supporta diversi programmi shell e terminali su macOS; ad esempio, i nostri test hanno utilizzato Iterm2 e la Z-Shell.

Console AWS

Se non si opera con i diritti di root, è necessario aggiungere le appropriate autorizzazioni IAM per poter utilizzare Q Developer. Una volta configurato, un clic sull'icona corrispondente, situata sulla destra dell'interfaccia della console AWS, richiamerà l'interfaccia dello strumento GenAI.

Amazon Q Developer nella Pratica: I Nostri Test

Di seguito, esamineremo come Q Developer si comporta durante l'esecuzione di diverse attività. L'obiettivo principale è quello di farsi un'idea di quanto bene funzioni questo strumento GenAI per gli sviluppatori.

1. Generazione Predittiva di Codice Inline e Unit Test

La documentazione di AWS presenta diversi esempi di completamento del codice per tutti i linguaggi di programmazione supportati. Questi esempi sono, come quelli che esamineremo, o molto semplici (ad esempio, sommare due numeri) o si riferiscono a processi AWS comuni basati su API (ad esempio, caricare file in un bucket S3).

Come si può vedere nello screenshot successivo, abbiamo provato una "domanda facile" sulla generazione predittiva di codice utilizzando uno degli esempi di suggerimento inline di Amazon. La richiesta in Python era:

# Function to upload a file to an S3 bucket

Q Developer ha generato tutto il codice dopo il commento #TODO, dimostrando la sua capacità di espandere una richiesta semplice in una funzione completa.

Abbiamo provato anche gli altri due esempi integrati per suggerimenti di codice inline. L'esempio per un array di utenti fittizi in Python e quello per gli unit test hanno funzionato, sebbene non al primo tentativo. Nel primo esempio, abbiamo dovuto aggiungere la parentesi quadra di chiusura ]. Nel secondo, la combinazione di tasti Option+C ha causato caratteri non validi, anche se questo potrebbe non essere stato necessariamente un problema di Q Developer, ma piuttosto correlato a macOS o VS Code.

Dopo aver riavviato VS Code e premuto Invio sotto il commento, l'esempio degli unit test ha funzionato perfettamente, generando la seguente funzione test_sum:

# Write a test case for the above function.
def test_sum():
    """
    Unit test for the sum function.
    """
    assert sum(1, 2) == 3
    assert sum(-1, 2) == 1
    assert sum(0, 0) == 0

2. Generazione di Codice da Linguaggio Naturale

Partendo dal presupposto che Q Developer sia in grado di generare codice Python, specialmente quando si tratta dei propri esempi di test, per il test successivo abbiamo creato un file chiamato quicksort.cpp e abbiamo inviato il seguente commento allo strumento:

//function to sort a vector of generics in memory using the quicksort algorithm

Amazon Q Developer ha tentato ripetutamente di completare automaticamente questo commento e, in alcuni casi, anche l'implementazione per diversi problemi. Ciononostante, è stato facile continuare a digitare la nostra specifica. Alla fine, Q Developer ha fornito un'implementazione quasi corretta.

Quicksort è un algoritmo ben noto. Sia le librerie C che C++ ne hanno implementazioni, ma non usano i generici. Invece, è necessario scrivere funzioni di confronto specifiche per il tipo da passare a qsort. Questo è dovuto a ragioni storiche, poiché le librerie sono state implementate prima che le funzioni generiche fossero incluse nei linguaggi.

Alla fine, siamo riusciti a far generare a Q Developer la routine main per testare l'implementazione. Inizialmente, ha creato invece la documentazione per la funzione, ma dopo un nuovo tentativo, lo strumento ha finalmente prodotto la funzione main completa di caso di test.

Non sorprende che il codice generato inizialmente non potesse nemmeno essere compilato. Ciò era dovuto al fatto che lo strumento GenAI aveva omesso l'#include necessario. Tuttavia, siamo riusciti a risolvere questo errore tramite VS Code, dimostrando come lo strumento, pur essendo potente, possa ancora richiedere un intervento umano per le correzioni finali e l'ottimizzazione.

In sintesi, Amazon Q Developer si dimostra uno strumento promettente e versatile per gli sviluppatori, offrendo un'ampia gamma di funzionalità che spaziano dalla generazione di codice all'assistenza nella debug e nella scrittura di test. Nonostante alcune piccole imperfezioni iniziali riscontrate nei test, la sua profonda integrazione con l'ecosistema AWS e le sue capacità di AI generativa lo posizionano come un assistente prezioso per migliorare la produttività e la qualità del codice.