Uova e galline?

“Di cosa diamine vorrà parlarci costui questa volta?”, vi chiederete voi, cari lettori, leggendo il titolo di questo articolo. Presto detto. Mi sono chiesto: sono nate prima le macchine di calcolo e poi sono arrivati i linguaggi di programmazione e i sistemi operativi che le fanno funzionare, o viceversa è nata prima l’idea di linguaggio computazionale e da lì si è sviluppata la tecnologia per utilizzare i linguaggi di calcolo e implementare gli algoritmi? Insomma: è nato prima l’uovo (il software) o la gallina (l’hardware)? La risposta banale è che l’uovo è la gallina e la gallina fa l’uovo. A questo punto a Roma mi direbbero: “Ma anche ‘sti ca**i”: noi però proseguiamo con l’articolo senza “se” e senza “ma”!

La scatola nera e la sua luce

Quello che voglio dire è ogni sistema computazionale è allo stesso tempo hardware e software. Certo, possiamo distinguere gli ambiti per motivi di chiarezza, di schematizzazione, ma non possiamo intendere le cose a compartimenti stagni.
È vero, come abbiamo visto nell’articolo che celebrava il “compleanno” di Visicalc, a volte compaiono oggetti, come l’Altair 8800 che francamente servono a poco.

Però, se ci pensiamo bene, anche questa che è stata la prima macchina di calcolo costruita attorno a un microprocessore veniva a rispondere a un’idea, a un desiderio, il sogno di alcuni hobbisti un po’ hacker e un po’ nerd di avere tra le mani una macchina alla quale far calcolare potenzialmente qualsiasi cosa. Poco male se con l’Altair 8800 si poteva al più far accendere o spegnere le luci poste sul frontale… L’Altair 8800 era la gallina che corrispondeva all’uovo che avevano in testa quelle migliaia di hobbisti, cioè poter avere finalmente tra le mani una macchina di calcolo da programmare.

Fu il primo passo, come abbiamo visto. Pochi anni dopo comparve la “gallina” Apple ][ + Visicalc tramite la quale si poté sviluppare la rivoluzione della microinformatica, la rivoluzione del personal computer. Tutto ciò a partire dall’uovo che aveva in mente Dan Bricklin, il progettista di Visicalc.
Ma secoli prima di Dan ci furono menti luminose nella storia dell’umanità, menti che avevano un uovo nella testa e che anche produssero delle galline…

Ipazia e l’astrolabio

Della matematica e astronoma Ipazia, filosofa neoplatonica, vissuta tra il IV e il V secolo d.C. ad Alessandria (in Egitto) in genere si ricorda la morte violenta, e la possibile implicazione in essa, come mandante, del santo vescovo Cirillo… Probabilmente la sua morte fu legata più a questioni di beghe politiche che non di religione, ma tant’è: la povera ci andò di mezzo.
Quello che sappiamo è che tra i suoi estimatori, non solo nella sua epoca, ma anche nei secoli successivi, ci furono parecchi saggi e filosofi cristiani, a cominciare dal suo discepolo Sinesio di Cirene, vescovo di Tolemaide.

Proprio dagli scritti di Sinesio veniamo a sapere che, tra le tante “uova” che Ipazia ebbe in testa (fu un’intellettuale poliedrica: a lei si devono ad esempio un algoritmo per il calcolo delle divisioni e gli studi sulle sezioni coniche, solo per stare nell’ambito delle scienze matematiche) ce ne fu una che la portò a produrre una gallina di notevoli qualità… Sinesio, nella sua opera De dono astrolabii (Un astrolabio in regalo), ci racconta che Ipazia gli passò le istruzioni per costruire un astrolabio di moderna (per l’epoca) concezione. Un astrolabio è un dispositivo di calcolo che permette di stabilire la posizione di stelle e pianeti sulla volta celeste: si tratta di un’invenzione antichissima (si parla del II secolo a.C.). La versione proposta da Ipazia, diciamo così, “in scatola di montaggio”, è una versione più maneggevole rispetto all’astrolabio sferico (quello classico): una sorta di astrolabio laptop. Forse Ipazia non inventò, magari neppure migliorò più di tanto l’astrolabio piano (di questo si trattava), ma certo lo scritto di Sinesio ci presenta Ipazia come una grande divulgatrice scientifica, una scienziata capace di un pensiero teorico sopraffino coniugato con una sensibilità pratica di prima qualità. Insomma: uova e galline.

Muḥammad ibn Mūsā al-Khwārizmī aka Algoritmo

Qualche secolo dopo, siamo nel IX secolo d.C., un’altra mente fervida si occupò di astrolabi. A dir la verità, così come Ipazia, anche questo scienziato persiano, Muḥammad ibn Mūsā al-Khwārizmī, si interessò di un sacco di cose, non solo di astrolabi. Fu matematico, astronomo e geografo; tra le altre cose, a lui dobbiamo l’introduzione dei numeri indo-arabi in occidente, attraverso i traduttori latini delle sue opere matematiche. Lo si ritiene il “padre dell’algebra”, anche se il suo lavoro, ovviamente, si innesta su quello di altri matematici che lo precedettero. L’uso stesso della parola “algebra” fu introdotto in Europa dal titolo di un suo lavoro: Al-Kitāb al-mukhtaṣar fī ḥisāb al-jabr wa al-muqābala: algebra esprime la parola al-jabr.

E, udite, udite, è proprio in onore del suo nome, al-Khwārizmī, latinizzato in Algoritmi, che chiamiamo così le sequenze di istruzioni che animano le nostre macchine computazionali.
Il nostro al-Khwārizmī elaborò anche “algoritmi” per la soluzione di problemi algebrici, ma qui, parlando di uova e di galline, ci interessa notare come anche lui volle vedere applicati a una macchina i metodi teorici di calcolo che aveva immaginato. La tecnologia dell’epoca forniva una macchina del genere, e quella macchina era l’astrolabio, la macchina per i calcoli astronomici. Da buon hacker al-Khwārizmī non solo si avvalse dell’uso di astrolabi, ma anche ne migliorò le prestazioni inventando uno strumento che venne ad affiancare l’astrolabio: il cosiddetto quadrato delle ombre (o “scala altimetrica”), che veniva a rendere più preciso il calcolo della posizione degli astri sulla volta celeste.

macchine

La meravigliosa Ada

Passano i secoli e la tecnologia entra in quella che è la sua fase industriale. Siamo al principio del secolo XIX e il signor Jacquard presenta il prototipo della sua macchina per la tessitura, quello che ricordiamo appunto come il “telaio Jacquard”.

Cosa ha a che fare questo telaio con il nostro discorso sulle uova e le galline? Bene, possiamo dire che questa macchina è forse la prima macchina programmabile. Era dotata di qualcosa di simile a un lettore di schede perforate che permetteva a un operatore di ottenere dal telaio differenti disegni. Insomma: un meccanismo di input che alimentava una macchina “computazionale” per ottenere un particolare output.

E qui entra in gioco la meravigliosa Ada Lovelace, la madre di tutti i programmator*.
Ada fu essenzialmente una mente matematica, ma non si accontentò del lavoro matematico teorico.
Ella vide nei prodotti tecnologici della sua epoca la possibilità di dare una risvolto pratico ai metodi di calcolo teorico che la matematica andava elaborando.

In particolare Ada collaborò con una altro matematico, Charles Babbage, che nel frattempo aveva ideato due macchine di calcolo: la macchina differenziale e, soprattutto, la macchina analitica, qualcosa che finalmente si avvicinava alla macchina di calcolo universale, cioè al modello di macchina di calcolo che sta alla base di ogni calcolatore attuale.

Ada fu “l’ingegnere software” che diede anima alle macchine di Babbage, e fu anche colei che pensò di dotare di schede perforate la macchina analitica, rendendo più immediato il lavoro di programmazione. Sappiamo per certo che Ada implementò sulla macchina di Babbage un algoritmo per il calcolo dei numeri di Bernoulli. Proprio per questo Ada Lovelace è ricordata come la prima programmatrice di computer.

Ancora una volta tante uova nella testa e la capacità, e il desiderio, di mettere le mani su una gallina che le potesse esprimere…

Turing e la sua macchina (che non c’è)

E se l’uovo che una mente brillante avesse in testa fosse proprio una gallina?
Questo è proprio il caso di Alan Turing e della macchina che da lui prende il nome: la macchina di Turing.
Anche di Alan Turing (1912-1954), purtroppo, ricordiamo la morte violenta, causata dalla barbarie e dall’ottusità delle quali il genere umano è capace… Ma la sua vita fu luminosa quanto lo fu la sua mente.

Le macchine lo affascinavano tanto quanto la matematica teorica. Già da piccolo aveva mostrato un grande interesse per la macchina per scrivere di sua madre, tanto da riflettere su come si potevano descrivere in termini matematici le caratteristiche che la determinavano come macchina.

Ecco, Alan Turing si propose di descrivere matematicamente cosa sia una macchina meccanica per il calcolo, in modo tale da poter determinare cosa fosse calcolabile tramite strumenti meccanici e cosa no. Produsse quindi una gallina teorica, la macchina che porta il suo nome, una macchina astrattamente definita che però ha inciso sulle macchine “reali” prodotte successivamente (quelle che usiamo ogni giorno), e sulla teoria della computazione e gli algoritmi.

La macchina di Turing è fornita di un nastro di lunghezza infinita (per questo non può essere che astratta) e manipola i dati contenuti su questo nastro secondo un insieme definito di regole. La si intende come un’astrazione, ma ne sono stati anche costruiti modelli reali di essa, certo con nastri di lunghezza finita…

La macchina di Alan Turing, nella sua ineffabilità, è il banco di prova di ogni algoritmo: una macchina tanto teorica, da essere incredibilmente pratica…

Da qualche parte dovremo andare a sbattere (cf. At 27,26)…

Dove ci porta questa storia delle uova e delle galline? Quello che abbiamo visto è che la distinzione tra macchine e logica di programmazione (algoritmi, linguaggi di programmazione) è puramente formale, serve per descrivere. Perché dietro a macchine e algoritmi ci sono esseri umani dotati di un ingegno più o meno eccezionale, ma certo con un’idea nella testa che sono riusciti a trasformare in un sistema hardware/software, in una realizzazione pratica.

Insomma, ciò che voglio dire è che dietro alle macchine che usiamo, alle applicazioni con le quali interagiamo, ci sono persone. Quasi quasi, lavorare con applicazioni software davanti a un dispositivo elettronico è paragonabile alla lettura di un libro. Nell’uno e nell’altro caso, se ci soffermiamo a pensare, stiamo interagendo con degli autori, le persone che stanno dietro al racconto, le persone che stanno dietro alle applicazioni e alle macchine.

Ho lavorato parecchio con Photoshop in passato. Ricordo che alla fine della giornata, qualche volta, mi piaceva far scorrere la finestra di info del programma. Comparivano i nomi delle centinaia di persone che avevano contribuito allo sviluppo di questo software. Persone che non avevo conosciuto, e che probabilmente mai conoscerò di persona, ma che in qualche modo mi avevano tenuto compagnia durante il lavoro di fotoritocco.

Pensare a tutto l’umano che c’è dietro la tecnologia ci può aiutare a superare timori e paure nei suoi confronti, a nutrire un po’ più di fiducia in essa, e anche sapere che Algoritmo fu un matematico persiano del IX secolo d.C. un po’ ci rappacifica.

Insomma, proviamo a vivere la tecnologia senza troppi “complottismi” o retropensieri: certo anche senza troppa ingenuità. In fondo ci fidiamo del prossimo, però quando attraversiamo una strada è sempre opportuno guardare da una parte e dall’altra prima di farlo…

Stefano Deponti