I Dipartimenti di Ingegneria dell'Informazione dell'Università di Pisa e dell'Università di Firenze, insieme all'Italian C++ Community hanno organizzato un fantastico incontro con il professor Bjarne Stroustrup, il creatore del linguaggio C++.
L'intero evento è stato coinvolgente: interessante l'approfondimento tecnico sul Concept-based Generic Programming e non meno stimolante la seconda parte, in cui i partecipanti hanno potuto porre domande in libertà.
Il video completo dell'evento è disponibile su YouTube.
Naturalmente, il tema della programmazione assistita dall'IA è stato oggetto di diverse domande. Credo di poter riassumere abbastanza fedelmente il punto di vista di Bjarne Stroustrup in alcuni punti.
Nelle applicazioni che richiedono alta affidabilità, alte prestazioni ed un alto grado di manutenibilità, è necessaria molta prudenza. Gli LLM possono certamente aiutare e non c'è motivo di dubitare di chi dice di trarne beneficio; tuttavia, gli attuali tassi di errore fanno sì che non ci si possa affidare troppo al codice generato. Questo può essere prodotto molto rapidamente, ma deve, comunque, essere revisionato con grande attenzione. Le persone, in generale, non sono particolarmente brave a revisionare codice con il livello di cura necessario: anche per questo i sistemi di tipi, uno degli argomenti della prima parte della conferenza, restano fondamentali.
C'è poi un aspetto organizzativo non secondario: gli sviluppatori esperti potrebbero non voler passare il proprio tempo a revisionare grandi quantità di codice generato. Alcuni preferirebbero persino andare in pensione piuttosto che essere spostati da un ruolo di progettazione dei sistemi a un ruolo prevalentemente di revisione.
Il messaggio generale non è un rifiuto dell'IA, ma un invito alla cautela. Usare strumenti come Copilot (ed ancora di più strumenti più generali come Claude) richiede una notevole esperienza. In altri ambiti l'IA può essere più appropriata, ma il punto centrale è distinguere il contesto: non tutto il software ha lo stesso livello di rischio e non tutte le conseguenze di un errore sono uguali.

Un altro aspetto importante riguarda l'impatto dell'IA sull'apprendimento e sulla capacità di ragionare criticamente. Secondo Stroustrup esistono già studi che indicano come l'uso dell'IA per produrre rapidamente risposte od elaborati possa ridurre l'apprendimento effettivo: si ricorda meno, si comprende meno, perché imparare richiede sforzo, tempo ed anche una certa fatica.
Ha poi citato un rischio ulteriore, ancora non sufficientemente dimostrato ma plausibile: gli studenti più preparati potrebbero riuscire a usare bene l'IA, mentre quelli più deboli potrebbero usarla come una stampella. In questo caso l'IA finirebbe non per ridurre, ma per ampliare le differenze tra le persone.
Sul codice generato dall'IA, Stroustrup distingue ancora una volta tra domini diversi. L'IA può produrre buon codice per problemi già risolti molte volte ed affrontati in modo convenzionale. Il problema nasce invece nei settori di cui si occupa più spesso: software critico, spesso basato su conoscenze specialistiche, non sempre presenti nei dati di addestramento ed in cui un errore può causare gravi danni.
Inoltre, quando si cerca di promuovere modi nuovi e migliori di programmare, l'IA tende a riprodurre ciò che è statisticamente più presente nel materiale di addestramento: il "buon vecchio modo", per esempio array C, puntatori... tecniche tradizionali invece delle soluzioni più moderne e sicure. Anche qui, il suo punto non è che l'IA sia inutile, ma che nel dominio che gli interessa di più ci siano fondate ragioni di preoccupazione. Come ha sintetizzato lui stesso: l'IA è artificiale, non intelligente.
Una domanda particolarmente interessante ha riguardato il futuro dei linguaggi di programmazione: se il codice fosse sempre più letto dagli esseri umani ma scritto dall'IA, la chiarezza diventerebbe più importante dell'espressività? L'IA potrebbe scrivere direttamente in una rappresentazione intermedia, più vicina alla macchina?
Stroustrup ha contestato anzitutto la premessa: non è convinto che la maggior parte del codice sarà scritta dall'IA; nondimeno ha affermato come l'espressione diretta delle idee sia utile sia per gli esseri umani sia per l'IA. Non vede quindi, in linea di principio, alcun problema nel fatto che un'IA possa generare direttamente una rappresentazione intermedia.
Il punto che, però, non si può saltare, è il controllo dei tipi. Per Stroustrup i tipi sono assolutamente essenziali. L'idea di affidarsi a rappresentazioni ambigue od a sistemi di tipi troppo semplificati è, secondo lui, sbagliata per affidabilità, manutenibilità e prestazioni.
In chiusura, Stroustrup ha ribadito ciò che considera ancora centrale in C++: la rappresentazione diretta delle idee nel codice, in una forma che consenta di fare cose nuove e di farle in modo efficiente. Il punto non è solo la performance, ma l'equilibrio tra affidabilità, manutenibilità, prestazioni ed espressività.
In futuri post riporteremo ulteriori domande e risposte che hanno toccato altri argomenti interessanti e curiosi.

