Il 2024 ha visto un’esplosione di strumenti di generazione di codice basati su grandi modelli linguistici (LLM). Tuttavia, secondo Chris Lattner, veterano di Apple, Google e fondatore di Swift, questa tendenza è più una moda che una soluzione concreta ai problemi di ingegneria del software.

Perché la generazione di codice non è una panacea

Lattner sottolinea che gli LLM, per quanto sofisticati, non comprendono il contesto di progetto, le specifiche di sistema né le interdipendenze tra componenti. Il risultato è un codice “syntacticamente corretto” ma privo di coerenza architetturale, spesso pieno di bug nascosti o di vulnerabilità di sicurezza.

In un’intervista recente ha elencato tre motivi principali per cui le soluzioni AI attuali non risolvono i problemi reali:

    • Mancanza di conoscenza del dominio. Un modello addestrato su milioni di repository pubblici non è in grado di apprendere le regole di business specifiche di un’azienda.
    • Assenza di verifica formale. La generazione automatica non incorpora controlli di tipo, prove unitarie o analisi statica, lasciando la responsabilità al programmatore.
    • Gestione della complessità. I sistemi moderni richiedono orchestrazione di microservizi, gestione di API versionate e configurazioni di runtime; gli LLM non possono garantire che le modifiche proposte siano compatibili con l’intera catena di dipendenze.

Limitazioni tecniche dei grandi modelli linguistici

Secondo Lattner, le “finestre di contesto” dei modelli attuali (tipicamente 8‑32k token) impongono un limite pratico alla quantità di codice che può essere valutata contemporaneamente. Questo significa che per progetti con centinaia di migliaia di linee di codice, l’AI è costretta a operare su frammenti isolati, perdendo di vista la visione d’insieme.

Un altro ostacolo è la “hallucination” dei modelli: generano funzioni o chiamate API che sembrano plausibili ma non esistono nel progetto. Questo comporta un lavoro di revisione più intenso, anziché ridurlo.

Lattner cita anche il problema della “bias” nei dati di addestramento. Molti repository open‑source contengono pratiche di codifica non ottimali o addirittura vulnerabilità note; i modelli imparano da questi esempi e li ripropongono, perpetuando errori.

Il ruolo delle prove e della verifica

Nel suo intervento Lattner ha enfatizzato che la generazione di codice deve essere integrata con un ciclo di sviluppo basato su test automatizzati. Senza test, il codice generato è semplicemente un “copia‑incolla” rischioso. Propone una pipeline in cui:

    • Il modello suggerisce snippet di codice.
    • Il sistema esegue automaticamente test unitari, di integrazione e di regressione.
    • Solo il codice che supera tutti i controlli viene proposto al programmatore.

Questa procedura, tuttavia, richiede un’infrastruttura di CI/CD ben definita, che molte organizzazioni non hanno ancora implementato.

Implicazioni per le aziende

Lattner avverte le imprese che investire massicciamente in strumenti di AI senza una strategia di integrazione può generare falsi ottimismi e costi nascosti. Gli aspetti da considerare includono:

    • Formazione del personale. Gli sviluppatori devono acquisire competenze di prompt engineering e di valutazione critica dei risultati AI.
    • Governance dei dati. È necessario filtrare i repository di addestramento per escludere codice con licenze incompatibili o vulnerabilità note.
    • Costi di calcolo. L’uso continuo di modelli di grandi dimensioni richiede risorse di GPU e può aumentare le spese operative.

Inoltre, Lattner suggerisce che le aziende dovrebbero considerare l’AI come un “assistente” piuttosto che come un “sostituto”. L’assistente può accelerare attività ripetitive, come la scrittura di boilerplate o la documentazione, ma la decisione architetturale rimane una responsabilità umana.

Esempi concreti di fallimenti

Durante la sua presentazione Lattner ha citato due casi di studio:

    • Una startup fintech ha implementato un LLM per generare endpoint API. Dopo tre mesi, il 30% delle funzioni prodotte conteneva errori di sicurezza legati a input non validati, costringendo la squadra a riscrivere manualmente gran parte del codice.
    • Un grande produttore di chip ha tentato di automatizzare la generazione di driver per nuovi microcontrollori. Il modello ha generato chiamate a registri inesistenti, provocando crash in fase di test hardware e ritardi nella programmazione di massa.

Entrambi gli esempi dimostrano che la generazione automatica, senza un rigoroso controllo, può peggiorare i tempi di sviluppo anziché ridurli.

La visione di Lattner per il futuro

Lattner non è completamente scettico nei confronti dell’AI; al contrario, propone un approccio più maturo:

    • Modelli specializzati. Addestrare LLM su dataset aziendali curati per catturare le specifiche di dominio.
    • Integrazione con tool di verifica. Collegare i modelli a sistemi di analisi statica, testing automatico e formal methods.
    • Feedback loop continuo. Utilizzare il risultato dei test per affinare il modello, creando un ciclo di apprendimento supervisionato.

Questa strategia richiede investimenti a lungo termine, ma secondo Lattner è l’unico modo per trasformare l’AI da “gadget” a vero motore di produttività.

Conclusioni

La generazione di codice basata su AI offre potenzialità interessanti, ma, come avverte Chris Lattner, non è una soluzione completa ai problemi strutturali dell’ingegneria del software. Le aziende che desiderano trarre vantaggio da queste tecnologie devono adottare un approccio olistico, integrando AI con test, governance e competenze umane. Solo così l’AI potrà diventare un vero alleato nella costruzione di sistemi software affidabili e sicuri.