Decidiamo oggi per un domani sostenibile

L’AI e la fine della programmazione

Scrivere un codice vuol dire elaborare una lingua d’incontro tra computer ed esseri umani. L’intelligenza artificiale rivoluziona il settore, e cambia anche il mestiere del programmatore.

mercoledì 7 febbraio 2024
Tempo di lettura: min

Programmare un computer vuol dire parlare un’altra lingua. Una lingua logica, con pochi vocaboli di base, ma un dizionario enorme. Questa lingua non è comprensibile solo per gli uomini, ma anche per le macchine, e rappresenta il punto di incontro tra i computer e gli esseri umani. Scrivere il codice in maniera che sia comprensibile per entrambi non è facile. Si può scrivere un codice comprensibile per le macchine, ma difficile da interpretare per gli esseri umani. È quello che fanno alcuni malintenzionati quando ti presentano del codice che all’apparenza esegue una certa istruzione, ma in realtà fa qualcos’altro. I risultati sono a volte divertenti, a volte gravi, o addirittura letali. Ed esiste addirittura una competizione a chi riesce a scrivere il codice più incomprensibile: la International Obfuscate C Code Contest. Ma ovviamente lo sforzo reale è l’opposto. Si impara a scrivere codice comprensibile. Si imparano le buone pratiche di commentare il codice, di allenarlo bene, di distribuirlo tra i vari file in modo che funzioni che hanno effetti simili si trovino vicine. Il computer lo capirebbe lo stesso il codice, ma noi no.

Anche il linguaggio di programmazione cambia negli anni. Mio nonno programmava con le schede perforate. Io in 40 anni ho usato (tra gli altri) il Basic, Pascal, Cobol (che storicamente viene prima, ma all’epoca facevo il servizio militare), e poi C, C++, Java, e infine Python. E ha anche visto il codice macchina, dove ogni istruzione era un codice di due lettere, incomprensibile. Negli anni lo sforzo è stato di rendere il codice sempre più facile da leggere per noi. A volte anche a costo di renderlo più lento per le macchine. In molti dicono che questo sforzo è stato fondamentalmente un fallimento. Il codice in Python è più facile del Basic, ma non abbastanza da poterlo leggere come si legge un documento. Per questo quando scriviamo del codice, lo commentiamo anche. E poi aggiungiamo delle istruzioni e dei documenti. Cercando di renderlo comprensibile. Ma resta sempre abbastanza difficile da interpretare. Resta un codice in una lingua straniera da leggere lentamente una linea per volta.

Poi è arrivata l’intelligenza artificiale. Non solo l’AI è in grado di scrivere il codice per noi, ma lo può commentare, trovarne gli errori (i bugs), migliorarlo, spiegarlo. E anche scrivere il codice per fare i test. Questa evoluzione ha accelerato di molto la velocità a cui si scrive il codice. E il codice scritto è di qualità migliore, più elegante, più comprensibile, viene eseguito anche più velocemente.

ChatGPT e oltre: il dilemma della censura nella corsa verso l'AGI

OpenAI cerca di migliorare i suoi strumenti, ma anche di mettersi al riparo da cause civili milionarie e pubblicità negativa. Qual è il limite dei “filtri” imposti all’intelligenza artificiale?

Mentre l’intelligenza artificiale ha il freno tirato nel dare consigli medici e legali, ed è attaccata direttamente quando viene usata per produrre immagini, i programmatori stanno invece cavalcando l’onda. E, a mio parere, fanno bene. Anche nel caso della programmazione, le intelligenze artificiali sono state educate su codice di programmatori ignari. Anche il mio, per esempio. Ma la reazione di questi programmatori è molto più pacata rispetto a quella degli artisti. E sarebbe interessante chiedersi perché. La sensazione è che i programmatori siano soddisfatti se vengono ripagati da questo “furto” con l’accesso a strumenti più potenti che scrivono il codice per loro.

L’intelligenza artificiale si applica alla programmazione secondo modalità diverse:

  • ChatGPT e le ChatBot;
  • Copilot e le AI Integrate;
  • ChatDev e gli agenti programmatori;
  • Aider… e basta.

Vediamoli uno a uno.

La prima forma è una chatbot a cui si fanno domande. E questo è anche il motore degli altri strumenti. ChatGPT ne è un esempio, ma anche altri. Per esempio Code LLama è stato rilasciato da Meta (cioè Facebook) il 29 gennaio, è open source e specializzata nella programmazione. Le si copia il codice, con una domanda e la chatbot risponde spiegando cosa fare e condividendo il codice da modificare.

La seconda forma corrisponde alle chatbot integrate direttamente nel programma di scrittura (l’editor) con cui si programma. Leggono il codice e suggeriscono le modifiche direttamente nell’editor. Il più famoso è copilot, di Github. Per capire bene quanto queste pratiche siano dominate da Microsoft è necessario fissare un po’ di elementi: l’editor più usato al mondo per programmare è Visual Studio Code. Scritto da Microsoft per Windows, Linux e MacOS. Da non confondere con Visual Studio (sempre di Microsoft). Microsoft possiede anche GitHub, il più grande sito di condivisione del mondo. E possiede il 50% di OpenAI. Quindi, Microsoft ha fornito a OpenAI il codice per addestrare le intelligenze artificiali (tra cui ChatGPT). Poi usa queste intelligenze artificiali come motore per i propri servizi. Ha così sviluppato copilot per Github. Da non confondere con un altro copilot (Microsoft Copilot 365) che gira sul sistema operativo Windows 11, non è specializzato nella programmazione. E ovviamente Visual Studio Code integra copilot al suo interno.

Proviamo a fare un grafico per illustrare le relazioni tra gli attori. Questo mostrerà come Microsoft sia non solo al centro, ma le sue azioni generino una relazione che si autoalimenta, ospitando il codice che allena le AI, che aiuta a scrivere il codice stesso.

Questo grafico, ovviamente, non è esaustivo: mostra solo tre aziende (Microsoft, Github, OpenAI) e sei prodotti (GPT, Windows 11, Copilot Github, Copilot 365, Visual Studi e Visual Studio Code). Ma mostra il cuore del processo. Insieme a Github copilot ci sono migliaia di altri programmi di altre aziende che usano l’intelligenza artificiale e sono integrate con Visual Studio Code.

Le intelligenze artificiali, come copilot, si integrano nel lavoro dei programmatori. Capiscono quello che il programmatore vuole fare direttamente dal contesto. Per esempio, se prima di scrivere una funzione scrivi un commento in cui spieghi di cosa si tratta, le AI suggeriscono il codice per farlo. E a quel punto basta approvarlo. Per esempio, dopo che scrivo:

#codice in python per calcolare l'ennesimo numero di Fibonacci

Copilot mi suggerisce

def fibonacci(n):

   if n == 0:

       return 0

   elif n == 1:

       return 1

   else:

       return fibonacci(n-1) + fibonacci(n-2)

E io devo solo cliccare “tab” per accettare il codice.

Certo, questo è un esempio un po’ semplice, ma illustra bene il funzionamento di questo processo.

Il terzo tipo di uso delle intelligenze artificiali sono quelle che si sostituiscono completamente a noi. Gli agenti. Noi diamo le istruzioni agli agenti, e gli agenti scrivono il codice per noi. Questo accade con AutoGPT e AutoGen (anche prodotto da Microsoft!), per esempio. Ne abbiamo parlato nel post di novembre.

Al suo livello estremo, lo vediamo con ChatDev. Un programma open source a cui diamo le istruzioni, il programma genera un’intera azienda di produzione software tutta fatta da agenti di AI, ciascuno con il suo compito.

C’è l’amministratore delegato, il programmatore, l’ingegnere del software, il tester, quello che scrive i manuali. E il codice passa da un agente all’altro fino ad arrivare a noi nella sua forma finale. Si possono aggiungere altri ruoli e anche inserirsi come un elemento interno che controlla se il codice è pronto o meno. Per quanto la cosa sia emozionante, funziona per piccoli programmi. Lo puoi usare per programmare Space Invaders, o Snake. Difficilmente funzionerà su progetti troppo grandi. E siccome ogni domanda che viene posta da un agente a un altro ha un costo (perché richiama le API di OpenAI) il rischio è di spendere soldi inutilmente. Io comunque sono riuscito a ottenere una versione funzionante di Snake per 50 centesimi circa. Chat Dev è limitato dal fatto che non lavora su progetti già avviati. E tutte le descrizioni che puoi fare sono al massimo di un paragrafo. Ma mostra molto bene cosa possiamo raggiungere. Addirittura, alla fine del progetto, il sistema permette di rivedere quello che è successo, le interazioni che ci sono state, chi ha parlato con chi, dicendo cosa, come un film. Affascinante!

Però, non è ancora particolarmente utile. Se invece vogliamo uno strumento pronto per i programmatori, dobbiamo usare Aider. Anche questo software usa l’onnipresente GPT di OpenAI (quindi ovviamente costa). Legge il codice nella directory in cui lo abbiamo aperto. E legge la descrizione di cosa vogliamo fare. Poi scrive il nuovo codice e memorizza sia la vecchia versione che la nuova con la spiegazione di che cosa abbia fatto. Poi ascolta la prossima richiesta. Semplice e geniale. Sta a noi a quel punto controllare se il codice funziona, o passargli l’errore che ci ha indicato il computer che lui correggerà. Una programmazione a due che funziona molto bene.

Questo ci porta alla conclusione. Stiamo passando dallo scrivere il codice a spiegare a una macchina come scriverlo, e poi illustrare le altre funzionalità che desideriamo. Ma allora è la fine dei programmatori? Assolutamente no. Prima di tutto, come detto, il codice non sempre funziona. Aggiungo che non sempre le intelligenze artificiali sono in grado di correggerlo.

Inoltre tra l’idea generale e vaga di un utente, e il codice, c’è ancora molta strada. La prima cosa che il programmatore deve fare è capire che cosa il cliente vuole. E poi come farlo. Le istruzioni fornite all’intelligenza artificiale devono essere dettagliate. Possono essere in inglese o italiano o altre lingue, ma non possono essere vaghe. Non solo bisogna sapere cosa si vuole fare, ma spesso anche come farlo. Più si è chiari, più l’intelligenza artificiale è in grado di soddisfarci. Ma comandare non è facile. Come dividere un progetto. Quali passaggi fare prima e quali dopo. Il mestiere del programmatore si sta evolvendo. E forse sarà sempre più simile a un ruolo dirigenziale in cui si guida un team di macchine. Ma non scomparirà. Non nel breve periodo.

Certo, ci saranno persone che prima si sarebbero rivolte a un programmatore e ora faranno le cose da sole. Ma ci saranno anche molti progetti in più che prima sarebbero rimasti nel mondo dei sogni e adesso potranno essere realizzati. Perché costeranno di meno e saranno quindi raggiungibili.

E forse anche altri campi potrebbero imparare questo approccio dai programmatori.

Immagine di copertina: ChatDev