L'essenza della programmazione
«What I mean is that if you really want to understand something the best way is to try to explain it to someone else. That forces you to sort it out in your own mind. And the more slow and dim-witted your pupil, the more you have to break things down into more and more simple ideas. And that's really the essence of programming: by the time you've sorted out a complicated idea into little steps that even a stupid machine can deal with, you've certainly learned something about it yourself. The teacher usually learns more than the pupil. Isn't that true?» Ogni anno da qualche anno, durante la prima lezione dei miei corsi di programmazione di base, mostro sullo schermo questa citazione di Douglas Adams (da Dirk Gently's Holistic Detective Agency, 1987). Non sono del tutto certo se la userò ancora per molto: il significato di "programmare" potrebbe rapidamente divergere da quello di "scrivere codice". Le macchine non sono più poi così stupide.
La prima prova che ho fatto una volta avuto accesso a ChatGPT è stata di sottoporgli uno degli esercizi dell'esame finale del corso che si era appena concluso. L'esercizio l'avevo inventato io e ChatGPT non poteva quindi conoscerlo. Rispetto all'esame vero gli ho richiesto inizialmente una versione semplificata, ma (paradossalmente) ho usato una descrizione molto più approssimativa e colloquiale di quella che avevo scritto per gli studenti, come avrei fatto se il mio interlocutore fosse stato un programmatore esperto con cui certi dettagli si possono lasciare sottintesi. La macchina ha capito esattamente quello che doveva fare e ha prodotto un codice perfettamente funzionante in pochi secondi (gli studenti hanno circa 20 minuti a disposizione). Sono voluto passare alla versione completa dell'esercizio: gli ho quindi chiesto di modificare il codice al fine di renderlo più efficiente (continuando a esprimermi come se avessi avuto a che fare con un esperto umano). Stavolta la risposta conteneva un errore, pur andando nella giusta direzione. Avendoglielo fatto notare, ChatGPT ha prodotto un codice finale impeccabile.
Naturalmente esperienze simili, di cosiddetta "program synthesis", sono state fatte da moltissimi programmatori in questi mesi, e pongono immediatamente delle questioni ovvie sul futuro della programmazione, sul mercato del lavoro in questo settore e a cascata sull'intera società.
ChatGPT non è l'unico e nemmeno il migliore sistema di program synthesis esistente. Sistemi più specializzati (ma ottenuti anch'essi tramite l'addestramento dello stesso tipo di architetture neurali, detti large language models) avevano già dimostrato di essere al livello di un esperto umano medio in competizioni di programmazione per specialisti. Il caso più noto è quello di AlphaCode, presentato da DeepMind a febbraio del 2022.
Al momento questi sistemi sono comunque in grado di scrivere solamente programmi brevi, che risolvono problemi specifici e ben delineati. La maggior parte degli specialisti ritiene che il loro ruolo sarà di permettere ai profani di programmare sistemi semplici senza sapere scrivere codice, e agli esperti di aumentare drasticamente la loro produttività nello sviluppo di sistemi complessi che richiedono una visione d'insieme (e già oggi esistono degli assistenti alla programmazione, per esempio Copilot di Github e Code Whisperer di Amazon, in grado di suggerire intere porzioni di codice). In entrambi i casi, il significato del termine "programmare" si trasformerebbe: dallo scrivere codice in prima persona al cosidetto "prompt engineering", ovvero al sapere porre le richieste giuste ad un algoritmo di AI, nel contesto di un dialogo collaborativo. Complessivamente, le conseguenze a livello sociale saranno notevolissime e potenzialmente dirompenti.
Queste previsioni potrebbero perfino essere considerate piuttosto caute: ancora nel 2017, nel corposo testo "Program synthesis" (di Sumit Gulwani, un ricercatore di Microsoft, e coautori), presentando le tecniche sviluppate nei decenni precedenti per affrontare quello che gli autori definivano «the holy grail of Computer Science», non si dedicavano che poche pagine agli approcci basati sull'AI. I progressi dunque sono stati rapidissimi e inaspettati. Ostacoli che sembravano fondamentali sono stati superati, e al momento non ci sono segnali per cui ciò non dovrebbe ripetersi. Potremmo benissimo essere solo all'inizio.
In ogni caso, anche se scrivere codice dovesse prima o poi diventare addirittura un'attività da hobbisti, resterà un ottimo modo per addestrarsi a dissezionare idee complicate nei loro passaggi elementari, e così facendo a capire ciò che stiamo cercando di fare - o di far fare a un assistente artificiale.