Articolo di Valentina apparso su “il Bo” il 2 novembre 2015.
Nel decennio “informatico” che stiamo vivendo la parola algoritmo è assai di moda: sulla bocca di tutti senza timore, meno sai cosa significa più la puoi usare con spavalderia. Al-go-rit-mo: senti come suona bene? Sembra una parola greca: ῥυθμός, affine a ῥέω -scorrere- associato ad ἄλγος, dolore: il ritmo del dolore o qualcosa del genere, e a forza di leggere sulla stampa divulgativa della “bellezza degli algoritmi” uno ci potrebbe pure credere. Ma non c’entra nulla.
Intanto l’etimologia: algoritmo deriva dal nome del matematico persiano del nono secolo al-Khwārizmī, che ci ha consegnato la prima opera completa sui numeri indo-arabi (Algoritmi de numero indorum).
Poi il significato: un algoritmo è un insieme finito di passi semplici e ben definiti (istruzioni) atti a risolvere un determinato problema. Qualcosa che sarebbe potuto essere eseguito da una macchina di Turing, l’antenato del computer, cioè. Il tutto molto più prosaico e forse un po’ deludente: sembra voler dire tutto e nulla.
Se si vuole una definizione meno intimidatoria si può adottare l’approccio culinario: un algoritmo lo si può pensare come una ricetta. Prende degli “input” (gli ingredienti), esegue un numero finito di operazioni semplici e (si spera) ben definite (la ricetta), e termina dopo aver prodotto un risultato (quello che si mangia).
Allo stesso modo infatti funzionano le migliaia di algoritmi che pervadono (è proprio il caso di dire così) la nostra vita. Pensiamo per esempio alle pubblicità “su misura” di un sito di acquisti online: l’algoritmo ha in entrata degli input (ciò che abbiamo messo nel carrello), esegue una serie di operazioni (confronti con articoli simili o con articoli acquistati da altri clienti che hanno messo nel carrello la nostra stessa merce) e termina producendo un risultato (proporci di comprare altre cose, suggerendo che forse ci interessano). Un procedimento assolutamente lineare e paragonabile, appunto, all’esecuzione di una ricetta.
Amazon non ha bisogno di consultare i migliori storici del pianeta per consigliare altri libri a chi guarda la pagina della classica trilogia “Civiltà materiale, economia e capitalismo” di Fernand Braudel: sulla base degli acquisti degli altri clienti interessati a Braudel, l’algoritmo propone i volumi affini, sicuramente quelli di Immanuel Wallerstein e di Giovanni Arrighi, per esempio. I percorsi mentali delle persone sono strutture “forti” (se sono un appassionato di fantascienza sarò probabilmente interessato non solo ai libri di Ursula Le Guin ma anche a quelli di altri autori) e quindi non è troppo difficile prevederli.
Torniamo alla nostra ricetta: l’analogia culinaria funziona per capire un algoritmo e un codice, perché va dritta al concetto tralasciando i dettagli superflui (quale sia il linguaggio di programmazione, quale il sistema operativo ecc.). Purtroppo non è un’analogia altrettanto calzante per descrivere l’universo degli algoritmi che collettivamente vanno sotto il nome di “intelligenza artificiale” e che sono quelli che popolano i giornali e la fantasia di molti (per citare uno degli ultimi testi usciti sull’argomento: Le jour où mon robot m’aimera. Vers l’emphatie artificielle di Serge Tisseron, edito da Albin Michel e non ancora tradotto in italiano).
Per capire perché la nostra idea comune di algoritmo non si applica alle macchine intelligenti ci si può però ancora servire della metafora della cucina. Quella che segue è una ricetta di sicura riuscita per confezionare delle deliziose coppette alla crema di mascarpone.
Ingredienti (per 5 coppette):
– 3 uova medie
– 300 grammi di mascarpone
– 100 grammi di zucchero semolato
– 2 tazzine di caffè
– 10 biscotti ai cereali rotondi del tipo “digestive”
– polvere di cacao amaro quanto basta
Procedimento:
1) separare gli albumi dai tuorli e montarli a neve ferma;
2) montare i tuorli con lo zucchero e poi unirvi il mascarpone;
3) aggiungere al composto col mascarpone gli albumi a neve mescolando dal basso verso l’alto e non in modo circolare;
4) inzuppare velocemente i biscotti nel caffè;
5) comporre ciascuna coppetta mettendo sul fondo di una ciotola grande come i biscotti: un biscotto, un centimetro di crema, un biscotto, un centimetro di crema;
6) riporre in frigorifero per almeno un’ora. Prima di servire spolverizzare con il cacao amaro.
Questo “algoritmo” (la ricetta) ha una lista di input (gli ingredienti), ogni istruzione è (relativamente) ben definita, e produce un risultato (le coppette al mascarpone). Il programmatore attento introdurrà inoltre delle strutture condizionali (del tipo: se <vero>, allora <esegui>) per assicurarsi che tutte le istruzioni vengano eseguite correttamente e nel giusto ordine. Quel che è più importante, disponendo di questa ricetta, sarà possibile preparare le coppette al mascarpone infinite volte e se qualcuno dovesse chiedere come si fa, sarebbe possibile spiegargli la procedura. Se alla fine le coppette dovessero avere un sapore strano, basterebbe scorrere la ricetta per trovare l’errore commesso!
Ma supponiamo che uno avesse perso la ricetta e dovesse presentarsi a cena da un amico avendo promesso di portare le famose coppette (e non disponesse di una connessione internet in casa per scartabellare i blog di cucina e fosse troppo tardi per perlustrare il quartiere alla ricerca di una pasticceria aperta). Non resterebbe che spremersi le meningi. Alla fine di questo sforzo di memoria la lista degli ingredienti potrebbe risultare qualcosa come:
– uova
– mascarpone
– zucchero
– caffè
– biscotti (o forse pandispagna o erano savoiardi?)
In qualche modo questi ingredienti vanno mescolati tra loro, ma come? Con un approccio metodico e da persone di scienza si potrebbe decidere di tentare un esperimento: ipotizzare diverse ricette con dosi e procedimenti diversi a partire da quella lista di ingredienti, annotarle scrupolosamente, e seguirle per preparare delle micro-coppette di prova da far assaggiare agli amici.
Tra smorfie di disgusto, vani tentativi di nascondere il dolcetto nel tovagliolo e (rari) complimenti a bocca piena, al termine della serata uno potrebbe essersi fatto un’idea grossolana di quali ricette siano meglio riuscite, o più fedeli all’originale, o quantomeno, incontrino i gusti degli amici. Si potrebbe però ripetere l’esperimento ancora, e ancora, di nuovo e una volta ancora. Chiedendo magari agli amici di portare con sé un esemplare di perfetta coppetta al mascarpone perché il malcapitato che ha perso la ricetta la provi e tenti di riprodurla.
Alla fine si otterrà una ricetta credibile delle coppette al mascarpone. Si sarà passati attraverso il tentativo di montare le uova intere anziché solo gli albumi (impossibile), l’improbabile ricetta in cui gli ingredienti vengono cotti sulla fiamma (gli scrambled eggs sono una ricetta inglese e non un dolce tradizionale italiano), o quella in cui alla fine si mette tutto in forno anziché in frigo come fosse una torta viennese ma non ha importanza. Anzi, forse questo è proprio il punto. Se immaginiamo che ad aver perso la ricetta siano tre “doppi” della stessa persona, uno in Italia, uno nel Regno Unito (o negli USA, o in Australia, o in Irlanda) e uno in Austria, sarebbe credibile pensare che la ricetta per la coppetta al mascarpone ottenuta per tentativi “sociali” dai tre doppi della medesima persona sia la stessa?
Assolutamente no. Allo stesso modo funzionano gli algoritmi intelligenti (learning algorithms, letteralmente “algoritmi che imparano”): non sono una ricetta, ma una procedura per costruire una ricetta e il risultato ottenuto – tra i molteplici possibili – dipende da come l’algoritmo si è “allenato”, dagli esempi che ha visto e da quanto tempo gli è stato dato per imparare. Il risultato è comunque accettabile, ma il range di risultati ottenibili può essere davvero ampio.
Asserire che è sufficiente “dare un’occhiata al codice” per capire perché l’algoritmo fa quello che fa sarebbe un atteggiamento decisamente riduzionista. Come se si potesse predire il comportamento di una singola persona prescindendo dal suo background, dalle sue esperienze, dai suoi gusti personali. L’informatica va proprio in questa direzione: progettare algoritmi che imitino quello che gli umani fanno, e che, come gli umani, possano avere gli stessi punti ciechi, le stesse unicità, le stesse imprevedibilità.
Valentina Berengo