Le radici storiche - Fondamenti di Informatica

Transcript

Le radici storiche - Fondamenti di Informatica
Parte prima
Le radici storiche
1.1. Calcolare, elaborare, comunicare
Calcolatore, Elaboratore, Computer? Lasciamo ai puristi
della lingua la scelta. Il termine inglese da cui “calcolatore”
deriva è [electronic] computer, a sua volta proveniente (direttamente o forse attraverso il francese) dal latino computare,
composto di cum e putare nella accezione di contare, calcolare.
La parola computer, sostantivo dal verbo to compute, calcolare,
è sinonimo dell’altro latinismo calculator (identico in inglese e
in latino). Forse la traccia più profonda della matematica
all’interno dell’informatica sta proprio in quest’ultima
parola, il calcolo, che letteralmente indica la pietruccia con cui
contare e far conti; a testimoniare che tutta la storia dell’informatica, che poi fu di macchine e di mezzi di comunicazione, fu prima storia di automazione del calcolo. Agli
albori dell’era informatica (anni ’40) era stato usato il
termine [macchina] calcolatrice elettronica, o calcolatrice elettronica
programmabile; ma ben presto questo termine femminile rimase a designare la macchina calcolatrice tradizionale, quella
capace di eseguire le quattro operazioni aritmetiche o poco
più. Meccanica fino a quegli anni, dagli anni ’70 quest’ultima
è divenuta a sua volta elettronica; oggi è tascabile, a energia
solare, con molte funzionalità aggiuntive (possibilità di memorizzare testi, addirittura di essere programmata e collegata a calcolatori) che la fanno diventare sempre più simile
ad un computer, pur restando di dimensioni (e capacità) ridotte. Il percorso evolutivo della calcolatrice e del calcolatore
(chiariremo che la prima non è un semplice precursore del
2
PARTE PRIMA
secondo) lega assieme la storia di vari settori come la matematica, il calcolo applicato, la tecnologia, l’economia, le comunicazioni
e l’organizzazione della società umana. Questo legame è intricato
e riguarda un periodo di storia sorprendentemente lungo,
almeno 4000 anni. A differenza di altri testi di informatica,
faremo lo sforzo di conservare le interdipendenze fra i vari
settori (anche se ciò rende meno lineare la narrazione),
sviluppando tre “percorsi” storici paralleli: l’evoluzione del
calcolatore-macchina, l’aumento di possibilità (le
“prestazioni”) che esso ha introdotto, la catena storica di
idee, prototipi e prodotti dell’informatica.
Nel lessico comune, il nobile calcolatore si distingue dalla
più plebea macchina calcolatrice per aver abbandonato proprio il sostantivo “macchina”. Questo non corrisponde alla
realtà: il calcolatore resta sempre una macchina, e la sua
evoluzione è avvenuta negli stessi modi di quelli delle macchine e delle tecnologie nei campi più disparati. Per cercare
di metterne in luce gli aspetti più importanti, possiamo iniziare da una definizione generale di macchina come “un sistema fisico che tende a simulare, estendere e potenziare le
capacità dell’homo sapiens, quali il lavoro muscolare, il movimento, il linguaggio, la memoria e l’intelligenza”, intendendo inoltre la tecnologia (dal greco téchnê, arte) come l’arte
di servirsi di tali dispositivi. La macchina, di qualunque tipo
(per arare, cacciare, per fare la guerra, per trasportare,
calcolare, sostituire la forza muscolare, per volare, per
comunicare e così via), ha marcato nei millenni l’evoluzione
scientifica, tecnologica, sociale e politica dell’umanità. Il
primo percorso storico del calcolatore che proponiamo
(sezione 1.2) è quindi quella del calcolatore come macchina; in
questa visione, l’informatica è una disciplina tecnico-scientifica che si
occupa delle basi teorico-matematiche delle “macchine da calcolo a
programma”, dell’elaborazione e trasmissione dell’informazione
operata per loro tramite, come pure dell’ingegneria di queste macchine e
LE RADICI STORICHE
3
delle loro applicazioni in vari settori della società: uso personale,
economia e organizzazione aziendale, burocrazia e lavoro d’ufficio,
medicina, sistemi di telecomunicazione, didattica, progettazione,
automazione di macchine e di processi produttivi, realizzazione di
“automi intelligenti”(robotica, intelligenza artificiale), ed altri.
Parte notevole dell’informatica riguarda gli aspetti teorici
ed applicati della programmazione, cioè di una entità immateriale, ben distinta dall’aspetto fisico della macchina stessa,
tanto che per la prima è stato coniato il termine suggestivo
software in contrapposizione ad hardware, usato invece per i
componenti fisici del calcolatore1. Il software è fondamentalmente un formalismo matematico, cosicché il calcolatore
è la prima macchina di ampio mercato in cui la matematica
non è un semplice strumento usato nella sua progettazione e/o
realizzazione: al contrario, utilizzare la macchina significa
sostanzialmente utilizzare procedimenti matematici, dei quali la
macchina stessa è l’esecutore automatico. A differenza di tutte le
altre macchine ideate in precedenza, la sua parte fisica non
determina il suo comportamento e le sue capacità, almeno
quantitativamente, poiché questa è preposta soltanto ad eseguire i compiti logici descritti dai procedimenti matematici di
cui sopra (questo concetto teorico di macchina universale da
calcolo è approfondito nella sezione 1.7). La varietà e la generalità di questi procedimenti, permesse da un formalismo
matematico sorprendentemente semplice e potente, hanno
concesso al calcolatore il privilegio di essere la prima
(attualmente l’unica) macchina universale e riconfigurabile - almeno in buona approssimazione - della storia, in quanto la
sua operatività nel “simulare, estendere e potenziare le capaIl termine software è un neologismo degli anni ’50 che nasce giocando sulla
parola originale hardware il cui significato è, più o meno, la “ferramenta” (o, in
gergo, la “ferraglia”), sostituendo la radice hard (duro, pesante, difficile) con il
suo antinomo soft (morbido, delicato, leggero). Giuoco di parole gradevole ed
appropriato, è praticamente intraducibile, e i due termini sono entrati
rapidamente in uso in tutte le lingue.
1
4
PARTE PRIMA
cità dell’uomo” non è fissa, ma dipende in minima parte
dalla sua parte fisica (hardware) e in modo quasi totale dalla
sua programmazione, cioè dalla sua parte logica, ovvero dal
suo software (che in francese, per questa ragione, è chiamato
anche con il neologismo le logiciel, il “logicale”).
Di conseguenza, sono nate anche una tecnologia e una
ingegneria del software, che comprendono lo sviluppo e il
miglioramento di nuovi formalismi per scrivere i programmi
(i linguaggi di programmazione), gli ambienti operativi (essi stessi
principalmente software) dove creare nuovi programmi, le
metodologie e gli strumenti per organizzare il lavoro di progettazione e sviluppo di grandi e grandissimi programmi (detto
in modo semplice, quelli che sarebbero al di fuori della
portata materiale di un solo uomo, ad esempio perché richiedono decine di anni-uomo di impegno). Esistono quindi
una ingegneria e una industria del software, sicché il software può
essere assimilato ad una “macchina virtuale”. Inoltre, gli
aspetti matematici della programmazione sono talmente inscindibili dal concetto di “macchina da calcolo a programma”, che, assieme alle nozioni sulla struttura fisica del
calcolatore, è necessario comprendere i fondamenti di quegli aspetti matematici per poter catturare l’essenza dell’informatica (sezioni 1.5, 1.7 e 2.2).
Per comprendere poi la fusione fra le metodologie e
tecnologie del calcolo e quelle della rappresentazione, della
memorizzazione, della trasmissione della “informazione” (termine inteso nel senso più generale), nella sezione 1.3 vengono
introdotti alcuni cenni ai concetti di base della Teoria
dell’Informazione. La macchina da calcolo, infatti, fa molto di
più che calcolare in senso intuitivo (trarre risultati numerici da
procedimenti aritmetici): manipola, gestisce, in altre parole
elabora informazione (di cui un caso particolare è quella
puramente numerica). Ad esempio, nel preciso istante in cui
scrivo questa frase, un calcolatore (il mio portatile) legge i
LE RADICI STORICHE
5
tasti che premo, memorizza il loro valore, fa apparire sullo
schermo un testo ben impaginato che simula una stampa,
memorizza il testo su un disco; questa sera, lo trasmetterà
attraverso la linea telefonica (chiamando in causa un’altra
decina di calcolatori “nascosti” fra apparecchiature, centrali
telefoniche, servizi di gestione di Internet) alla macchina del
coautore in modo che questi possa lavorarci su domani.
Nella società industriale attuale, il ruolo del calcolatore
come elaboratore di informazione in forma codificata (in un
gergo un po’ obsoleto, di “dati”) è verosimilmente più
importante del suo ruolo di “esecutore di calcoli”, e per
questa ragione anni or sono venne proposto, per l’italiano, il
termine elaboratore elettronico.
Nella storia, ogni nuova macchina ha superato una
barriera o ottenuto nuovi risultati rispetto a ciò che era
possibile in precedenza, ed è comune chiedersi quali e
quanti siano questi risultati: ogni nuova tecnologia migliora
una specifica “prestazione” di un fattore 2, 10, 100 o più, e
questo opera cambiamenti importanti nella complessità della
società umana. Se il primo percorso proposto è quello del
calcolatore come macchina, il secondo è una riflessione sui
risultati dell’evoluzione del calcolatore e, in generale,
dell’informatica, in termini di prestazioni (sezione 1.4).
Infine, descriveremo, secondo il terzo percorso - più
tradizionale - le tappe storiche che hanno portato all’informatica moderna (idee, metodi matematici, prototipi, realizzazioni e, naturalmente, uomini), mettendo in luce gli aspetti
metodologici più importanti (sezione 1.5).
Nella sezione 1.7, come già detto sopra, torneremo ad
approfondire gli aspetti matematici descrivendo il concetto
teorico di macchina universale da calcolo, in stretta relazione con
l’idea logico-matematica di calcolabilità.
6
PARTE PRIMA
1.2. La macchina
L’ideazione di una nuova macchina non avviene intervallando studio (scienza pura) e sperimentazione (scienza applicata, ingegneria) in modo prefissato; piuttosto, si tratta di
percorsi paralleli in cui l’uno può precorrere l’altra o viceversa. Per questo si parla anche di scoperte: eventi apparentemente casuali, a volte di rivoluzionaria importanza, che
però normalmente casuali non sono. L’esempio più vicino
all’informatica è la “scoperta” dell’effetto transistor nel 1948
da parte di J. Bardeen, W. H. Brattain e W. Schokley presso
la Bell, mentre stavano investigando su tutt’altro problema;
tuttavia, anche se la ricerca in quel momento aveva un diverso obiettivo, si trattava comunque di analoga disciplina,
ed esistevano già conoscenze teoriche fisico-matematiche
nel settore. Insomma, si può dire che, se non fosse successo
casualmente in quella sede, qualcuno (forse uno di loro)
avrebbe prodotto prima o poi la stessa scoperta. Questo
principio di “maturità dei tempi” è forse quello che spiega
come molte scoperte (si veda ad esempio il calcolo
infinitesimale di Newton e di Leibnitz) abbiano più padri
indipendenti; e che molte intuizioni scientifiche precorrano i
tempi senza trovare né realizzazione tecnologica né
utilizzatori per secoli, come ad esempio l’uso del vapore
quale forza motrice da parte di Erone (I secolo d.C.) o del
feedback (retroazione, nota 2) negli orologi ad acqua (III secolo a.C.), o addirittura del calcolatore programmabile, pensato da Charles Babbage a metà dell’800. Per inciso, il transistor ha dato origine a tutta l’elettronica moderna basata sui
circuiti a stato solido (in precedenza si utilizzavano i tubi a
vuoto, le cosiddette valvole termoioniche), senza i quali
l’informatica come la conosciamo ora sarebbe semplicemente inesistente. La pseudo-casualità della scoperta del
transistor è però probabilmente l’unica cui il calcolatore è
debitore.
7
LE RADICI STORICHE
Tornando al percorso, diciamo, “evolutivo” della macchina (sia essa l’aratro o il reattore nucleare), esso segue di
norma una struttura molto generale e largamente
indipendente dal tipo di macchina. Questo si può riassumere in un ciclo, con un inizio, un “corpo”, e uno o più
punti di uscita.
tecnologia esistente #1
tecnologia esistente #2
aumento del rendimento
nuova macchina #1
applicazioni di mercato
a1
a2
mercato
ricerca scientifica
a3
miglior tecnologia
aumento del
rendimento
nuova macchina #2
Figura 1.1 - Percorso evolutivo di una generica macchina
8
PARTE PRIMA
All’inizio, una tecnologia matura viene perfezionata ottenendo un aumento del rendimento, ovvero un miglioramento di
un parametro critico o di una prestazione potenziale al di
sopra una certa soglia minima “di interesse”. Ciò innesca un
circolo virtuoso: si crea una nuova macchina (#1 in figura
1.1) destinata ad un percorso evolutivo. Le sue applicazioni
in un mercato rilevante creano le condizioni perché una
maggior consapevolezza scientifica porti ad un ulteriore miglioramento del rendimento, e quindi della macchina stessa;
usualmente, poi, vengono migliorate le altre tecnologie impiegate (ad esempio, quelle costruttive) che, a loro volta,
migliorano la macchina. Questo è il “corpo” del ciclo, che
porta ad un progressivo miglioramento della macchina e del
suo impiego: minor costo, migliori prestazioni, eccetera.
Mentre il ciclo è ancora attivo, è comune che una seconda
tecnologia, in un settore diverso, unendosi alla prima possa
portare ad una nuova macchina (#2 in figura 1.1) di tipo diverso. Se questa seconda macchina si sovrappone al mercato della prima, essa ne decreta la fine, e così via. Strada facendo, nuove tecnologie nascono, con parallele evoluzioni
degli studi scientifici. È da notare che questo ciclo di vita
raramente si ferma: spesso una macchina, o una tecnologia,
che non evolve più sta precorrendo l’inizio della propria
estinzione.
Lo schema appena descritto è comune a una infinità di
processi tecnologici, macro- e microscopici, software compreso come verrà descritto più avanti nel libro (sezione 2.2).
Molte tecnologie importanti che hanno seguito cicli come
quello descritto sono oggi nei musei; l’informatica è invece
in pieno ciclo evolutivo. Il ciclo di vita del carro a trazione
animale è durato, per paesi industrializzati, 5.500 anni;
quello del regolo calcolatore 350; quello della macchina per
scrivere 120, vent’anni in più rispetto al telegrafo; quello del
disco microsolco 40 e quello dell’aereo passeggeri superso-
LE RADICI STORICHE
9
nico 20. Un esempio abbastanza famoso è la macchina che
ha dato origine all’era industriale: la macchina a vapore di
James Watt, messa a punto attorno al 1770. Leggera e di
buon rendimento energetico, permise lo sviluppo della fabbrica e la creazione di trasporti di tipo moderno mediante
sfruttamento dell’energia termica di un carburante trasportabile
- come non avveniva per le due fonti di energia meccanica
precedenti, quella animale e quella idraulica. A volte, la macchina a vapore è considerata un evento isolato più che un
risultato, quasi una scoperta casuale. Al contrario, il motore
a vapore non fu un’idea originale, ma un “semplice” miglioramento, operato su basi scientifiche da Watt e da suoi collaboratori, di una macchina già ampiamente usata, ideata da
Thomas Newcommen nel 1712, il quale si era basato a sua
volta sulla macchina di Thomas Savery del 1698, e così
all’indietro con una storia di prototipi che si possono far risalire almeno all’eliopila di Erone di Alessandria, I secolo
d.C. circa.
Il ciclo generico di figura 1.1 è riscritto in figura 1.2 per la
macchina a vapore. La macchina di Watt non era radicalmente diversa di quella di Newcommen, e funzionava sugli
stessi principi fisici, ma vedeva aumentato il rendimento
energetico oltre una soglia critica. Watt applicò principi di
termodinamica che lo studio scientifico aveva reso disponibili, progettando forse la prima macchina basata su criteri
razionali. Inoltre, per certe componenti essenziali come il
suo regolatore centrifugo (le sfere rotanti che sono diventate un
po’il simbolo della macchina) era stata necessaria la maturazione del principio del feedback, o retroazione, assente dalla
scienza fisica fino ad allora, e che solo nel ’700 si andava
formando nell’ingegneria e nell’economia2.
Il termine feedback, o retroazione, fu coniato dai pionieri della radio agli inizi
del secolo; negli anni ’40, la cibernetica (la prima disciplina che ha studiato in
modo matematico e formale il comportamento intelligente di un essere
artificiale) mise al centro della sua attenzione proprio il concetto di feedback,
2
10
PARTE PRIMA
macchina a vapore Newcommen
termodinamica
aumento del rendimento
tecnologie dei
materiali
m. a vapore Watt
applicazioni di mercato
trasporti
fabbrica m. utensili
mercato
ricerca scientifica
tecnologie meccaniche
aumento del
rendimento
m. a combustione interna
Figura 1.2 - Percorso evolutivo della macchina a vapore
che Norbert Wiener, padre di quella disciplina, definì come “un metodo per
controllare un sistema reinserendo all’ingresso i risultati del suo
comportamento passato”. Tracce del controllo a retroazione si trovano nel
secolo III a.C. (orologio ad acqua di Ctesibio), attorno al 50 d.C. (distributore
di vino di Erone), e in altre riscoperte indiane e arabe del IX secolo d.C.. Solo
dal secolo XVII il principio fu nuovamente riscoperto (termostato di
Drebbel, galleggiante di Wood, mulino a vento di Lee, regolatore della
macchina a vapore di Watt e Boulton). Oggi il feedback è il principio base di
qualunque automatismo, e il termine è entrato nel linguaggio comune come
elemento di autoregolazione di ogni sistema complesso artificiale o naturale
(come nel caso degli ecosistemi ambientali e dei sistemi socio-economici).
LE RADICI STORICHE
11
In conclusione, la macchina a vapore è rappresentabile
con un percorso scientifico e tecnologico a un certo punto
del quale due dei suoi parametri (rendimento e uso del
feedback) superarono un certo valore di soglia: sotto quel
valore, era stato possibile un uso limitato in un settore
specifico (miniere); al di sopra di quel valore, con J. Watt,
iniziò la diffusione in settori diversi: fabbrica, trasporti
terrestri e marittimi, utensili per costruzioni meccaniche. Il
mercato fiorente fece sì che si generassero nuove versioni
sempre migliori e, allo stesso tempo, stimolò la ricerca
scientifica che permise di migliorare ulteriormente il
“rendimento” della macchina, cioè, in ultima analisi, il suo
mercato, promuovendo ulteriore sviluppo della conoscenza
nella termodinamica. Contemporaneamente, la sua applicazione alle macchine utensili (in particolare, fin dall’inizio, al
tornio a vapore) permise anche il raffinamento delle tecnologie costruttive, introducendo un ulteriore ciclo di miglioramento. Il ciclo miglioramento - applicazioni - ricerca rimase autonomo e attivo per più di un secolo; poi, procedimenti
tecnologici sostanzialmente estranei (uniti ad ulteriori
risultati scientifici) fornirono le condizioni per l’invenzione
di un nuovo motore, quello a combustione interna (padre
del motore delle nostre automobili), che assieme a quello
elettrico (caratterizzato da un percorso ancora diverso)
segnò prima il rallentamento, poi l’arresto definitivo del
ciclo di sviluppo della macchina a vapore, avvenuto qualche
decennio fa, e la “morte” di quest’ultima. La nuova macchina - il motore a combustione interna - nasce perciò dall’incontro di due percorsi: uno autonomo, l’altro all’interno del
ciclo del motore precedente. Da incontri come questi sono
nate le principali innovazioni - o le scoperte - nella storia
della società tecnologia, calcolatore elettronico compreso.
Il calcolatore è, diversamente dall’esempio precedente,
una macchina nel pieno del suo ciclo di vita (figura 1.3).
12
PARTE PRIMA
m, da calcolo meccanica
elettrotecnica
m, da calcolo a memoria
elettronica
applicazioni di mercato
calcolo
fabbrica finanza
tecnologie
elettroniche
comunicazioni
mercato
ricerca scientifica
m, da calcolo a programma
algoritmi
aumento del
rendimento
calcolatore elettronico
mercato
ricerca scientifica
Figura 1.3 - Percorso evolutivo attuale del calcolatore
LE RADICI STORICHE
13
Anche per il calcolatore c’è stato un punto in cui il suo
rendimento ha superato una soglia critica, e ciò è avvenuto
attorno agli anni ’40, con l’uso dell’elettronica. In quel momento è nato un mercato per il calcolatore. Anche per il calcolatore esistevano una macchina precedente (la calcolatrice
meccanica), conoscenze teoriche sul calcolo automatico
(indicati in figura 1.3 come “algoritmi”), e campi di applicazione commerciali pronti (il più maturo era quello del calcolo finanziario e statistico, legato alla macroeconomia e alla
gestione aziendale). Anche se la quota più significativa del
mercato si era aperta con la rivoluzione industriale, macchine, strumenti da calcolo e metodi matematici per il calcolo erano, difatti, in sviluppo da più di due millenni. Per
applicazioni particolari (che oggi definiremmo “nicchie di
mercato”) Pascal, Galileo, Nepero realizzarono e vendettero
macchine da calcolo; la necessità di produrre grandi tavole
numeriche (per la navigazione, l’astronomia, l’agrimensura
eccetera) generò metodi matematici per automatizzare il calcolo in un arco di tempo che va dal III millennio a.C. al
XIX secolo: le tavole sumeriche, l’almagesto di Tolomeo
(140 d.C.), i logaritmi ad opera di Nepero e Briggs (16141624), i metodi di organizzazione del lavoro per il calcolo di
tavole numeriche ideati da De Prony (inizio ’800)3, la macchina analitica stampante di Scheutz (1850). Le macchine
meccaniche non raggiungevano però valori di prestazioni
(velocità, flessibilità, costo) sufficienti ad innescare un significativo ciclo di sviluppo. L’incontro con l’elettronica e le
tecnologie della comunicazione permise quel salto di prestazioni da cui è scaturito il ciclo di sviluppo entro il quale
siamo attualmente immersi, in attesa che anche questo ciclo
venga interrotto da un nuovo evento tecnologico che oggi
non siamo in grado di prevedere. Nelle tavole 1.1 - 1.4 , più
Esplicitamente citati come fonte di ispirazione da Charles Babbage (v.
sezione 1.5).
3
14
PARTE PRIMA
avanti, sono schematizzati molti degli eventi storici che
hanno prima preparato e poi caratterizzato il ciclo di sviluppo della macchina da calcolo.
L’incontro con la tecnologia delle comunicazioni è stato
altrettanto importante di quello con l’elettronica. Usando
termini non rigorosi, si può dire in modo più comprensibile
che la macchina da calcolo si è incontrata con la tecnologia e
la teoria dell’informazione; cioè con lo studio matematico del
trasferimento delle informazioni fra uomini e macchine, e i
relativi metodi di applicazione.
1.3. La Matematica dell’Informazione
Altra macroscopica caratteristica dell’informatica è stata
quella di aver saldato assieme due settori fino a pochi decenni fa ben distinti: il calcolo (inteso come procedimento per
risolvere problemi matematici non solo numerici) e le
telecomunicazioni (trasmissione mediante segnali elettrici o
elettromagnetici di informazione). Questa unione non è
avvenuta per caso, e nel compiersi ha portato con sé altri
settori come la telematica, le banche dati, l’editoria, l’arte e lo
spettacolo, l’automazione. La saldatura è avvenuta quando è
stato compreso e formalizzato un modo unitario per
rappresentare, all’interno del calcolatore, “tutto ciò che è
rappresentabile” mediante un linguaggio e una codifica.
Questo è stato possibile con la nascita di quella disciplina
chiamata teoria dell’informazione, enunciata da Claude Shannon
nel 1948 (ma in gestazione da molti anni), il cui scopo
principale è quello di misurare e rappresentare ogni tipo di
sorgente di informazione, o “documento”, o “notizia”, in modo
astratto e indipendente dal suo (o dai suoi) significato/i.
Cercheremo di riassumere i principi della teoria
dell’informazione in pochi concetti base.
LE RADICI STORICHE
15
Innanzi tutto, ogni “notizia” può venire codificata in simboli di un alfabeto. Oggi è comune parlare di “digitalizzazione”, o conversione analogico-digitale (A/D), ad esempio,
di una immagine o di un suono: la notizia o documento
(sotto forma di segnale elettrico) viene tramutata in numeri
corrispondenti a una serie opportunamente fitta di suoi
campioni. La serie di numeri diviene la codifica dell’informazione che la sorgente emette. Il segnale originale si dice
analogico, mentre la sua rappresentazione codificata è detta
numerica o digitale (riprenderemo questi concetti nella sezione
1.6).
Nella figura 1.4, il segnale (un’onda sonora, per esempio,
o la scansione di una riga di un’immagine) viene codificata
come una sequenza di simboli, presi da un alfabeto di numeri con un numero prefissato di cifre che, come tali, non
consentono di dare una misura comunque esatta del segnale.
Abbiamo quindi una doppia perdita di informazione: i singoli simboli sono una approssimazione del valore del segnale, e fra un campione e l’altro non ho informazione alcuna.
Più precisamente, facendo riferimento alla figura 1.4, i
passi attraverso cui si svolge il processo di conversione sono
i seguenti. Il primo passo è il campionamento (sampling), con
cui il segnale viene misurato in istanti di tempo periodici (N
volte al secondo, con N grande), ottenendo i valori “veri” (o
molto approssimati) di una sua grandezza fisica significativa
(ad esempio, l’ampiezza). Il secondo è la quantizzazione, con
cui i singoli valori (campioni) vengono raggruppati in un
numero prefissato di intervalli, ovvero vengono espressi con
numeri di ridotta precisione. Il terzo passo è la codifica
(encoding), con cui i valori dei singoli campioni vengono
rappresentati in un qualche codice binario. A questo punto
il segnale è un segnale digitale, una sequenza di bit che, con un
procedimento inverso (decodifica e conversione digitale-analogica,
16
PARTE PRIMA
D/A, può essere “ricostruito” il più fedelmente possibile)
(si veda anche la sezione 4.2).
Il segnale decodificato, in basso in figura 1.4, viene
appunto ricostruito da una serie di valori che, da soli,
definirebbero un segnale “scalettato” o a gradini; nessuna
informazione è presente nella codifica, sul valore assunto
dal segnale originale fra due campioni successivi. Sotto
precise condizioni stabilite dalla teoria dell’informazione (su
quanto fitti debbano essere i campioni, e quanto precisa la
loro misura) è possibile però garantire di mantenere la
perdita di informazione sotto valori prefissati. In un
normale CD audio stereo, ad esempio, il segnale audio di
ognuno dei due canali è campionato a 44,1 KHz (migliaia di
Hertz, cioè 44.100 volte al secondo) con numeri interi in un
campo -32768 ... +32767 (cioè con numeri in forma binaria
a 16 bit); benché vi sia una perdita teorica di informazione,
essa non è valutabile all’ascolto, e la qualità sonora del CD è
superiore a qualunque altro sistema di registrazione precedente non basato su codifica digitale. Il concetto di codifica
verrà ripreso nella sezione 3.1 perché è alla base della
telematica, e nella sezione 4.2 parlando di multimedialità.
In questo modo qualunque sorgente di informazione può
avere una rappresentazione in simboli, sia essa una pagina
scritta o un film, la voce umana o una tavola di numeri. È
oggi universalmente adottato come alfabeto per qualunque
codifica quello binario (composto da soli due simboli o
“stati” logici: 0 e 1): la rappresentazione dell’informazione è
perciò omogenea e compatibile con quella usata dal calcolatore. Nell’esempio di figura 1.4, usando una
rappresentazione binaria a 3 bit per rappresentare gli 8=23
numeri interi tra 0=000 e 7=111, il segnale viene rappresentato dalla sequenza
... 111 011 010 011 100 101 100 010 010 ...
LE RADICI STORICHE
17
Figura 1.4 - Conversione A/D e D/A
Naturalmente, ci sono già sorgenti di informazione basate
su un proprio alfabeto, che pertanto necessitano di qualcosa
di più di una semplice codifica binaria, come, ad esempio, il
testo che sto scrivendo in questo preciso momento,
codificato “all’origine” da una tastiera di un centinaio di
tasti. In questo caso, è sufficiente una tabella di transcodifica
(o, in gergo, un codice tout court) che associa un codice
binario ad ognuno dei simboli della mia sorgente. Il codice
più comune usato in informatica per i testi è l’ASCII esteso
18
PARTE PRIMA
(American Standard Coding for Information Interchange),
che associa ad ogni tasto o combinazione di tasti
ammissibile un codice ad 8 bit (quindi ha 28=256 possibili
codici distinti, che comprendono i caratteri dall’alfabeto, i
numeri, i simboli speciali).
Ben prima di Shannon, il concetto di codifica, almeno per
i testi, era già stato intuito: gli spartani (IV sec. A.C.)
usavano un sistema di codifica crittografica per i messaggi
(lo scitale); i telegrafi Chappe (ottico, 1795) e Morse
(elettrico, 1834) (figura 1.5), e la telescrivente di Baudot
(1870) definirono altrettanti codici per il testo dei messaggi,
alcuni dei quali portano ancor oggi i loro nomi.
Figura 1.5 - a) codice Chappe, b) codice Morse
La teoria dell’informazione, se ha permesso di tramutare
virtualmente qualunque sorgente di informazione in una
rappresentazione gestibile da un calcolatore, ha fatto di più,
nel momento in cui ha introdotto una misura dell’informazione.
Per far questo si deve pensare ad informazione codificata, o
intrinsecamente tale (ad esempio, un testo come quello che
sto scrivendo), o perché proveniente da un processo di codifica, come il segnale campionato e codificato di figura
1.44. Dare una misura per l’informazione presente in un doQualunque grandezza fisica rappresentabile con una funzione del tempo
può essere codificata come nell’esempio riportato sopra. Questo è il principio
con cui voce e musica sono normalmente trasmesse e memorizzate sui mezzi
digitali. Anche le immagini, con il principio della scansione per linee nato con
4
19
LE RADICI STORICHE
cumento codificato non è intuitivo: si può facilmente mostrare come sia falsa l’idea che un messaggio porti più informazione di un altro se il suo testo è più lungo di quello
dell’altro. Una pagina di un testo cinese, il cui alfabeto è
composto da un numero maggiore di simboli dell’italiano,
porta probabilmente più informazione di quella che state leggendo. Un libro le cui pagine fossero tutte piene dello stesso
carattere “1” porterebbe probabilmente meno informazione di
un elenco del telefono. Oltre alla pura lunghezza della notizia sono perciò importanti:
1. il numero di simboli dell’alfabeto: maggiore è il numero,
maggiore è il contenuto di informazione che mediamente una
pagina contiene
2. la probabilità che un simbolo compaia nel testo: se tutti i simboli
appaiono mediamente con la stessa probabilità (come accade,
grosso modo, con le cifre dei numeri telefonici), allora
l’informazione sarà più alta che nel caso di una notizia in cui
un certo simbolo appaia poco o mai, e un altro sempre. Se
dovessi trasmettere per telegramma cento pagine di un
elenco telefonico, dovrei inviare circa 350.000 caratteri; il
libro di 100 pagine di tutti “1” richiede l’invio di un messaggio ben più breve:
350000x1
(che naturalmente il ricevente deve essere in grado di interpretare). In altre parole, i due testi, di lunghezza eguale,
hanno una misura dell’informazione enormemente diversa.
La parola mediamente che abbiamo usato più sopra
richiama l’aspetto statistico di questo modo di misurare
l’informazione. In effetti, Shannon ha definito la misura
la telefotografia e la televisione, possono essere codificate: l’esempio di tutti i
giorni è il fax, ma la televisione digitale è oggi alle porte e i CD contenenti
video in formato digitale sono già relativamente comuni.
20
PARTE PRIMA
dell’informazione di una sorgente di messaggi (senza perdere
troppo in rigore, anche di un generico messaggio) in termini
puramente statistici, come quantità media di informazione che
ogni simbolo del messaggio contiene. Questa dipende, come abbiamo detto, dal numero di simboli e dalla loro distribuzione
statistica. Il libro di tutti “1” può sì esser trasmesso con una
sequenza di 350.000 simboli uguali; ogni singola cifra binaria avrebbe una probabilità così alta di esser presente nella
sequenza da essere poco significativa (e se la perdessi, non
cambierebbe molto). Viceversa, in un messaggio di pari
lunghezza ma totalmente imprevedibile in cui ogni simbolo
abbia la stessa probabilità, ogni cifra sarebbe ugualmente
indispensabile e imprevedibile. Nel primo caso, la teoria
dell’informazione parla di un “basso valore di informazione
per simbolo”, nel secondo caso è l’opposto.
La teoria dell’informazione introduce una unità di misura
per questa quantità: esattamente come nella numerazione
binaria, e non per caso, questa unità si chiama bit; essa corrisponde alla massima quantità di informazione che un simbolo di un alfabeto può trasmettere, in quanto è, come
nell’esempio precedente, l’informazione statistica che un bit
(inteso come simbolo binario “0” e “1”) trasporta quando è
parte di un messaggio in cui tutti i bit sono equiprobabili.
Nessun simbolo di nessun messaggio può portare più
informazione: o perché il codice ha più di due simboli, o
perché i simboli non sono equiprobabili (e quindi
prevedibili per chi ascolta il messaggio)5. In altre parole, il bit
5 La definizione di Shannon di misura dell’
informazione H di una sorgente di
messaggi con un alfabeto di k simboli è espressa dalla formula
H?
k
?
i? 1
pi ld
1
pi
dove pi è la probabilità con cui ogni kmo singolo simbolo si presenta, e ld è il
logaritmo in base 2. L’unità di misura è il bit, e H è detta entropia della sorgente
di informazione.
21
LE RADICI STORICHE
(oltre che la cifra binaria) può esser inteso come la massima
quantità di informazione che un simbolo di un alfabeto può portare.
Nella lingua italiana, ad esempio, le lettere (simboli di un
alfabeto a 21 simboli) non sono equiprobabili (figura 1.6 in
cui sono rappresentate le frequenze delle lettere in un lungo
testo); le lettere più probabili (e, i, a, ...) portano poca informazione, o, come si dice, sono ridondanti, perché prevedibili. Qualunque testo è ridondante: se pensate di cancellare tutte le lettere “e” (molto frequenti) da questa pagina,
un programma che conosca la statistica dell’italiano le reintrodurrebbe senza problemi. La teoria dell’informazione
fornisce metodi meno cruenti per evitare di trasmettere
simboli ridondanti. Mediante opportuni procedimenti di
codifica, un qualunque messaggio (sia già simbolico, che di
tipo analogico, come suono o immagine) può essere rappresentato con un codice che abbia il minimo numero di bit
per simbolo, ovvero, col minimo numero di simboli binari.
Questo suggerisce anche un modo per inventare codici
binari in cui ogni cifra binaria arrivi a trasportare un intero
bit di informazione: nel caso dell’alfabeto, si può codificare
ogni lettera con un numero di bit inversamente proporzionale alla sua probabilità, ad esempio:
E: 00
I: 100
A: 10110
O: 111110
e così via; nel trasmettere un messaggio del genere userei il
minimo numero di bit. Se, viceversa, usassi sempre lo stesso
numero di bit per ogni lettera (come nel codice ASCII), ad
esempio 5 che sono il numero minimo di bit necessari per
21 simboli diversi, il mio messaggio sarebbe evidentemente
più lungo, perché “sprecherei” bit nel trasmettere lettere
molto frequenti come la “e”, la “i” eccetera. È perciò
possibile che lo stesso messaggio (si badi bene, con la stessa
quantità di informazione realmente comunicata al ricevente)
sia codificato con più o meno bit. Nel primo caso, la
quantità di informazione per bit è evidentemente minore, e
22
PARTE PRIMA
la codifica ha una certa ridondanza; per di più, un messaggio
ridondante è più lungo e viene trasmesso più lentamente.
Figura 1.6 - Frequenza delle lettere in italiano (esempio tipico)
Uno dei grandi risultati della teoria dell’informazione è
stato il poter misurare questa ridondanza, e poter progettare
codifiche che la riducono. Ridurre la ridondanza, o
comprimere un messaggio, è oggi una delle tecniche più
importanti in informatica e nelle comunicazioni digitali: si
pensi alla memorizzazione di grandi archivi, alla trasmissione veloce. Video e telefonia digitale, CD-ROM
multimediali, Internet sfruttano oggi in larghissima misura il
principio dell’eliminazione della ridondanza e della compressione. Questa operazione di compressione è molto
importante perché permette di ridurre le dimensioni delle
rappresentazioni digitali, ed è la base di presenti e futuri
sistemi multimediali. Quanto maggiore è la ridondanza,
tanto maggiore è il beneficio della compressione: tipico è il
caso delle immagini, ferme o in movimento, in cui si
possono ottenere compressioni di 10 o 100 a 1.
LE RADICI STORICHE
23
Opposto della compressione è l’aggiunta di ridondanze al
solo scopo di correggere eventuali simboli corrotti durante
un trasferimento, o perché il supporto di memorizzazione si
è danneggiato. Quanto più i supporti divengono densi di informazione, e quanto più le trasmissioni dell’informazione
sono veloci, tanto più queste aggiunte diventano essenziali.
A partire dagli anni ’70, l’aggiunta di codici in grado di
permettere la correzione di errori è divenuta la regola.
La misura dell’informazione non è un’astrazione matematica, né un tentativo di oggettivizzare il fenomeno della comunicazione (un dibattito filosofico sui pericoli di “lasciarsi
prendere la mano” dalla misura apparentemente oggettiva
dell’informazione prescindendo da cosa veramente viene
comunicato ha avuto e continua ad avere una certa rilevanza); è, al contrario, lo strumento che ha permesso di migliorare i procedimenti di codifica (che vengono effettuati
da programmi) per permettere la completa fusione dell’informatica con le comunicazioni, come è già avvenuto nella
telefonia, nell’audio, nella multimedialità, e come avverrà
prossimamente nella comunicazione globale. Senza pretendere niente di più che una visione superficiale della materia,
possiamo riassumere i concetti teorici che hanno provocato
la fusione fra informatica e telecomunicazioni:
1. il principio della conversione analogico-digitale (digitalizzazione) ha permesso di trattare numericamente i
segnali analogici e restituirli poi in forma analogica mediante conversione digitale-analogica; il calcolatore diviene la macchina universale non solo nel calcolo, ma
anche nell’elaborazione di informazione di qualunque
tipo, entrando nel campo delle comunicazioni e dei
media;
2. la teoria dell’informazione ha permesso la progettazione
di codici efficienti sia dal punto di vista della compattezza che della velocità di trasmissione e delle capacità di
24
PARTE PRIMA
correggere automaticamente errori di trasmissione.
Le comunicazioni, a loro volta, hanno avuto un percorso
storico parallelo in cui si sono avvicendati singoli eventi storici e tecnologie applicate. Esempi sono la creazione del servizio postale (impero romano), l’invenzione della stampa
(Johannes Gutenberg, 1450 circa), il telegrafo (Chappe,
Morse, 1800 - 1850), il telefono (Meucci, Bell, 1870 circa), la
radio (Marconi, 1900 circa) e così via. Ma l’altissimo tasso di
sviluppo attuale proviene dal matrimonio fra le tecnologie
dell’informatica e quelle delle telecomunicazioni, che è relativamente recente, iniziato negli anni ’70 e progredito in
modo esponenziale; attualmente, è in atto un passaggio “al
digitale” in tutti i settori, compreso quelli (come cinema, radio e televisione, giornali ed editoria) più legati ai mezzi
analogici tradizionali, mentre altri, come la rete telefonica,
sono già migrati quasi completamente. La progressione di
questa unificazione tecnologica è fortemente spinta dai miglioramenti della tecnologia del digitale (capacità dei supporti di memorizzazione, velocità dei canali di comunicazione e dei processori, si veda la sezione 1.4 e figure
relative). Come controparte, il mondo informatico si è
arricchito di multimedialità alla portata anche delle macchine
più piccole ed economiche.
Il fenomeno più eclatante è quello della crescita di
Internet, rete mondiale di interconnessione fra ogni genere
di calcolatori (macchine personali, dipartimentali, di centri
di ricerca eccetera), alla portata del comune cittadino, e
gestita in modo anarchico da miriadi di organizzazioni di
utenti e di società fornitrici di servizi. Le reti informatiche
sono nate, in pratica, assieme all’informatica stessa: la prima
rete fu SAGE (Semi-Automatic Ground Environment),
sviluppata negli anni ’50 al MIT per applicazioni militari
(interconnessione di un centinaio di siti radar e basi missilistiche); essa connetteva tra l’altro 23 sottoreti, concetto ve-
LE RADICI STORICHE
25
ramente innovativo per l’epoca. I progettisti di SAGE diedero poi origine alla prima rete commerciale: SABRE (IBM,
1964, per prenotazioni aeree).
La madre dell’attuale Internet fu ARPANET (Advanced
Research Projects Agency NET), creata dal Dipartimento
della Difesa americano nel 1969; interconnetteva per la
prima volta, con tecniche moderne “a pacchetto”, macchine
eterogenee su tutto il territorio degli USA, e permetteva la
riorganizzazione dei siti senza un controllo centralizzato.
Gran parte dei protocolli oggi in uso (sezione 3.1) sono nati
in ARPANET. Dismessa dalla Difesa, dal 1984 ha costituito
il nucleo centrale di Internet che, in una decade, si è
sviluppata fino ad essere in grado di coprire praticamente
tutti i paesi.
ETHERNET, la prima rete locale economica per
macchine eterogenee, oggi in uso con vari miglioramenti,
nacque nel 1974 alla Xerox. Prevedeva originariamente un
cavo coassiale, oggi usa praticamente qualunque collegamento elettrico disponibile, diventando rapidamente lo
standard per reti locali (sezione 3.1).
ISDN (Integrated Services Digital Network) è la rete di
comunicazione che sta lentamente sostituendo la rete telefonica, potendo fornire servizi integrati di trasmissione dati,
voce, video, posta elettronica, videoconferenze, fax, eccetera. È uno standard definito nel 1984 al quale le società telefoniche di tutti i paesi stanno adeguandosi.
1.4. L’incremento di prestazioni
Ogni macchina e ogni tecnologia ha migliorato qualche
prestazione delle tecnologie precedenti, secondo la definizione
di macchina come sistema che “estende e potenzia le
capacità dell’uomo”. Questo miglioramento è, in generale,
26
PARTE PRIMA
sia qualitativo che quantitativo; in quest’ultimo caso (il più
semplice da trattare), esso comporta un incremento o
aumento di prestazioni.
La tecnologia informatica, in particolare dopo la sua
fusione con quella delle comunicazioni, è caratterizzata da
enormi incrementi di prestazioni, se paragonata alle altre
principali tecnologie moderne (cioè maturate a partire dalla
fine del ’700). Occorre aprire una riflessione su questo
punto, le cui conseguenze e implicazioni culturali, sociali ed
economiche sono, in larga parte, ancora tutte da investigare.
Se si riflette con attenzione, gran parte delle prestazioni raggiunte dalle tecnologie moderne non superano di un grande
fattore quelle che erano possibili in epoca storica: un fattore
di incremento comune va da 10 a 102 (ma i valori più alti
sono rari)6. Per l’ingegneria civile, da molti punti di vista il
fattore di incremento è sorprendentemente piccolo; in epoche di progettazioni non basate su criteri razionali, ad esempio, si realizzavano opere civili che per dimensioni e tempi
di realizzazione sono paragonabili a quelle attuali:
l’acquedotto romano dell’Aqua Marcia (144 a.C.) era lungo
91 Km e portava 200.000 m3/giorno (fabbisogno odierno di
una media città di provincia); i 2.000 Km di muraglia cinese
furono costruiti in pochi anni attorno al 210 a.C.. A partire
poi dall’uso di metodi razionali nella progettazione, cioè sui
calcoli ingegneristici7, le opere civili hanno avuto possibilità
I valori dei numeri, in particolare quando questi sono espressi in potenze (le
potenze di dieci sono spesso chiamate ordine di grandezza), sfuggono
facilmente all’intuizione. Usando come riferimento l’altezza di un uomo, un
incremento
di un fattore 10 è, ad esempio, un edificio8 di 5 piani; un fattore
2
10 è una collina; la distanza Terra-Luna è un fattore 10 .
6
La progettazione razionale iniziò quando criteri formali di progettazione e
calcolo matematico sostituirono regole empiriche; l’ingegneria civile (sia delle
opere civili propriamente dette, che dei materiali e delle macchine) nacque
con il formarsi di tale concetto da una “costola” dell’ingegneria militare
francese, in particolare con la fondazione, nel 1747, della École Nationale des
Ponts et Chaussées (“Scuola nazionale di [costruzione di] strade e ponti”) a
7
LE RADICI STORICHE
27
di “prestazioni” non molto diverse da quelle odierne - un
progetto realizzabile di tunnel sotto la Manica, per citare
una delle opere recenti di più grande mole, era già stato
formulato nell’800. Naturalmente certi altri fattori hanno
ricevuto aumenti molto più significativi in questo tipo di
opere, come, tipicamente, quelli legati alla qualità della vita
(in particolare, di chi doveva lavorare alla realizzazione delle
opere civili o in fabbrica). D’altra parte, queste riflessioni
semplicemente quantitative non possono essere trasferite al
campo della medicina e della salute, perché il valore della
vita (e della sua qualità) è così alto da richiedere altre unità
di misura per il progresso tecnico-scientifico.
Più vicina al tema di questo libro, rivolto alla rappresentazione, elaborazione, memorizzazione e trasmissione del “sapere
codificato”, è l’evoluzione della biblioteca, valutata semplicemente rispetto alla quantità di informazione immagazzinata.
Scegliendo l’unità di misura più banale per questa grandezza
- il numero di volumi presenti - e assumendo che più una
biblioteca è grande più ha valore, si può verificare
l’incremento di prestazioni nelle dimensioni delle grandi
biblioteche in epoca storica. Il re assiro Assurbanipal (IV
secolo a.C.) creò un archivio di circa 25.000 tavole; ma le
prime vere biblioteche furono quella di Alessandria, fondata
da Tolomeo I (III secolo a.C.), che conteneva qualche
centinaio di migliaia di volumi, la maggior parte in papiro; e
la biblioteca di Pergamo, situata nel tempio dedicato alle
Parigi. Da essa si diffusero dapprima in Inghilterra e poi in tutta Europa i
criteri che, applicati ai settori della vita civile, formarono i primi ingegneri
dell’epoca moderna. A titolo di esempio, la prima progettazione “moderna”
di un edificio industriale è probabilmente quella del mulino presso
Ditherington, Shropshire ad opera di Charles Bage (1796); il primo ponte in
ferro (una tecnologia nuova che richiedeva calcolo matematico), il
Coalbrookdale Bridge sul fiume Severn (1799), fu progettato da Thomas
Pritchard e realizzato da Abraham Darby; negli stessi anni iniziarono a
diffondersi le attività di ingegneria delle strade (Thomas Telford) e dei canali
(James Brindley).
28
PARTE PRIMA
Muse detto museion, fondata da Attalo I (II secolo a.C.) con
altrettanti volumi, in pergamena. Fra le grandi biblioteche
attuali possiamo menzionare quella Nazionale di Firenze
(3.500.000 volumi), la Bibliothèque Nationale a Parigi
(6.000.000), le Library of Congress a New York e Biblioteca
Lenin a Mosca (16.000.000). In base a questa semplice unità
di misura, l’incremento è un fattore compreso fra 10 e 50
rispetto al secolo III a.C.. Certamente gli attuali “volumi”
hanno molte più pagine dei papiri; ma la percentuale di
informazioni non ripetute (tecnicamente, non ridondanti) non
è necessariamente più alto nelle biblioteche attuali.
Interessante è anche considerare il peso del contenuto di una
biblioteca, che dà indicazione sulle dimensioni, sull’organizzazione e la fruibilità: per la Libreria del Congresso, si può
stimare un ordine di grandezza di 15.000 - 20.000 tonnellate.
Si può confrontare questa cifra con quanto detto più avanti
sulla capacità di memorizzazione (figura 1.7).
Nel settore dei trasporti, la cui influenza nella diffusione
del sapere è stata determinante fino al ’900, la situazione è
simile. Nel ’600, come in epoca romana, una nave da carico
Genova - Marsiglia impiegava 50 giorni, con vari scali (oggi
una rotta simile, con gli stessi scali, richiederebbe un tempo
minore di un fattore 10); un viaggiatore da Milano a Venezia
impiegava 3 giorni in epoca romana, 36 ore nei primi
dell’800, 3 ore oggi (fattore fra 10 e 102). Il rapido Milano Roma impiegava 7 ore e 26 minuti nel settembre del 1939;
oggi 6 ore e 26 minuti. Nemmeno l’aereo, per comuni percorsi continentali, alza il fattore di incremento oltre i 102. È
da notare che i trasporti, oltre al commercio, erano il veicolo
primario per la diffusione della conoscenza, cioè dell’informazione: almeno fino all’inizio del ’900, la diffusione
dell’informazione avveniva esclusivamente per trasporto fisico
dei pesanti “contenitori” dei messaggi: i libri o gli uomini
stessi.
LE RADICI STORICHE
29
Da sempre, due sono le “merci” che costituiscono punti
critici per lo sviluppo delle tecnologie e delle organizzazioni
sociali: i materiali energetici e quelli del sapere (l’informazione). La prima rivoluzione è avvenuta quando per essi
è stata ideata una modalità di trasporto che comportasse il minor
spostamento possibile di entità materiali di rilevante massa fisica.
Facciamo un esempio nel caso dell’energia. Supponiamo
che una media città (150.000 abitanti circa) all’inizio dell’800
avesse avuto il fabbisogno energetico medio odierno, circa
10 KiloWattora a persona al giorno, e che la fonte
energetica fosse quella tipica dell’epoca - una miniera di
carbone distante, diciamo, 100 Km. La città avrebbe avuto
bisogno di 200.000 Kg di carbone al giorno, per il cui
trasporto, all’epoca, sarebbero occorsi non meno di 1.200
cavalli, 160 carri, due strade riservate 24 ore su 24, almeno
1.000 uomini più altrettanti contadini e addetti vari per le
10.000 tonnellate di foraggio all’anno (e lo smaltimento di
15.000 tonnellate di letame). E questo solo per trasportare la
fonte energetica - escluso l’estrazione in miniera, l’utilizzo
del carbone e l’ulteriore distribuzione del lavoro ottenuto. Si
può intuire che la situazione descritta non poteva esistere:
un tale sistema di trasporto/diffusione sarebbe stato così
inefficiente da renderlo antieconomico. Non a caso, la strada
ferrata nacque nel Regno Unito stimolata dall’inefficienza del
trasporto animale (in particolare, dall’elevata incidenza, nel
trasporto del carbone, del costo del foraggio, su cui una
manovra fiscale del 1815 - una Corn Law - aveva introdotto
una pesante imposta).
Dalla fine del XIX secolo in poi, invece, il trasporto della
stessa quantità di energia dell’esempio descritto sopra può
avvenire mediante un piccolo elettrodotto, con un
incremento di prestazioni (pensando a costi, uomini
impiegati, e perché no, impatto ambientale) di un fattore 103104. Come si raggiunge un valore così elevato, mille volte
30
PARTE PRIMA
maggiore di quelli citati in precedenza? Grazie all’utilizzazione di un vettore di energia quasi immateriale e velocissimo, ovverosia il flusso di elettroni attraverso un filo
conduttore (la “corrente elettrica”) al posto di carri carichi
di carbone. Lo stesso è accaduto (e continua ad accadere
oggi) con l’informazione; anche in questo caso i mezzi “lenti”
e “pesanti” per la trasmissione e l’elaborazione dell’informazione vengono sostituiti con mezzi sempre più immateriali e
veloci.
Simile metodo era infatti già stato introdotto qualche
tempo prima per aumentare l’efficienza e le prestazioni della
trasmissione dell’informazione: nel 1795 Claude Chappe costruì in Francia una rete telegrafica basata su segnali ottici;
Samuel Morse nel 1843 realizzò la trasmissione telegrafica e
Antonio Meucci inventò il telefono nel 1870, ingegnerizzato
poi da Graham Bell nel 1878. Nel primo caso il vettore
dell’informazione non si basava più sul trasporto fisico del
libro o della lettera, ma su di un segnale ottico, pur non
sfruttando che in minima parte la velocità potenziale del
mezzo trasmissivo8. Gli altri inventori, in modo più efficace
per l’epoca, affidarono al flusso di elettroni sul filo la trasmissione dell’informazione: iniziò in modo ufficiale l’era
delle comunicazioni elettriche. Nella tavola 1.1 è rappresentato
un albero genealogico delle tecnologie di comunicazione, le
loro nascite, morti, e matrimoni. Curiosamente, esse sono
partite dalla comunicazione visiva del telegrafo ottico (e,
perché no, dei segnali di fumo), poi hanno usato come supporto fisico un conduttore (“rame”), poi le onde radio, per
tornare alle onde luminose (“ottico”).
8 I messaggi del telegrafo Chappe viaggiavano su una rete di torri di
segnalazione a vista, poste a distanza di qualche chilometro l’una dall’altra; un
breve messaggio (captato, ripetuto, e così via, dai semaforisti) viaggiava
complessivamente a circa 200 Km/ora sulla rete, in altre parole sfruttando
soltanto 1/3 di milionesimo della velocità che il mezzo trasmissivo (la luce)
permette.
LE RADICI STORICHE
31
Il simbolo del globo nella tavola 1.1 indica approssimativamente quando l’uso della tecnologia da locale è divenuta generale, eventualmente mondiale. In orizzontale, sono classificati i media trasmissivi. Le due zone dell’elettronica e delle
tecniche digitali e delle reti di comunicazione sono evidenziate; nella
seconda sono confluite, o lo stanno facendo, tutte le tecnologie sopravvissute. L’evoluzione è perciò un percorso che
dall’angolo in alto a sinistra prima scende ripidamente, poi
raggiunge l’angolo in basso a destra. È curioso notare
l’avvicendarsi del mezzo trasmissivo dominante (ottico,
rame, radio, e ora tutte e tre assieme in modo integrato).
La tavola 1.2, più avanti, mostra lo stesso percorso
storico fra informatica e comunicazioni dal punto di vista
delle grandi famiglie di tecnologie e di settori applicativi di
rilevante mercato. In questa tavola è inserita anche l’informazione il cui medium è cartaceo (stampa ed editoria).
L’introduzione delle tecnologie elettrica (prima) ed elettronica (poi) nel trasferimento dell’informazione ha aumentato le prestazioni dei sistemi di comunicazione di fattori
enormemente più alti di quelli citati negli esempi precedenti,
relativi all’ingegneria civile o anche alla trasmissione
dell’energia. Se l’ingegnere romano costruttore dell’acquedotto dell’Aqua Marcia avesse voluto sottoporre un disegno
per un parere ad un collega in Gallia avrebbe impiegato
dieci/venti giorni nel puro trasferimento postale, mentre a
un suo collega di oggi basta un minuto: almeno un fattore
104. Nelle comunicazioni interattive si possono trovare
fattori di miglioramento ben più alti; e con simili prestazioni
si può oggi estendere il concetto di interattivo (cioè
comunicazione nei due sensi in tempo reale) a sempre più numerosi
campi, come la videoconferenza, la TV interattiva, le biblioteche multimediali, l’arte elettronica.
Accanto ai metodi per trasmettere l’informazione, anche
le macchine e le tecnologie per memorizzare l’informazione si
32
PARTE PRIMA
sono evolute con fattori di incremento di prestazioni ancora
maggiori.
Il calcolatore usa i supporti per la memorizzazione delle
informazioni; queste ultime, a loro volta, devono alla teoria
dell’informazione il modo efficiente in cui vengono codificate. I calcolatori comunicano fra loro mediante reti di comunicazione, ad hoc o mediate da reti già esistenti nate per
altri scopi, come la rete telefonica. Infine, molta della elaborazione dell’informazione che viene applicata per adoperare
al meglio i sistemi di trasmissione (per dati, fonia, immagini,
televisione, telecontrollo eccetera) viene effettuata da dispositivi basati su calcolatori opportunamente programmati per
operare sui messaggi con la stessa velocità dell’informazione
in ingresso e in uscita (real time). Questo chiude il cerchio
che abbraccia comunicazioni e informatica.
virtualità
bit/grammo
10
dischi ottici (CD ROM)
9
10 8
10
nastri e dischi magnetici
7
10 6
10
5
10
4
10
3
microfilm
carta (stampa)
carta (scrittura a mano)
papiro / pergamena
10 2
10
1
10
0
10
-1
argilla
5000 ac
500 ac
500 1096 1450 1660 1780 1861 1915 1945 1966 1979 1987 1991 1993
2000 ac
1 foglio A4 (a stampa, doppia faccia): ~8 000 caratteri (8 bit); 4.3 g
1 foglio A4 (a mano, doppia faccia): ~800 caratteri (8 bit); 4.3 g
floppy disk (3"1/2): ~2 Mbit; 20 g
CD ROM: ~15 Gbit; 15 g
Figura 1.7 - Rapporto capacità memoria/peso
medium
fisico - ottico
rame
onde radio
rame, onde radio
onde radio, ottico, rame
anno
chappe (1795)
1800
telegrafo
morse (1843)
posta
telegrafo
meucci (1870) baudot (1870)
edison
bell (1878)
marconi (1897)
1900
telefono
radio
elettronica
telescrivente / telex
telefono
immagini
2000
fonia
radio TV
posta
telefono
telefax
elettronica
tecniche digitali e reti
Tavola 1.1
telex
ipermedialità
LE RADICI STORICHE
33
Nel grafico di figura 1.7 è rappresentata la capacità dei
supporti di memorizzazione riferita al loro peso tipico
(tecnicamente, è un modo di indicare la densità di memorizzazione, che a volte, per i supporti magnetici, viene comunemente riferita al numero di bit per unità di lunghezza del
supporto, come nell’unità di misura bpi, “bit per inch”). Un
supporto pesante, a parità di informazione memorizzata, è
più difficile o costoso da produrre, trasportare, circolare,
consultare, immagazzinare; si tratta chiaramente di un fat tore critico nello sviluppo e nella circolazione dell’informazione codificata.
La capacità dei supporti di memorizzazione, nei millenni,
a partire dai più antichi testi scritti (tavole di Ebla), è aumentata di un fattore maggiore di 1010 (1 a 10 miliardi). Abbiamo
penalizzato i supporti cartacei pensando ai soli testi, che
portano meno informazione, ad esempio, dei disegni o delle
immagini in generale; in compenso, non abbiamo applicato
principi di compressione, descritti nella sezione precedente,
con cui le densità sarebbero ancor maggiori. Chi scrisse
L’Iliade doveva usare supporti pesanti e scomodi da gestire,
trasportare e duplicare, su cui non stavano più di 10 2 bit
(? 100 caratteri) per ogni grammo. Nell’elaborare, scrivere,
correggere e trasmettere questo testo io sono facilitato da
un supporto di 20 g (dischetto magnetico) su cui possono
stare 2?106 bit: l’incremento di capacità è di un fattore 103,
come dire 1 Kg contro 1 grammo (ciononostante, questo
libro sarà probabilmente meno importante dell’Iliade). Se
poi questo libro verrà memorizzato su di un normale
CDROM, sfrutterà una densità di memorizzazione
maggiore di un fattore 107 rispetto ai supporti cartacei (10
tonnellate contro un grammo); altri supporti più raffinati o
ancora più evoluti (come i DVD, nuova generazione dei
CDROM) hanno densità ben maggiore. Oggi un intero
dizionario enciclopedico di molti volumi, in forma evoluta
34
PARTE PRIMA
di ipertesto e contenente immagini e suoni, può stare in un
CDROM di 15 grammi il cui puro costo di riproduzione è
pari a poche migliaia di lire. Se si estrapola il concetto di
densità di memorizzazione inglobando la possibilità di
accessi telematici ad informazione remota (che non ha peso
né ingombro per chi la consulta), il fattore diviene
virtualmente infinito. Un tale incremento di prestazioni è
difficile a trovarsi in altri settori tecnologici, ed è difficile
prevedere tutte le implicazioni nella società futura di simili,
oltretutto velocissimi, sviluppi: in particolare pensando alle
possibilità di diffusione dell’informazione sotto tutte le sue
forme. Ciò tiene vivo, naturalmente, il dibattito sulla
differenza fra i significati della parola informazione in termini
puramente matematici rispetto ai termini genericamente
culturali e sociali; non dimentichiamo che un carattere
misura sempre 8 bit sia che faccia parte dell’Iliade, di questo
libro, di una dichiarazione di guerra, di una frase di un gioco
di ruolo, o di un messaggio in una chat line a luci rosse su
Internet, ma qualcuno potrebbe attribuire ad esso
“contenuti informativi”diversi nei vari casi.
Nel grafico di figura 1.8, in modo simile al precedente,
sono presentate le velocità di trasmissione dell’informazione, in bit
al secondo, nella comunicazione fra due ipotetiche persone,
con le tecnologie che si sono avvicendate nei millenni. Nelle
stime (esemplificative!) relative al suono e alle immagini si
sono usati i concetti di codifica come descritti in precedenza.
Nella zona “comunicazione interpersonale diretta” si intende la somma di suoni (parlato) e immagini in movimento
(guardare l’interlocutore). I sistemi più avanzati, le reti a
larga banda, sono ormai in grado di supportare una com pleta comunicazione interattiva. Anche nel campo delle velocità il fattore di aumento delle prestazioni è spaventosa mente grande: 108 - 1010. Assieme alle velocità di calcolo, è
questa forse la massima estensione delle capacità dell’homo
35
LE RADICI STORICHE
sapiens cui una macchina ha portato.
bit/sec
10 9
comunicazione interpersonale diretta
10
10 7
10
rete locale a larga banda
8
cinema
rete locale (LAN)
televisione
6
Compact Disk audio
10 5
radio hifi stereo, disco 33 giri
radio, disco 78 giri
10
4
telefono
10 3
10
telefono dati
2
10 1
parlato
10 0
scrittura a mano
10 -1
10
macchina da scrivere
telegrafo
telegrafo ottico
corispondenza epistolare tradizionale
-2
5000 ac
500 ac
500 1096 1450 1660 1780 1861 1915 1945 1966 1979 1987 1991 1993
2000 ac
velocità di trasferimento dei dischi magnetici
Figura 1.8 - Velocità di trasmissione dell’informazione
Per scambiare informazione con un corrispondente
lontano, noi oggi possiamo scegliere fra mezzi diversi. Il
messaggio recapitato a mano (tramite un sistema postale) è
stato l’unico mezzo disponibile da un paio di millenni avanti
Cristo fino a due secoli fa; l’ordine di grandezza della sua
velocità media è oggi molto cresciuto per i lunghissimi
tragitti (migliaia o decine di migliaia di chilometri) ma
generalmente non migliorato per le piccole distanze
(centinaia di chilometri) su cui il cursus publicus romano,
attivo su tutti i territori dell’impero, garantiva il recapito con
tempi di un giorno ogni 250 Km circa. Possiamo scegliere il
normale telefono, in cui la voce viaggia ad una velocità
equivalente (si vedano i concetti di codifica e compressione nella
sezione 1.3) di 30 - 40 Kbit/sec; o un collegamento digitale
(come quello offerto ormai a bassi costi dalle Società
telefoniche) su cui effettuare una connessione Internet a 64
Kbit/sec (capace di trasmettere, esemplificando, un libro in
36
PARTE PRIMA
tre minuti, o due conversazioni telefoniche contemporanee,
o un videotelefono); se siamo (molto) più ricchi, possiamo
permetterci un collegamento a 2 Mbit/sec con cui effettuare
una videoconferenza, e tale da permettere a un centinaio di
altre persone di comunicare contemporaneamente.
Anche in questo campo valgono le considerazioni fatte
sulla densità di memorizzazione: chiunque di noi, da casa e a
bassi costi, ha oggi la possibilità di comunicare a distanza a
velocità milioni di volte maggiore di quanto non potevano
farlo, ad esempio, i matematici medievali. Resta da notare
come, pur con quei sistemi, la circolazione di idee dall’India
all’Africa e all’Europa del nord in quel periodo fu ampia:
determinò lo sviluppo della matematica come oggi la cono sciamo (in particolare, nei fondamenti dei sistemi di numerazione, dell’algebra, del calcolo simbolico).
Nel grafico di figura 1.9 viene schematizzata l’evoluzione delle velocità nell’elaborare l’informazione, facendo
riferimento ad una delle più comuni unità di misura, il
numero di moltiplicazioni al secondo. Si potrebbe obiet tare
che questa prestazione è specifica del calcolo aritmetico;
ciononostante, è sufficientemente rappresentativa, in quanto
fino a cinquanta anni fa l’automazione del calcolo riguar dava squisitamente l’aritmetica, e, dalla tecnologia elettronica in poi, qualunque altra elaborazione (compresa la gra fica, l’automazione, il word processor che sto usando per
scrivere questo testo) viene eseguita su processori in cui la
capacità di effettuare moltiplicazioni è caratterizzante di
tutte le sue prestazioni in genere.
La prima approssimazione di macchina da calc olo è stato
l’uso delle dita e della mano; l’uso di tavole numeriche inizia
agli albori della matematica, fra il 5.000 e il 2.000 a.C., men tre l’abaco, prima vera macchina, giunge più tardi. Tuttavia,
più che aumentare la prestazione velocità, questi strumenti
miglioravano la correttezza del calcolo. Lo stesso vale per le
37
LE RADICI STORICHE
calcolatrici meccaniche tradizionali. Macchine in un certo
modo di maggior prestazioni furono la famiglia dei disposi tivi analogici, non digitali / numerici, come i regoli calcolatori
e i vari metodi di nomografia (calcoli basati su grafici), che
hanno permesso di sopperire alle necessità di calcolo fino
all’avvento delle tecnologie elettroniche e al conseguente
smisurato fattore di incremento 10 10, a tutt’oggi in crescita
costante. I principi del calcolo analogico verranno discussi
nella sezione 1.6
moltipl/sec
10
9
10
8
10
7
10
6
10
5
10
4
10
3
10
2
10
1
10
0
10
-1
10
-2
calcolatore
calcolatrice a programma
nomografia, grafici
regolo calcolatore
abaco
calcolatrice
logaritmi, tavole
tavole, calcolo manuale
5000 ac
500 ac
500 1096 1450 1660 1780 1861 1915 1945 1966 1979 1987 1991 1993
2000 ac
Figura 1.9 - Velocità di elaborazione
È da notare come in tutti i campi analizzati (densità di
memorizzazione, velocità di trasmissione e velocità di
calcolo) gli incrementi di prestazioni si sono verificati tutti a
partire da questo secolo, e stanno a tutt’oggi crescendo con
un andamento più o meno esponenziale.
Le figure 1.10 e 1.11 mostrano, rispettivamente, per gli
anni recenti, l’aumento di velocità (espresso in MIPS,
ovvero “milioni di istruzioni per secondo”) delle unità
38
PARTE PRIMA
centrali (CPU, sezione 2.1) dei comuni Personal Computer
basati su processore Intel, e l’aumento della capacità dei chip
di memoria (espressa in “bit per chip”). È da notare che in
entrambi i casi le ordinate hanno una scala esponenziale. La
figura 1.11 esprime una legge empirica secondo cui la tecnologia vigente fa quadruplicare la densità di memorizzazione all’incirca ogni tre anni 9.
Figura 1.10 - Aumento di velocità delle CPU
Le memorie sono caratterizzate anche da tempi di accesso: essi determinano la
velocità della memoria, cioè la velocità con cui i dati vengono letti o scritti nella
memoria. Questo concetto, meno intuitivo dei precedenti, richiede la
conoscenza dell’architettura interna dell’elaboratore elettronico, perciò
rimandiamo il lettore alla sezione 2.1. In sintesi, le prestazioni globali di un
elaboratore elettronico dipendono dall’insieme delle tre componenti: velocità di
elaborazione, capacità della memoria, velocità della memoria. Anche quest’ultima
prestazione ha attualmente un’evoluzione paragonabile a quella delle figure
1.10 e 1.11.
9
LE RADICI STORICHE
39
Figura 1.11 - Aumento della capacità di memorizzazione
È necessario però avvertire che questo tipo di misura di
prestazioni, utile e verosimile all’interno delle tecnologie
dell’informazione, non può essere generalizzata a tu tte le
funzioni “intelligenti”: se l’uomo comune è 10 10 volte più
lento dell’attuale calcolatore sulla base delle operazioni aritmetiche, i nostri colleghi animali sono infinitamente più
lenti. Eppure le funzioni di elaborazione che tutti gli esseri
viventi correntemente realizzano - percezione, movimento,
visione, linguaggio, concettualizzazione, soluzione di problemi corporeo-cinestetici... - sono ancora ben lungi
dall’esser simulate dalla Robotica o dall’Intelligenza Artificiale, discipline basate sull’informatica o strettamente legate
ad essa. Persino nel gioco degli scacchi, che ben si presta ad
essere formalizzato in termini di algoritmi e quindi automatizzato, le prestazioni dell’uomo e dell’elaboratore sono a
tutt’oggi paragonabili, nonostante il famigerato fattore 10 10.
La risposta è semplicemente che il sistema nervoso dei vi-
40
PARTE PRIMA
venti non è simile alla macchina da calcolo, e il suo modo di funzionare non è misurabile con gli stessi parametri, anche se visto come macchina - ha campi di applicazione in parte sovrapponibili: rispetto al calcolatore o al robot, può calcolare
(solo parte degli umani lo fa, e certo più lentamente), può
riconoscere il volto di una persona (molto più velocemente
e con più sicurezza), può progettare una macchina com plessa (meglio - se consideriamo gli aspetti creativi; peggio e
più lentamente - se consideriamo gli aspetti ripetitivi), può
scendere le scale di casa e muoversi in strada in mezzo a
suoi simili (e questo per ora un robot non lo sa fare), e così
via.
Definire il modello con cui l’informazione viene
memorizzata ed elaborata negli esseri viventi, certamente
diverso da quello degli attuali sistemi artificiali, è un
problema di ricerca del tutto aperto che coinvolge molte
discipline scientifiche; è opinione di molti che i risultati in
questo campo siano candidati ad innescare il circolo
virtuoso di sviluppo di una nuova macchina e - forse - a
segnare l’arresto dello sviluppo dell’attuale tecnologia della
macchina da calcolo.
1.5. Storia: macchine e algoritmi.
Abbiamo discusso alcuni degli aspetti chiave dell’informatica di fine millennio (il calcolatore come macchina, la
fusione con il mondo della trasmissione dell’informazione, e
la crescita delle prestazioni) senza ancora aver tracciato il
percorso cronologico del calcolatore. Ma una semplice
cronologia mono-dimensionale sarebbe semplicistica. Proponiamo al lettore una chiave di interpretazione della storia
dell’informatica secondo quattro punti di vista diversi,
altrettanti “percorsi storici” paralleli. La tavola 1.2 è uno
LE RADICI STORICHE
41
schema di questa proposta. Non svilupperemo nel dettaglio
tutti e quattro i percorsi: la tavola, e il testo che segue, sono
pensati in parte come indicazione per successivi approfondimenti.
Il primo percorso è quello della Matematica, in particolare
dell’Algebra, della Geometria e del Calcolo. Il calcolatore è
una macchina programmabile, e quindi deve al suo software
almeno metà delle ragioni di esistere; i programmi sono
metodi per risolvere problemi, cui la matematica, fin dalle
origini remote, ha dedicato gran parte dei suoi contenuti.
Dai primi metodi di calcolo di cui si ha notizia, risalenti a
prima del 2.000 a.C., si sono poi sviluppati formalismi e teo rie per la soluzione di problemi - in gran parte applicativi che hanno giuocato ruoli diversi:
i. nella costruzione di procedimenti formali di calcolo in
quanto tali,
ii. nell’influenzare la progettazione di macchine per il
calcolo,
iii. nel portare alla maturazione, assieme allo sviluppo della
logica matematica, i concetti di computabilità e di macchina
universale da calcolo, cioè il modello matematico del
calcolatore,
iv. nel passare, negli ultimi recenti decenni, dai formalismi
matematici a formalismi sempre più specifici per la
programmazione, cioè ai linguaggi di programmazione,
facendo nascere una ingegneria e quindi una industria del
software.
Il secondo percorso riguarda i campi tipici della matematica
applicata nei vari periodi storici, che hanno influenzato in
modo determinante lo sviluppo della matematica stessa e
delle macchine.
A loro volta, le macchine sono indicate nel terzo percorso
42
PARTE PRIMA
della tavola 1.2: i) in grassetto se basate su procedimenti
numerici (o “digitali”), cioè in cui i dati sono manipolati in
base ad una loro rappresentazione simbolica, ii) in corsivo
se relative a rappresentazioni tabellari, iii) in carattere tondo
per quelle macchine (analogiche) in cui i dati vengono
associati a grandezze fisiche continue (posizioni, angoli,
correnti elettriche ...), e non viene perciò eseguito alcun
procedimento matematico di calcolo (quindi non è
implicato un algoritmo), come per i regoli calcolatori, i grafici,
i nomogrammi.
Il quarto percorso rappresenta l’evoluzione della parte più
astratta della matematica, la logica, che è arrivata a definire i
modelli più generali di computabilità, di macchina e di algoritmo, e, negli ultimi decenni, a porre le basi per dialoghi
con la macchina in base a linguaggi quanto più vicini alla
pura logica matematica. Peraltro, ben prima dei concet ti
formali di calcolo, computazione e computabilità, la logica
era nata dall’esigenza di chiarire e rendere formali i principi
delle corrette argomentazioni e della certezza dei procedimenti dimostrativi; solo in un secondo tempo questa tradi zione si è collegata alla problematica della costruzione di
strumenti di calcolo.
Il quinto e ultimo percorso storico riguarda il “mercato” della
macchina da calcolo (usando questa parola in modo non
specifico, in particolare senza considerazioni di tipo econo mico/politico), ed elenca, come controparte dei prototipi
tecnologici, i primi prodotti commercializzati che abbiano
significativamente influenzato il ciclo di sviluppo di una o
più macchine da calcolo.
La tavola 1.3 è simile alla precedente, ma raggruppa in
“percorsi” e “famiglie” i sistemi da calcolo a partire da due
capisaldi che rappresentano i due modi di calcolare: l’uno
basato sull’enumerazione (calcolo “numerico” o “digitale”),
l’altro basato sull’analogia, inizialmente geometrica (calcolo
LE RADICI STORICHE
43
“analogico”). Nel tempo, questi metodi, e le macchine relative, hanno usato e contribuito a sviluppare varie tecnologie:
le più rilevanti fra loro sono racchiuse in zone dai contorni
grigi.
1.5.1. La Matematica: Il pensiero algoritmico
Parte della storia della matematica tende all’automazione del
calcolo, puntando a questo scopo sulla chiarezza e sicurezza
di formalismi e regole applicabili da chiunque, anche non
dotato di intuizione matematica, per risolvere classi di problemi - non specifici problemi. La macchina da calcolo è
quindi uno dei fruitori, un fruitore estremo della matematica, un “esecutore veloce ma stupido”. Essa richiede procedimenti chiari, qualitativamente molto più chiari di quelli necessari ad un uomo di pur poca dote intellettuale, ma simili
ad essi quantitativamente. Questi procedimenti sono presenti nella storia della matematica fin dalle origini, perché
anche la matematica ha sempre avuto un suo “mercato” (si
vedano gli esempi della seconda colonna della tavola 1.2)
fatto - ovviamente - in prevalenza di non matematici.
Si può dire, in modo estremamente generale, che il
periodo che va dai primordi della matematica (5.000 a.C. 4.000 a.C., Egitto e Mesopotamia) al 1.600 d.C. è
caratterizzato dalla definizione dei problemi e la creazione di
teorie, con una grande attenzione a procedimenti risolutivi
ma con l’assenza (o con immaturità) di formalismi. È
difficile oggi immaginare la complessità delle descrizioni di
problemi algebrici e geometrici e di metodi di soluzione
senza neppure il linguaggio dell’algebra elementare. Eppure
i procedimenti per risolvere notevoli classi di problemi
costituivano, assieme alla crescita della geometria, dell’algebra (che ancora non aveva questo nome) e della teoria dei
numeri, un settore ricchissimo. Proprio l’assenza di formalismo fa sì che oggi molti di questi metodi siano simili a
44
PARTE PRIMA
moderni programmi di calcolo, più che a “formule
risolutive”. Il procedimento per il calcolo delle radici
quadrate è datato 4.000 a.C. (Mesopotamia); nella stessa
civiltà sono stati sviluppati metodi che implicavano la
soluzione di equazioni di 2o e 3o grado. Seguono poi
l’algebra geometrica di Euclide (300 a.C.), nata con Pitagora
e Talete, e il suo metodo per il calcolo per il massimo co mun divisore; il “crivello di Eratostene” per i numeri primi
(200 a.C.); i metodi aritmetici di Diofanto (200 d.C.);
l’aritmetica e l’algebra - ante litteram - di Mohammed ibnMusa al-Khuwarizmi (800 d.C.), che esercitò un’influenza
decisiva sul pensiero matematico europeo, il quale descrisse
procedimenti risolutivi di tipo moderno; la vasta opera di
Leonardo Pisano detto Fibonacci (1200 ca.) su svariati pro cedimenti formali (cui presto venne attribuito il nome ufficiale di algorismus o algorithmus); le soluzioni di equazioni di
grado superiore da parte di Cardano (1545); l’invenzione dei
logaritmi per il calcolo numerico da parte di Napier e Briggs
(fine secolo XVI). Questi sono solo alcuni degli esempi più
noti della fecondità del pensiero matematico delle origini
nello sviluppare procedimenti che, lentamente, hanno por tato alla definizione moderna di algoritmo, o procedura effettiva di calcolo (più avanti in questa sezione). Persino il noto
metodo chiamato “di Erone” o “di Newton” per il calcolo
iterativo della radice quadrata, che spesso nei corsi di base di
informatica ha il ruolo di primo esempio introduttivo del
concetto di algoritmo, è in realtà ben descritto in una
tavoletta mesopotamica datata 2.000 a.C. circa.
Menzione speciale è dovuta a Fibonacci, citato più sopra.
Il suo liber abaci infatti diffuse più di altri testi
contemporanei (come il Carmen de Algorismo di Alessandro di
Villedieu o l’algorismus Vulgaris di Giovanni di Halifax) in
Europa le cifre indiane - note impropriamente come
“arabe” - e l’attuale metodo di numerazione decimale,
LE RADICI STORICHE
45
premessa per qualunque sistematicizzazione del calcolo. La
ricorrente parola “algorismus” (oggi algoritmo), era il ricordo
fonetico del nome del matematico arabo Mohammed ibn-Musa
al-Khuwarizmi; gli autori europei iniziarono ad usare quel termine col significato prima di “metodo di rappresentazione”,
che divenne poi “metodo di calcolo”, e oggi è una
“procedura risolutiva formale”. Ciò testimonia l’importanza
del suo libro, uno dei più famosi nella storia della matema tica, che cambiò letteralmente lo sviluppo del pensiero matematico europeo, grazie ai suoi estimatori fra cui il già citato Fibonacci. Il libro si chiamava Al-jabr wa’l muqabalah;
l’importanza del testo fu tale che la prima parola del titolo
generò il termine attuale algebra, pur non rappresentando
una traduzione corretta (la traduzione esatta del titolo è a
tutt’oggi ignota). Nella prefazione Al-Khuwarizmi scriveva
che la sua era “una breve opera sul calcolo” perché chiunque potesse servirsene “nei casi di eredità, donazioni, distruzioni, sentenze e commerci” e anche per “misurazioni di
terreni, scavi di canali, calcoli geometrici ed altre cose”.
Questa frase rende molto bene lo spirito algoritmico
(l’interesse per i procedimenti di calcolo) tipico della matematica applicata delle origini.
Menzione speciale merita anche l’invenzione delle tavole
numeriche, anch’essa mesopotamica, che per tutto il primo
periodo della matematica ha forse avuto il ruolo più evoluto
nel calcolo applicato. Le tavole sono memorie permanenti (in
terminologia informatica moderna) con risultati pre-calcolati
per uno specifico problema, in modo che alcuni risultati
(corrispondenti ad un insieme di dati di partenza) siano di sponibili immediatamente, mentre tutti gli altri risultati si
ottengono con una semplice procedura di calcolo (detta di
solito interpolazione) a partire da dati simili. Fino a un decennio fa l’uso di tavole era comunissimo, e faceva parte inte grante dei programmi ministeriali per la scuola. In una ta -
46
PARTE PRIMA
vola trigonometrica, ad esempio, il valore del seno di un an golo è pre-calcolato (“tabulato”) per passi di un grado; il
valore del seno di un angolo intermedio viene ottenuto per
consultazione (in termine informatico si potrebbe dire indirizzamento, o look-up) e per successiva interpolazione.
Si tratta di un procedimento di calcolo estremamente efficace che affianca ad un algoritmo (“look-up più interpolazione”) una memoria a cui è associato un metodo di ricerca:
quindi, il prodromo di una macchina da calcolo, o quanto
meno di una meccanizzazione del calcolo, in cui parte delle operazioni sono realizzate dall’uomo. Oltre alle tavole mesopotamiche ed egizie, fondamentale fu l’almagesto di Tolo meo (I secolo a.C.) dedicato alla trigonometria, primo
esempio di compendio di tavole, mentre l’invenzione del lo garitmo da parte di John Napier e di Henry Briggs (fra il
1614 e il 1617) aprì la strada all’uso esteso delle tavole nei
calcoli aritmetici. L’aumento di prestazioni nel calcolo mediante i logaritmi fu enorme; raramente una nuova scoperta
ha incontrato altrettanta rapida e fortunata diffusione
quanto i logaritmi e il loro impiego sotto varie forme: ta vole, regoli, grafici. Si può dire ad esempio che i logaritmi, direttamente o indirettamente, hanno sostenuto la maggior parte
della richiesta di calcolo numerico tecnico-scientifico per tre secoli, fino
alla diffusione del calcolatore elettronico.
CAMPI
APPLICATIVI
ALGEBRA, GEOMETRIA, CALCOLO
TAVOLE, STRUMENTI, MACCHINE
LOGICA E COMPUTAZIONE
PRODOTTI COMMERCIALI
5000 ac
babilonia egitto
religione
agrimensura
equazioni, radici, aree
2000 ac
talete pitagora
euclide archimede 500 ac
apollonio eratostene tolomeo
diofanto
conteggio digitale
tavole numeriche
abaco
numeri, equazioni
trigonometria
proto-algebra calcolo applicato
almagesto: trigonometria
500
al-Khuwarizmi
numerazione "araba"
fibonacci: liber abaci
regiomontano
viète cardano galileo
napier briggs
keplero
cartesio fermat pascal
newton leibnitz
eulero
laplace lagrange
gauss cauchy
babbage
riemann
boole
frege
russel
gödel
turing
shannon
von neumann
1096
1450
1660
1780
nascita dell'algebra
equazioni, espressioni
contabilità
diritto
aritmetica, algebra, trigonometria e geometria
nascita dell'algebra simbolica
metodi di calcolonotazione decimale
nascita del formalismo
calcolo differenziale
maturità del calcolo e del formalismo
analisi matematica (procedimenti infiniti)
cartografia
astronomia
architettura
navigazione
contabilità industriale
1861
matematica moderna
logica matematica
statistica
commercio
1915
1945
cibernetica
teoria dell'informazione
ingegneria
armamenti
1966
linguaggi
1979
1987
spazio
automazione (industria)
automazione (consumo)
comunicazioni
di
ufficio
1991
programmazione
1993
calcolatrice schickard
calcolatrice leibnitz
calcolatrice pascal
grafica
lavoro personale
logica greca
compasso di galileo (1606)
logica scolastica
numerazione "araba"
tipografia (Gutenberg)
compasso di galileo
bastoncini di napier
logaritmi
regolo logaritmico (gunter, oughtred)
effemeridi
de prony
statistica
schede jacquard
finanza regolo logaritmico aritmetro (colmar)
babbage scheutz addizionatrice a tastiera
comptometro (felt)
tabulatrice (hollerith) registratore di cassa
calcolatrice di pascal (1641)
primi prototipi
de prony (1755-1838)
macchine commerciali
aritmetro (colmar) (1820)
macchina di Sheutz (1850)regolo calcolatore logaritmico (Taverier-Gravet) (1850)
Burroughs (~1870)
Hollerith's Tabulating Machines Co.(1878)
Remington (1873)
registratore di cassa (Patterson) (1883)Linotype (1886)
International Business Machines (IBM) (1911) meccanografica
zuse calcolatore analogico
Compagnie des Machines Bull (1931)
turing atanasoff aiken shannon post
Remington (1950)
mark I eniac edsac
eckert mauchly burks goldstinevon neumann
fotocomposizione
grandi calcolatori commerciali
Olivetti
(1959)
Digital
Equipment Co. (1957)
wilkes bigelow stiblitz shannon
elettronica: I generazione
General Electric Co. (1964) Bell Laboratories: UNIX (1969)
minicalcolatori
II generazione
Honeywell (1970) Nippon electrical Co. (NEC) (1972)
logica
computazionale
microcalcolatori
Intel:microprocessore 8080 (1974)
III generazione
Microsoft: MS-DOS per IBM PC (1981)
stazioni di lavoro personali e reti
INTERNET
IV generazione
Sun
Hewlett-Packard
babbage
boole
frege
logica moderna
calcolatori economici
supercalcolatori
arte
"unbundling"
industria
del
globalità
Tavola 1.2
software
48
PARTE PRIMA
Il principio del calcolo tabellare è così radicato nella nostra cultura tecnica da non esser stato scalzato completa mente dal calcolo elettronico; inoltre, una grande quantità di
software per il calcolo numerico usa, al suo interno, il calcolo tabellare, così come fanno la maggior parte dei coprocessori matematici dentro la CPU degli attuali calcolatori. I
grafici e i nomogrammi, concettualmente simili alle tavole 10,
si sono sviluppati a partire dal secolo XVII e rappresentano
tutt’oggi uno strumento diffusissimo. Se le tavole numeriche
sono uno strumento per il calcolo digitale o numerico per definizione, grafici e nomogrammi sono l’esempio più semplice
di rappresentazione analogica, in cui i dati non sono rappresentati mediante simboli (ad esempio, cifre arabe), bensì
mediante un’analogia grafica (che può essere anche meccanica, come nel regolo calcolatore, o elettrica nei calcolatori analogici ormai in disuso), sotto forma di curve e grafici in piani
cartesiani. Aggiungiamo ancora che, in epoca industriale, il
calcolo tabellare sosteneva gran parte della matematica
applicata
all’ingegneria
(progettazione,
topografia),
all’economia (statistica), alla navigazione (effemeridi), alla
guerra (balistica e calcolo del tiro); e che la produzione e la
diffusione delle tavole numeriche sono sostanzialmente
problemi di competenza dell’editoria. Non è affatto un caso
che le macchine da calcolo dell’800 di Babbage e di Scheutz
comprendessero una raffinata “interfaccia tipografica”
capace di creare direttamente i blocchi di composizione
tipografici per tavole numeriche. Il legame fra calcolatore e
“informazione” passa, non per caso, attraverso l’editoria
anche tramite il calcolo tabellare.
10 Un nomogramma è un grafico, con scale numeriche sugli assi di riferimento,
che mette in relazione valori di tre o più variabili; rispetto ad una tavola
numerica, che riporta solo valori discreti, ha una rappresentazione
prevalentemente continua (sezione 1.6). Il calcolo si effettua cercando, per
determinati valori di alcune variabili, i corrispondenti valori di altre, seguendo
i tratti dei grafici.
LE RADICI STORICHE
49
Il secondo grande periodo della storia della matematica
va dal 1.600 al ’900; è il periodo della formalizzazione
(iniziata con Fermat, Descartes, poi Newton e Leibniz,
Eulero, Lagrange, Laplace, maturata con Gauss e Cauchy),
in cui i sistemi più noti sono stati sviluppati e formalizzati
(anche se non in senso moderno): dall’algebra al calcolo dif ferenziale e integrale, la geometria analitica e proiettiva, la
matematicizzazione della fisica. In questo periodo, l’uso di
un vero formalismo (la messa a punto della notazione alge brica oggi a noi comune è più o meno conclusa con Eulero
verso la metà del secolo XVIII), e la nascita di teorie più
ampie crearono uno stato di conoscenze maturo per conce pire un calcolo veramente automatico, che non tarderà molto
a veder la luce.
Dal punto di vista dell’informatica, in questo periodo
vengono gettate le basi per una evoluzione della matematica
verso una “metamatematica” che avrà la sua maturità fra la
fine dell’800 e la prima metà del XX secolo. La componente
più significativa di questo processo è il progressivo recupero
della logica da metodo di indagine filosofica per tramutarla in
logica matematica, ovvero, per dotarla di un formalismo (e di
un calcolo di tipo algebrico) con lo scopo di automatizzare
non solo la soluzione dei problemi, ma addirittura lo stesso
pensiero matematico; si potrebbe dire che se la matematica precedente si poneva il problema di formalizzare un procedimento risolutivo ideato da un matematico, la logica mate matica si pone il problema di “automatizzare il matema tico”. Solo questo obbiettivo (benché ambizioso e irrisolto)
ha permesso di pervenire ad una definizione astratta, gene rale e non ambigua (in altri termini: matematica in senso
stretto) dei concetti di macchina universale da calcolo, di computabilità (cioè cosa è calcolabile e cosa non lo è) e di programma.
A questi concetti matematici si è giunti, in particolare, grazie
ai lavori di Alan Turing nella metà degli anni ’30 (sez. 1.7).
50
PARTE PRIMA
Solo nel secolo XVII Gottfried Wilhelm Leibniz, inventore fra l’altro di una delle prime macchine calcolatrici meccaniche, elaborò in modo profondo una sorta di algebra
della logica, con un calcolo di tipo algebrico per sostituire il
sillogismo, e simboli per rappresentare concetti. Nell’idea di
Leibniz questo avrebbe portato ad un linguaggio universale
in cui verità ed errore sarebbero stati ridotti a un calcolo automatico; e ad un simile automatismo deduttivo si sarebbero
potute ricondurre anche nuove scoperte. Sminuito dai contemporanei, il progetto di una logica algebrica fu ripreso
solo verso la fine del XIX secolo da George Boole (che
peraltro non conosceva le opere logiche di Leibniz) e,
successivamente, da Augustus De Morgan. Essi facevano
parte di un ambiente matematico inglese nato attorno al
Trinity College di Cambridge, nel quale evidentemente
iniziava a circolare uno “spirito del calcolo automatico”; tra
gli altri personaggi, vi era anche Charles Babbage, padre del
calcolatore programmabile, che incontreremo più oltre.
Boole diede una forma operativa all’algebra della logica e al
calcolo logico, al punto tale che il suo calcolo delle proposizioni
(detto impropriamente algebra di Boole) è oggi lo strumento
matematico corrente per rappresentare i circuiti logici e per
la logica di controllo dei linguaggi di programmazione. Il suo
saggio Esame delle leggi del pensiero (1854) è considerato una
pietra miliare nell’informatica.
1.5.2. Logica, matematica e informatica
È bene precisare che la logica cui ci riferiamo è una parte
della logica tradizionale, o, se si preferisce, una saldatura,
relativamente recente, fra logica filosofica e matematica, con
interessi specifici ancor più recenti, in particolare, riguardanti lo studio dell’automazione del calcolo e del pensiero
matematico. Per logica tradizionale intendiamo “quella parte
della filosofia che studia i metodi e i principi che consentono di distinguere, nelle loro strutture formali, i ragionamenti corretti da quelli scor-
LE RADICI STORICHE
51
retti”. Almeno fino a Leibniz, matematica e lo gica percorsero
binari paralleli, sostanzialmente separati: da una parte il
calcolo, oggetto principale della matematica, e dall’altra
l’evoluzione del concetto di teoria e di dimostrazione, i cui
aspetti di forma e correttezza erano appunto l’oggetto
principale della logica classica; Euclide, in questo secondo
settore, aprì una strada con i suoi famosi Elementi, primo
tentativo (300 a.C. circa) di sistemazione formale di una teo ria (la geometria), con un approccio rimasto senza sostan ziali mutamenti per secoli.
Si può dire che per tutto quel periodo la dimostrazione
non era un calcolo (cioè non avveniva secondo procedure
codificate formali), e restò una sorta di “arte” sino forse alle
idee innovative di Leibniz (che non ebbero però seguito
immediato) e poi a Boole (con il quale la logica era final mente simbolica e dotata di un inizio di calcolo formale).
Da questo punto i due binari si sono riuniti, perché per la
prima volta era possibile scrivere formule logiche ed applicare
un calcolo logico - per ora, di sole proposizioni prive di variabili,
quindi un’algebra “povera” espressivamente. Se la logica di
Boole era espressivamente troppo povera per esprimere alcuna teoria interessante, con i passi successivi dovuti in particolare a David Hilbert (con l’assiomatizzazione della geometria e con un programma di formalizzazione delle fonda zioni logiche della matematica), e a Frege (con la logica dei
quantificatori, che estendono in modo decisivo la potenza
espressiva del calcolo logico), la saldatura fra procedimenti
dimostrativi e di calcolo fu completa. Si può dire che
l’informatica teorica, dedicata allo studio dei procedimenti
risolutivi e ai modelli generali di macchine da calcolo, nasce
in questo preciso punto della storia.
Il processo che ha portato alla definizione dei concetti
chiave per l’informatica - algoritmo e macchina da calcolo - si
può sintetizzare, rinunciando per semplicità al rigore nei
52
PARTE PRIMA
termini, in alcuni passi essenziali:
a) si estende il concetto di “problema” a calcoli che non
hanno a che fare con numeri, ma con simboli qualun que,
allargando ad essi la definizione di calcolo;
b)
ci si inizia a porre il problema “fondazionale” se ogni
problema può essere risolto in linea di principio da un
algoritmo, e quindi di definire la classe di tutti gli algoritmi possibili (sezione 1.7);
c) si definisce in modo formale una macchina astratta in
grado di eseguire la classe di tutti i possibili algoritmi,
cioè la macchina più generale pensabile, adatta a pro blemi simbolici in generale (e quindi anche numerici)
(sezione 1.7);
d) si congettura che questa macchina universale sia così
generale da essere equivalente e tutte le macchine pensabili;
e) si dimostra l’equivalenza fra macchine fisicamente realizzabili (in particolare, la macchina di Von Neumann,
sezione 2.1) e la macchina universale.
Commenteremo questa sequenza di passi nel seguito e
nella sezione successiva, dedicato appunto alla teoria della
computazione e alla macchina di Turing. Ma torniamo
all’evoluzione della logica matematica tra la fine del secolo
XIX e la prima metà del secolo XX (in particolare, con
Frege, Hilbert, Russel, Gödel).
Il problema fondamentale ruotava attorno al concetto di
algoritmo, o procedimento algoritmico, che aveva trovato finalmente una precisa definizione: una procedura effettiva di soluzione di un determinato problema, cioè una serie ordinata e finita di
operazioni semplici, regolata da punti decisionali, che porta ad un
risultato, se questo esiste; altrimenti, comunque, porta alla notificazione del fallimento.
LE RADICI STORICHE
53
Un problema per cui esiste un algoritmo si dice computabile.
Questa definizione ribalta, in un certo senso, con il con cetto ingenuo di “calcolabile”. Infatti, anziché porsi il pr oblema (mal posto) se un certo problema specifico è risolu bile, si definisce una procedura effettiva (universale) con cui calcolare (risolvere) e si conclude: solo i problemi che posso
risolvere con questo metodo formale (cioè con un algoritmo) sono computabili. Questo ha alcune importanti con seguenze:
1) il calcolo viene uniformato in un unico modo generale
(l’algoritmo), premessa indispensabile per ragionare in
modo formale sui problemi e sui modi per risolverli;
2) la definizione, anche se non dà strumenti per dimostrare
se un certo problema è risolubile, dà invece strumenti
per dimostrare se esso sia eventualmente non risolubile;
3) lo schema generale del calcolo della procedura effettiva
fornisce una metrica per definire quanto un problema
(ovvero: la sua soluzione) sia complesso.
Il passo successivo sarà definire una macchina calcolatrice
astratta (macchina di Turing) in grado di realizzare la procedura effettiva, e riferire ad essa la computabilità o meno di
tutti i problemi, e l’efficacia di ogni altra macchina da calcolo. La procedura effettiva diventa perciò il “metro campione” del concetto di calcolo e soluzione, non solo dal
punto di vista della possibilità di una soluzione, ma anche
dal punto di vista della sua complessità. Recentemente, in
particolare da parte di chi studia i modelli della computazione biologica (Connessionismo, Reti Neurali, Neuroscienza), è stata formulata l’ipotesi che esistano modelli di
calcolo che non seguono il modello di Turing.
David Hilbert, fra il 1905 e il 1918, enunciò una storica
congettura che si può riassumere nella frase seguente: nes-
54
PARTE PRIMA
sun problema matematico è tale che non possa, per esso,
venir definita una procedura effettiva per risolverlo (e
quindi ogni problema matematico è computabile). Benché i problemi cui Hilbert si riferiva fossero di matematica astratta,
questa congettura riguarda da vicino la possibilità di realizzare davvero il calcolatore universale, quello cioè che, dotato di
un opportuno programma, è in grado di risolvere qualunque
problema si possa formulare. O, rovesciando i termini più
concretamente, se sia possibile decidere a priori se una certa
macchina è in grado di risolvere un certo problema. Il pro blema che Hilbert affrontò era in un certo senso un pro blema universale: dato un formalismo logico con cui esprimere una
teoria, è possibile scrivere un algoritmo che sia sempre in grado di dire
se una qualunque affermazione sia vera o falsa in questa teoria? Se sì,
ne conseguirebbe la possibilità di scrivere un algoritmo per
la soluzione di qualunque problema esprimibile in quella teoria. Questo problema fu chiamato da Hilbert
Entsheidungsproblem (letteralmente, “problema della decisione”). I lavori di Kurt Gödel, Alonso Church, Stephen
Kleene, Emil Post, Alan Turing e molti altri trovarono
all’inizio degli anni ’30 molti problemi, oltre
all’Entsheidungsproblem stesso, dei quali dimostrarono che per
essi non poteva essere definito alcun algoritmo, che cioè erano non
computabili. Il concetto di algoritmo e di computabilità di venne quindi molto più concreto.
È impressionante come l’aver trovato dei problemi “che
non possono essere risolti da nessuna macchina da calcolo
pensabile” sia avvenuto quindici anni prima che il primo
calcolatore vedesse la luce. Il primo che riavvicinò il concetto completamente astratto di computabilità ad una
“macchina possibile” fu Turing, con il famoso saggio On
Computable Numbers with an Application to the
Entsheidungsproblem (1936), in cui per la prima volta viene
formalizzato un modello di macchina da calcolo dotat a di
LE RADICI STORICHE
55
memoria, ingresso, uscita, capacità di elaborazione, pro gramma. Benché questa macchina, universalmente nota
come “macchina di Turing”, fosse pur sempre un’astrazione11, essa creò un efficace ponte concettuale e
intuitivo fra la logica astratta e una “macchina” nel senso
fisico del termine, influenzando in modo determinante lo
sviluppo di macchine reali (il calcolatore elettronico programmabile) in modo che rispettassero i principi formali e
certi della logica matematica. È da ricordare che, nel 1938,
Claude Shannon dimostrò l’equivalenza tra circuiti elettrici
elementari ed operazioni logiche dell’algebra di Boole,
aprendo la strada alla realizzabilità fisica di una macchina
simile a quella di Turing; e che una tesi, elaborata da Church
e da Turing stesso, nota come tesi di Church, espone la congettura che sia possibile definire in infiniti modi equivalenti il concetto
di algoritmo, e che come conseguenza si possano pensare infinite macchine da calcolo diverse ma equivalenti. L’importanza della
formulazione di Turing per le idee di macchina, algoritmo, programma, computabilità è tale che ad essa è dedicata la sezione
1.7 di questo libro.
La nascita del calcolatore elettronico (1945) ha segnato
un improvviso cambiamento nell’evoluzione della componente algoritmica dell’informatica. L’accento, da allora ad
oggi, si è spostato sugli aspetti più ingegneristici e industriali
della programmazione; in particolare, sugli strumenti per
programmare. È iniziato perciò il periodo di sviluppo del
software e dei linguaggi di programmazione, cui è dedicata una
sezione nella seconda parte del libro. Fino agli anni ’70 si è
assistito ad una vera e propria babele, cui ha fatto seguito un
Non sarebbe, oggi, in linea di principio, impossibile costruire fisicamente
una macchina di Turing, o, meglio, una sua ragionevole approssim azione (la
macchina di Turing richiede una memoria infinita). Per ragioni tecnologiche
sarebbe molto poco efficiente. Se ne costruiscono comunemente modelli
software a scopo didattico.
11
56
PARTE PRIMA
periodo di assestamento su pochi linguaggi ad amplissima
diffusione. Pari percorso è avvenuto nel cosiddetto software
di base, cioè il software fornito assieme al calcolatore che
fornisce le funzionalità di base: il sistema operativo. Gli aspetti
teorici sono spesso finiti in secondo piano, per lasciar posto
agli aspetti ingegneristici e commerciali che rappresentano
oggi la parte rilevante del mercato dell’informatica.
Un evento assai importante e poco noto è stata l’in troduzione di una norma negli USA negli anni ’70, con cui
le offerte dei prodotti complessi (non solo informatici)
dovevano essere disaggregate nelle loro varie componenti (il
cosiddetto umbundling, disaggregazione). La disaggregazione
fra hardware e software scatenò lo sviluppo di aziende di
software (le software house), passando da una situazione di oligopolio alla diversificazione attuale, permettendo la vera nascita di una industria del software autonoma da quella
dell’hardware. Unito alla ormai grande compatibilità fra
hardware di diversi produttori, ciò ha reso il software un
prodotto anomalo rispetto a quelli tradizionali della civiltà
industriale, visto che ha tutte le caratteristiche della
“macchina” pur essendo un immateriale prodotto
dell’ingegno (come un libro, una poesia, una canzone); pro babilmente, le implicazioni socioeconomiche di questa apparente anomalia non sono ancora bene comprese.
1.5.3. Le macchine
In tutto il periodo dalle origini alla nascita del calcolatore
a programma (il primo prototipo, solo parzialmente realiz zato, è nella prima metà del XIX secolo, ma solo dopo il
1945 si può parlare di una macchina - elettronica - veramente completa) la macchina da calcolo è concettualmente
un marchingegno che realizza solo una parte del calcolo
automatico, vuoi nell’esecuzione di operazioni matematiche,
vuoi come supporto di memorizzazione temporaneo o
57
LE RADICI STORICHE
permanente, sotto diretto controllo dell’uomo che detiene le
procedure per il calcolo, e lo esegue, secondo gli schemi di figura 1.12. In questa figura, lo schema di sinistra rappresenta,
concettualmente, un qualunque procedimento; lo schema
centrale evidenzia il rapporto uomo-macchina con due diversi ruoli simbiotici; qui la “macchina” può essere un semplice abaco, una calcolatrice, una tavola numerica, o anche
solo “carta e penna”. Oltre alle capacità di calcolo vero e
proprio, questo schema evidenzia due livelli principali di
memorizzazione, uno a breve termine (nel solo orizzonte
della particolare procedura di calcolo) e uno a lungo termine
(la competenza sulle procedure). Lo schema di destra è la
struttura logica - oggi diremmo architetturale - delle diverse
componenti (controllo, calcolo, memoria) coinvolte: il let tore confronti gli schemi riportati in figura 1.16, quello della
macchina di Turing (sezione 1.7), e del calcolatore attuale
(sezione 2.1 e segg.).
dati in
MEMORIA A LUNGO TERMINE:
procedure di calcolo
elaborazione
dati out
MEMORIA A BREVE TERMINE:
dati temporanei (foglio, tavoletta)
dati
temporanei
organizzati
(abaco)
dati
temporanei
e
risultati
precalcolati (tavole, grafici)
dati temporanei e procedure
automatiche (calcolatrice)
Figura 1.12 - Generico procedimento di calcolo
58
PARTE PRIMA
In questo schema rientra, anche se propriamente mac china non è, il conteggio enumerativo e/o digitale, compiuto con
l’aiuto di sassolini (da cui il termine calculus), di tacche su
utensili, eccetera, e con l’uso delle dita (da cui il termine digitale e l’inglese digit per “cifra”). Tale metodica, che si può
far risalire al 4.000 - 5.000 a.C., sopravvive ancora ai giorni
nostri. In generale, la storia delle macchine da calcolo non è
lineare, ma ad albero; e la tavola 1.3 rappresenta, infatti,
l’albero genealogico delle macchine da calcolo: una sorta di
espansione della colonna “tavole, strumenti, macchine”
della tavola 1.2. In essa sono distinte le grandi aree della
tecnologia dominante: meccanica, elettronica, delle comunicazioni; e vi sono due percorsi diversi, l’uno di tecniche numeriche o digitali e l’altro di tecniche analogiche (abbiamo già
introdotto questi termini, in particolare nella sezione 1.3
sulla matematica dell’informazione; ulteriore approfondimento, assieme al concetto di calcolo analogico, sarà nella
sezione 1.6). Commenteremo ora le tecniche digitali.
La prima macchina fu l’abaco, in un certo senso
un’estensione delle dita usate come memorizzazione. Convenzionalmente l’abaco si fa datare al 500 a.C. (abaco ro mano, di cui un esemplare tipico è schematizzato in figura
1.13, a sinistra), ma caratteristica di questa macchina è di esser stata inventata indipendentemente nelle principali civiltà:
greco-romana, americane precolombiane, cinesi e indiane
(in figura 1.13, a destra, è mostrato un abaco greco dello
stesso periodo). Tutte le forme di abaco hanno in comune
serie di palline (o comunque piccoli oggetti mobili) divise in
gruppi, a rappresentare frammenti dei risultati parziali ad
ogni passo del calcolo. A seconda del sistema di numera zione (in Europa quella decimale dal 1200 in poi) il significato delle varie palline e dei gruppi cambia, ma simile è la
procedura iterativa per effettuare calcoli. Il classico pallottoliere per bambini è un caso di abaco semplice; ma abachi
LE RADICI STORICHE
59
per il calcolo professionale sono tuttora in uso corrente in
molti paesi dell’est asiatico: ex-URSS, Cina, Giappone. In
quest’ultimo paese ha il nome di soroban e permette sorprendenti (e pittoresche) velocità di calcolo. Costruire un algoritmo per l’uso dell’abaco è uno degli esercizi più tipici della
didattica di base in informatica (a cui chi legge la sezione se conda sui linguaggi di programmazione potrebbe provare a
sottoporsi).
Nel secolo XV, senza nessuna reale innovazione tecnologica, si aprì un interessante dibattito fra abacisti e algoristi: i
secondi sostenevano la superiorità del calcolo “carta e
penna”, senza l’uso dell’abaco. Si trattava di un segnale della
crescente maturità del formalismo matematico, che,
sull’inizio del 1600, stimolò alcuni eventi molto importanti.
Mentre Napier e Briggs definivano i logaritmi, Napier stesso
inventò una protomacchina da calcolo, nota come bastoncini
di Nepero, consistente in varie serie di tessere numerate,
muovendo le quali secondo precise regole era possibile calcolare più estesamente che con l’abaco; Napier pensava in
particolare alla forte domanda di calcolo applicato alla pub blicazione di tavole trigonometriche e astronomiche. I suoi
bastoncini non ebbero successo commerciale forse per la
morte prematura del loro inventore.
Figura 1.13 - a) abaco romano; b) abaco greco
60
PARTE PRIMA
Le prime macchine calcolatrici meccaniche furono tre,
ideate in rapida successione in meno di 50 anni nel secolo
XVII. Wilhelm Schickard, professore a Tübingen, ideò una
calcolatrice meccanica (che andò presto distrutta, cosicché i
suoi principi costruttivi non furono divulgati) in grado di
effettuare le quattro operazioni aritmetiche per i propri calcoli astronomici; Blaise Pascal, sollecitato dall’esigenza di
calcolo contabile del padre, costruì ex novo una calcolatrice
capace delle sole addizioni e sottrazioni (figura 1.14, sinistra); Leibniz costruì una macchina (figura 1.14, destra) di
pari capacità a quella di Schickard, ma partendo da principi
costruttivi diversi. L’addizionatrice di Pascal (detta pascaline)
ebbe addirittura un certo successo commerciale, il primo
della storia. Entrambe le macchine (di quella di Schickard si
sa poco) introducevano principi costruttivi che sono rimasti
esattamente gli stessi per tutte le successive macchine calcolatrici meccaniche fino alla loro recente scomparsa, avvenuta dieci o venti anni fa: la posizione di una ruota dentata
corrisponde al valore di una cifra decimale, cosicché addizionare o sottrarre diventa ruotare una ruota di un numero discreto di
passi. Il principio del riporto corrisponde invece all’accoppiamento meccanico di più ruote; moltiplicazione e
divisione erano ricondotte al principio delle addizioni e sottrazioni ripetute.
Figura 1.14 - a) macchina di Pascal; b)macchina di Leibniz
Nascita della Città
Civiltà sumero-akkadica
Grecia: età del bronzo
Egitto: VII - IX dinastia
Ellenismo
Civiltà romana
Declino dell'Impero romano
5000 ac
2000 ac
500 ac
conteggio enumerativo (4000 ac)
Geometria
Tavole (Ahmes; Yale; Rhind) egiziane e babilonesi
conteggio digitale (1500 ac)
abaco (500 ac)
500
Egira
1096
Monachesimo
Islam
1450
Conquiste e colonizzazioni
Capitalismo finanziario e commerciale
Prima età industriale
1660
Europa dei Lumi e degli Enciclopedisti
1780
Imperi coloniali
Rivoluzione Industriale
Le grandi Rivoluzioni
1861
Italia unita
ferro/carbone -> chimica/elettricità/elettronica
1915
I guerra mondiale
Radio commerciale
II guerra mondiale
Rete telefonica mondiale
Sputnik I
Mondovisione
MECCANICA
calcolatrici: Shickard (1623) Pascal (1642) Leibnitz (~1670)
Nomografia
analytical engine (Babbage 1820-60)
difference machine (Scheutz, 1864)
comptometro (Felt 1880)
planimetro (Amler 1864)
addizionatrice
MECCANICA
calcolatrice elettromeccanica
1945
0-gen: elettromeccanici Z1 (Zuse 1938) Z3 (Zuse 1941) MARK I (1944)Bell (1945)
1-gen: tubi termoionici ENIAC (1946) EDSAC (1949)
Calcolatore Analogico
2-gen: transistor (~1956) 3-gen: IC (~1965)
1966
1979
calcolatrice elettronica
Mutamento degli equilibri politici
Risorse e demografia
compasso galileiano (1597)
regolo calcolatore (Guater1625) pantografo (Scheiner1631)
abaco / algorismo
1987
1991
rubrica elettronica
palm computer
4-gen: VLSI (~1970) microprocessore (Intel 8080, 1975)
Telematica
Personal Computer IBM (1980)
tecnologia RISC (1985)
MIMD a basso costo
Work Station: barrirea dei $ 15 000
Realtà Virtuale su PC
Multimedialità
Internet
1993
COMUNICAZIONI
Tavola 1.3
ELETTRONICA
Grafici
62
PARTE PRIMA
La calcolatrice colmò per due secoli la richiesta residua di
calcolo automatico, quella che tavole e calcolo “carta e
penna” non riuscivano a soddisfare (ad esempio, perché occorreva compilare nuove tavole, o per le lunghe addizioni per le quali le tavole erano inutili - che divenivano sempre
più necessarie con il crescere dell’economia e della contabilità aziendale), e aprì comunque un percorso che continua
oggi con le calcolatrici portatili (ovviamente divenute elettroniche).
Il percorso storico delle calcolatrici ha le sue pietre miliari, tutte sul versante “mercato”: Charles Thomas Colmar
produce in Francia all’inizio dell’800 la prima calcolatrice
industriale, che fu dotata della prima tastiera negli USA a
metà del secolo, per poi sfociare nel comptometer di Dorr E.
Felt alla fine ‘800, la classica calcolatrice meccanica moderna, dotata successivamente di motore elettrico e passata
attraverso infiniti restyling fino a un paio di decenni fa. Ac canto al puro calcolo, e sempre rispettando lo schema di fi gura 1.12, fra il ’700 e l’800 si andava però formando
l’esigenza di veri e propri supporti di memoria; il concetto di
memorizzazione dell’informazione era del tutto estraneo alla matematica - e tale rimase fino a Turing - quindi esso si formò
in modo sostanzialmente intuitivo, empirico e su base tec nologica.
Per la prima volta, l’innovazione (in questo caso, una tec nologia per la memorizzazione di informazioni) venne dal
mondo della fabbrica - oggi diremmo dell’automazione della
fabbrica: sul finire del XVIII secolo Joseph-Marie Jacquard
inventò il telaio automatico che porta ancor oggi il suo
nome (figura 1.15).
63
LE RADICI STORICHE
Figura 1.15 - Telaio Jacquard
Nel suo telaio le sequenze operative della macchina venivano comandate da un nastro di schede di cartone perforate
larghe qualche decina di centimetri, visibili in figura; passando attraverso un congegno di lettura meccanico, la di stribuzione dei fori (oggi diremmo la codifica) comandava i
movimenti necessari nelle varie fasi operative della tessitura
(oggi la definiremmo programmazione della macchina, e la macchina stessa si chiamerebbe a controllo numerico). Jacquard introdusse tre concetti straordinariamente innovativi: i) il supporto di memoria periferico, che veniva letto da ii) un dispositivo di
lettura, o organo di input, e iii) il programma, cioè la rappresentazione simbolica delle sequenze operative della macchina.
Molte macchine attuali operano ancora esattamente con
questo schema, pur con tecnologia diversa. La differenza
concettuale con il calcolatore (ma per un ingegnere della
tessitura sarebbe stato un salto troppo in avanti, e, comun que inutile ai suoi scopi) sta nel fatto che il programma è
esterno alla macchina, e che la sua esecuzione è immutabile,
riducendosi ad una pura sequenza non alterabile durante il
funzionamento.
64
PARTE PRIMA
Agli inizi dell’800, quindi, scienza e tecnologia avevano
messo a disposizione vari tasselli per automatizzare lo
schema di calcolo di figura 1.12: tavole, macchine calcolatrici, supporti meccanici di memoria, metodi matematici di
calcolo. Un altro tassello importante andava maturando, an che questo, non a caso, a opera di scienziati con interessi
alle applicazioni. Gaspard François Le Riche de Prony, fisico e ingegnere (si occupò anche di opere idrauliche per il
Po e per il porto di Genova, oltre ad inventare uno stru mento per la misurazione del lavoro meccanico di un mo tore tuttora noto come freno di Prony), ideò e mise in pratica
la prima procedura per automatizzare il calcolo di tabelle di
effemeridi (si trattava di calcoli lunghi e complessi per produrre migliaia di numeri, in principio semplici e ripetitivi che
un solo uomo non avrebbe eseguito in una vita int era). Tale
procedura veniva eseguita “passivamente” da un certo numero di contabili organizzati in “unità”: calcolatori veri e
propri, verificatori, preparatori delle stampe eccetera.
L’analogia con il concetto attuale di calcolatore, come ese cutore veloce e stupido di un programma di calcolo, è evidente. Il concetto di “procedura di automazione” del
calcolo era il tassello mancante: il processo di figura 1.12
poteva ora essere totalmente automatizzato.
Charles Babbage, ingegnere appassionato di matemat ica
(la sua occupazione principale erano i trasporti, e fu coin volto anche nella progettazione della seconda ferrovia ita liana, la Torino - Genova), studioso dell’organizzazione del
lavoro e della sua automazione, ebbe l’ulteriore intuizione.
Partendo dalla tecnologia delle macchine calcolatrici meccaniche, dalle schede Jacquard, dall’esperienza di de Prony,
dalle sue nozioni matematiche e, soprattutto, dal suo culto
per i principi dell’organizzazione del lavoro intellettuale, egli
enunciò nella prima metà del secolo XIX i principi di funzionamento di una macchina programmabile di eccezionale
LE RADICI STORICHE
65
modernità: la analitical engine (“macchina analitica”).
L’architettura della sua macchina è veramente innovativa.
Essa prevede una parte che esegue i calcoli (mill) e una che
memorizza i risultati temporanei dei calcoli (store). Il funzionamento della macchina è controllato da un programma memorizzato su sequenze di schede (operation card); sempre su
schede (variable card) sono memorizzati anche i dati in in gresso. Oltre a prevedere anche il concetto di biblioteche di
programmi, Babbage si spingeva più avanti: il calcolo non
procedeva solo sui dati via via presenti in ingresso, ma an che, su richiesta del programma, sui dati temporanei prodotti dal calcolo precedente. Infine, il programma compren deva la possibilità di salti condizionati (si veda più avanti la
sezione 2.2 sui linguaggi di programmazione), cioè il
trasferimento del controllo dell’esecuzione in dipendenza
dei risultati intermedi dell’elaborazione: per questo era
previsto il movimento in avanti e a ritroso delle operation
card, su controllo del programma stesso, in base ai risultati
parziali.
È difficile comprendere oggi quanto rivoluzionari fossero
questi concetti; una facile misura dell’innovazione sta nella
similitudine con i concetti di Turing e delle attuali architetture dei nostri calcolatori, posteriori di cento anni. In figura
1.16 sono riportati vari schemi dei procedimenti di calcolo:
lo schema generico, quello dell’uomo più macchina calcolatrice non a programma (cfr. figura 1.15), lo schema di
Babbage e quello attuale. Rispetto allo schema attuale (il
lettore può confrontare lo schema della macchina di Von
Neumann nella sezione 2.1), l’unica differenza è che nella
macchina analitica di Babbage il programma risiede in una
memoria esterna alla macchina (anziché all’interno come
nell’attuale “macchina di Von Neumann”), che può essere
66
PARTE PRIMA
soltanto letta dal “mill”12.
dati in
dati in
dati in
(var. card)
elaborazione
controllo
(mill)
unità aritmetica
memoria locale
memoria:
procedura
(oper. card)
controllo
unità aritmetica
memoria:
procedura
+ dati
(store)
dati out
macchina di Babbage
dati out
dati out
generico procedimento
di calcolo
macchina di Von Neumann
Figura 1.16 - Procedimenti di calcolo
Babbage, vuoi per un certo temperamento geniale ma
ombroso e incostante, vuoi per una scarsa sensibilità alle
applicazioni (oggi diremmo al mercato), e, in parte, per la
limitatezza della tecnologia del tempo, realizzò solo proto tipi parziali (in figura 1.17 è riprodotta una parte della mac china analitica, assieme ad una scheda di programmazione),
pur ottenendo riconoscimenti della Royal Society inglese. Essendo per lui solo un’attività collaterale, Babbage non
scrisse molto: la maggior parte di ciò che sappiamo è do vuto alla costanza della compagna della sua vita e dei suoi
studi, Ada Byron Lovelace, romanticamente considerata la
prima programmatrice della storia. Ad un linguaggio di programmazione nato da un gigantesco finanziamento pubblico
internazionale negli anni ’70 - e caduto in disuso prima di
essere usato seriamente - fu dato, in sua memoria, e in
modo rivelatosi infausto, il nome Ada.
Contemporaneamente a Babbage, e da lui influenzato, lo
Vedi, più avanti, i primi calcolatori elettronici americani della serie MARK,
che realizzavano in pratica l’architettura di Babbage (senza saperlo).
12
LE RADICI STORICHE
67
svedese Georg Scheutz ebbe un atteggiamento più pratico e
realistico. Costruì una macchina con principi meno avanzati,
rinunziando alla parte di programmazione, ma suffi cientemente flessibile da poter trattare in modo automatico
moli di dati, e, contemporaneamente, introducendo una
nuova tecnologia: la stampa. Ancora una volta, i libri di
tavole rappresentavano la quasi totalità del mercato del
calcolo, e Scheutz intendeva migliorare il processo di
produzione di questi libri (peraltro anche Babbage aveva
tenuto in conto questo campo di applicazione per la sua
macchina). Si tratta del primo legame fra informatica - ante
litteram - ed editoria; in modo innovativo, Scheutz voleva
automatizzare il calcolo delle tavole (produzione più veloce
e con meno errori) ma anche la produzione del libro in sé,
ottenuto mediante la generazione diretta dei cliché
tipografici. La sua macchina conobbe una limitata ma
significativa risposta commerciale anche negli USA.
Figura 1.17 - a) Macchina di Babbage; b) scheda perforata
Il problema della memorizzazione di dati, della stampa
automatica (anche in presenza di calcolo matematico non
troppo complesso), la crescita dei settori della statistica, finanza ed economia crearono un mercato per macchine elaboratrici (più che calcolatrici numeriche), in cui memorizzazione e trattamento di grandi moli di dati erano l’aspetto
68
PARTE PRIMA
dominante. Sul finire dell’800 nacque il settore industriale
della meccanografia, a partire dalla macchina elettromeccanica
di Herman Hollerith (Electric Tabulating Machine) che era in
grado di leggere schede perforate, elaborare dati e fornire in
modo automatico tabulati a stampa, e fu impiegata per la
prima volta con successo nell’elaborazione statistica del censimento nazionale del 1890 in USA. Esplodeva con quel riuscito esperimento il mercato delle macchine meccanografiche, che aprì la strada alle grandi società, futuri colossi che
in seguito migreranno all’elettronica: International Business
Machines (IBM), Bull, Burroughs. Macchina da scrivere
(Remington, fine ’800), calcolatrice elettrica, sistema meccanografico, archivi di schede e tabulati: questa è stata la dotazione tecnologica tipica della parte gestionale di un’azienda
fra l’inizio secolo e la metà degli anni ’50.
Il percorso dall’inizio ’900 alla seconda guerra mondiale si
fa più veloce. Mentre i matematici chiarivano i modelli
astratti del calcolo, l’elettromeccanica si faceva più evoluta, e
nasceva l’elettronica, per ora costosa e limitata. Matematici e
fisici inoltre stavano saldando la logica elementare con il
comportamento di circuiti elettronici semplici e componibili
(Eccles e Jordan, 1919 e Shannon, 1938), mostrando la pos sibilità concreta di realizzare memorie e macchine da calcolo
puramente elettroniche, senza parti in movimento (si veda la
sezione 1.4 sulle prestazioni delle macchine). Questo però
accadeva negli USA, dove l’interazione culturale fra fisici,
elettronici, matematici era molto più forte; negli altri paesi le
strade verso il calcolatore elettronico erano in qualche modo
più limitate. La mancanza di circolazione delle idee fra le
due guerre, infatti, conseguenti agli sconvolgimenti politici
in atto, fece sì che nei tre paesi tecnologicamente più evoluti
- Germania, Inghilterra, USA - si sviluppassero in isolamento filoni di ricerca separati e ignari uno dell’altro. In
Germania, Konrad Zuse realizzò fra il 1935 e il 1941 due
LE RADICI STORICHE
69
calcolatrici elettriche, la seconda delle quali a programma
memorizzato. Curiosamente, né Zuse, né tutti gli altri ideatori di macchine da calcolo importanti da Babbage in poi,
erano matematici, né esperti di calcolo; Zuse era un tecnico
in settori in cui c’era esigenza di calcolo automatico; gli
americani più famosi (Aiken, Eckert, Von Neumann, ...)
erano esperti di elettronica. Zuse usò il relè (componente
elettromeccanico per correnti deboli, che aveva in modo
molto meno efficiente il ruolo che poi è stato della valvola
termoionica e del transistor) per rappresentare dati e programmi, sviluppando una codifica binaria simile a quelle attuali. La realizzazione della sua ultima macchina, la Z4, fu
particolarmente geniale ed avanzata, perché usava l’elettronica e sarebbe stato, anche se di poco, il primo cal colatore
elettronico a programma memorizzato del mondo. Tuttavia,
non solo sei anni di guerra rallentarono la sua rea lizzazione,
ma, soprattutto, l’azzeramento dell’economia te desca del
dopoguerra impedirono ulteriori sviluppi che, in altre
condizioni, sarebbero stati possibili.
La ricerca in USA, totalmente inconsapevole dei lavori di
Zuse, e con impegni finanziari infinitamente superiori,
portò ad una serie di macchine in competizione fra loro,
con progetti in sedi diverse: la Moore School della University of
Pennsylvania (J. Presper Eckert e John Mauchly), Harward
(Howard Aiken), Iowa State University (John Atanasoff), e,
successivamente, MIT Massachussets Institute of Technology (K.
C. Redmond e T. M. Smith). Questi progetti erano stati
impostati negli anni ‘30 e provocarono definitivamente la
nascita dell’elaboratore elettronico (“electronic numeric
computer”). In Inghilterra, dove non era stato impostato
alcun progetto, Maurice Wilkes della Cambridge University,
dopo una visita di studio presso la Moore School nel 1946 (a
riprova
dell’importanza
della
circolazione
delle
informazioni), fece partire praticamente da zero un progetto
70
PARTE PRIMA
a Cambridge che portò in tre anni alla realizzazione di
EDVAC, un calcolatore elettronico che molti sostengono
essere veramente il primo prototipo completo al mondo, in
quanto era la prima macchina elettronica con il programma
memorizzato: la sua architettura (tipica macchina à -la-Von
Neumann, sezione 2.1) era talmente buona che rimase in
auge, con soluzioni tecnologiche diverse, fino agli anni ’70.
Le macchine americane avevano battuto strade diverse:
MARK I - II - III - IV ad Harward erano iniziate come elettromeccaniche (come quella di Zuse) e poi diventate elettroniche, queste ultime giungendo, nella corsa, ormai al secondo o terzo posto. Queste macchine richiamavano l’idea
di Babbage, in quanto avevano memorie separate per i dati e
per i programmi. Questa scelta fu sconfitta, nella competizione evolutiva del calcolatore, dall’architettura che poi fu
chiamata di Von Neumann, con un’unica memoria comune
ai dati e ai programmi (figura 1.15). Quest’ultima scelta era
quella operata alla Moore School, la cui macchina, ENIAC,
presentata nel 1946, è di solito considerata il primo elabo ratore elettronico. ENIAC però aveva una primitiva forma
di memoria per il programma (interruttori e fili); questa è la
ragione per cui l’inglese EDVAC gli contende il primato,
avendone probabilmente diritto. In realtà ENIAC era una
macchina militare, già operativa durante la guerra, finanziata
dal Ministero della Difesa per il calcolo delle tavole di tiro
dell’artiglieria (ancora una volta le tavole, e, ancora una
volta, per usi militari), e per questo tenuta segreta. Anche il
prototipo parzialmente realizzato da Atanasoff già attorno
al ‘40 aveva principi simili.
Con ENIAC già in funzione ma non pubblicizzato, due
matematici, Hermann Goldstine e John Von Neumann,
scrissero un rapporto sul progetto, con la proposta di realizzare una nuova macchina completa e innovativa che si
sarebbe dovuta chiamare EDVAC (Electronic Discrete
LE RADICI STORICHE
71
Variable Automatic Computer). La descrizione di EDVAC
era veramente l’architettura dell’elaboratore come oggi lo conosciamo, e che da quel rapporto iniziò ad essere chiamata
“macchina di Von Neumann”. Alcuni autori oggi sosten gono che l’aver esautorato gli ingegneri Eckert e Mauchly,
padri di ENIAC, da quel rapporto sia stata un’azione scor retta da parte di Goldstine e Von Neumann, ed evitano
esplicitamente di usare il termine “macchina di Von
Neumann”.
La presenza di diversi progetti in competizione dava già
chiari segni dell’importanza commerciale dell’informatica.
Alcuni fatti segnarono il finire del periodo romantico della
nascita dell’informatica, e l’inizio del suo periodo industriale:
la battaglia legale per il diritto al brevetto fra la Moore School
ed Eckert e Mauchly, che per reazione abbandonarono
l’università bloccando il progetto EDVAC; la controversia
sulla priorità del brevetto, a causa del progetto precedente
Atanasoff, terminata con la decisione di non brevettabilità
(chissà come sarebbe cambiata la storia dell’informatica al trimenti!); la controversia intellettuale fra Von Neumann ed
Eckert e Mauchly. Goldstine e Von Neumann, trasferitisi
all’Institute for Advanced Study di Princeton, crearono un
gruppo di ricerca con Arthur Burks e Julian Bigelow che,
oltre ad una macchina di tipo moderno, produsse i primi ar ticoli di larga circolazione sul calcolatore: nei lavori di Burks,
Goldstine e Von Neumann di allora è contenuta la maggior
parte dei concetti moderni e attuali riguardo alle architetture
dei calcolatori. Sempre sul finire degli anni ’40, la macchina
WHIRLWIND al MIT inventò le memorie a nuclei magnetici: questa tecnologia permise la creazione di vere memorie
industriali, capaci (WHIRLWIND era dotato di 4 KByte di
memoria) ed economiche, non più prototipi, ma prodotti
commerciali. Forse la memoria di ferrite, più di altre novità
tecnologiche, permise quell’incremento di prestazioni che
72
PARTE PRIMA
accese il circolo virtuoso del calcolatore elettronico come
macchina industriale. Le memorie a nuclei di ferrite durarono poi trent’anni, e in quella data nasce l’era industriale
dell’informatica.
Nelle tavole 1.4 e 1.5 qui di seguito si trovano elencate le
tappe storiche dell’informatica; nella prima, una sinossi degli
“strumenti per calcolare” dalle origini agli anni ’40, e nella
seconda i “fatti notevoli” nello sviluppo della tecnologia
dell’elettronica nell’informatica dagli anni ’30 ad oggi.
Tavola 1.4 - Strumenti per calcolare dalle origini al primo
calcolatore
(gli strumenti ANALOGICI sono indicati in carattere MAIUSCOLETTO)
30000 - 2000 a.C.
conteggio enumerativo e digitale (Mesopotamia, Egitto,
Cina...)
2000 a.C.
tavole numeriche e procedure per la soluzione di problemi
(Mesopotamia)
1500 a.C.
origine della notazione posizionale per i numeri (Babilonia)
500 a.C.
nascita dell’abaco (Cina, Grecia, Roma, America del Sud...)
100
Tolomeo (Alessandria): Almagesto - tavole trigonometriche
800
Mohammed ibn-Musa al-Khuwarizmi (Bagdad): Al-jabrnwa’l
muqabalah - numerazione “araba”, procedure di calcolo, nascita
dell’algebra
1202
Leonardo Pisano detto Fibonacci (Toscana): Liber Abaci diffusione dell’algebra, della numerazione e delle procedure di
calcolo - nasce la contrapposizione fra chi computa “con carta
e penna”(algoristi) e chi usa gli abaci (abacisti).
1606
COMPASSO
DI
GALILEO (TOSCANA) PER OPERAZIONI
ARITMETICHE
1614
John Napier (Scozia): definizione del logaritmo
1617
John Napier (Scozia): bastoncini (tavolette numerate per
automatizzare il calcolo)
73
LE RADICI STORICHE
1623
prima calcolatrice meccanica (Wilhelm Schickard, Tübingen) per le
quattro operazioni aritmetiche
1624
Henry Briggs (Inghilterra): tavole di logaritmi per calcoli di
varia natura
1625
REGOLO LOGARITMICO PER CALCOLI ARITMETICI
(EDMUND
GUNTER, INGHILTERRA)
1631
PANTOGRAFO PER RIPRODUZIONI IN SCALA DI FIGURE
(CRISTOFORO SCHEINER (?), GERMANIA)
1642
calcolatrice meccanica (Blaise Pascal, Francia) per addizioni e
sottrazioni
1671
calcolatrice meccanica (Wilhelm Leibniz, Germania) per le
quattro operazioni aritmetiche
1800 (circa)
Gaspard de Prony (Francia): automazione del calcolo (umano)
di grandi tavole numeriche
1800 (circa)
Joseph-Marie Jacquard (Francia):
programmazione per telai
1814
schede
perforate
di
J. H. HERMANN (INGHILTERRA): INTEGRATORE A DUE
RUOTE
1820
Charles Thomas Colmar (Francia): aritmetro - prima macchina
calcolatrice industriale
1820 -1860
Charles Babbage (Inghilterra): ideazione della analitical engine precursore degli attuali calcolatori
1850 (circa)
Georg Scheutz (Svezia): prima macchina calcolatrice
commerciale a programma (basata sulle idee di Babbage) in
grado di stampare direttamente tavole numeriche, venduta in
Inghilterra e USA
1850 (circa)
USA: macchina calcolatrice (addizionatrice) a tastiera
1850 (circa)
REGOLO
CALCOLATORE
LOGARITMICO
COMMERCIALE
DOTATO DI CURSORE (FRANCIA)
1854
George Boole (Inghilterra): Studio sulle leggi del pensiero - un
calcolo logico in forma algebrica (“algebra di boole”)
1864
PLANIMETRO
- STRUMENTO PER CALCOLARE L’AREA DI UNA
(LAFFON
JACOB AMSLER, SVIZZERA)
MAPPA PER CARTOGRAFIA, TOPOGRAFIA, ECC.
1876
LORD KELVIN (INGHILTERRA): MACCHINA INTEGRATRICE A
11 VARIABILI
1883
USA: primo registratore di cassa (Patterson Bros., Ohio)
74
PARTE PRIMA
1887
Dorr E. Felt (USA): comptometer - prima calcolatrice industriale
a tastiera a più colonne a larga diffusione
1887
Herman Hollerith (USA): Electric Tabulating System - tabulatrice
elettromeccanica basata su schede perforate per uso statistico
1890
USA: utilizzo della tabulatrice Hollerith per il censimento
nazionale
1898
A.A. MICHELSON E S.W. STRATTON (USA): MACCHINA
INTEGRATRICE A 80 VARIABILI
1906
De Forest (USA): audion - valvola elettronica a tre elettrodi
(poi chiamata triodo), in grado di amplificare i segnali elettrici:
nascita dell’elettronica
1919
W.H. Eccles e F.W. Jordan (USA): flip-flop - circuito
elettronico successivamente divenuto l’elemento base della
memoria dei calcolatori elettronici
1920 - 1929
ampia diffusione delle macchine tabulatrici per elaborazioni
statistiche e calcoli di micro e macroeconomia (USA,
Germania, URSS)
1931
CALCOLATORE
ELETTRONICO
ANALOGICO
(VANNEVAR
BUSH, MIT, USA)
1931
uso dei tubi elettronici per i circuiti dei calcolatori digitali
(Wynn-Williams, Inghilterra)
1936
Alan Turing (USA): On Computable Numbers with an Application
to the Entscheuidungsproblem - concetto di procedura, di
macchina universale di calcolo e di computabilità
1941
Konrad Zuse (Germania): Z3 - primo calcolatore in senso
moderno a programma memorizzato con tecno logia “preelettronica”
1935 -1945
IOWA State University (USA): prima CPU completamente
elettronica, con rappresentazione binaria dei numeri
Tavola 1.5 - ELABORATORE A PROGRAMMA MEMORIZZATO: I PROTOTIPI E LE GENERAZIONI
GEN
PERIODO
TECNOLOGIA
PRODOTTO
PROTOTÍPO
MEMORIZ.
NOTE
I/O
-
0 - 1935
meccanica
commerciale
macchina analitica
macchina alle
differenze
-
prima macchina stampante
programmata per generazione di
tavole (Scheutz ~1850) basata su
idee di Babbage
-
0 - 1935
meccanica
commerciale
Tabulating Machine
(macchina statistica
meccanografica)
scheda di carta
perforata
Hollerith (1878) poi IBM (1911)
-
1935 - 1945
meccanica
prototipale
Z1 (1938)
-
Konrad Zuse (D)
-
1935 - 1945
elettromeccanica
prototipale
Z3 (1941) Z4
(1948)
interna
Konrad Zuse (D)
calcolatori a programma
memorizzato
-
1935 - 1945
elettronica (tubi a
vuoto)
prototipale
(realizzazione
parziale)
-
memorizzazione
interna elettronica
IOWA State University (USA)
prima CPU elettronica, con
rappresentazione binaria dei numeri
-
1935 - 1945
elettromeccanica
prototipale
MARK I (1944)
MARK II (1945)
interna
Harvard (USA)
dati e programmi in memorie
separate
GEN
PERIODO
TECNOLOGIA
PRODOTTO
PROTOTÍPO
MEMORIZ.
NOTE
I/O
-
-
-
-
1935 - 1945
1945 - 1950
1945 - 1950
1945 - 1950
MARK III (1947)
MARK IV (1948)
?
interna
prototipale
operativo (usi
militari)
ENIAC (1946)
schede perforate,
interruttori,
collegamenti filati
Pennsylvania (USA)
elettronica (tubi a
vuoto)
prototipale
MODEL V (1946)
nastri perforati
Bell Telephone (USA)
elettronica (tubi a
vuoto)
prototipale
elettronica (tubi a
vuoto)
prototipale
elettronica (tubi a
vuoto)
Harvard (USA)
dati e programmi in memorie
separate
primo calcolatore elettronico digitale
(con programma memorizzato ma
ridotta capacità di memoria di tipo
elettromeccanico)
programma memorizzato con
esecuzione non rigida (uso del
salto condizionale)
EDSAC (1949)
schede, interruttori
Cambridge (UK)
primo calcolatore elettronico digitale
a programma memorizzato
-
1950 - 1960
elettronica (tubi a
vuoto)
prototipale (usi
militari)
Whirlwind (1951)
memoria
elettronica
nuclei magnetici
-
1950 - 1960
elettronica (tubi a
vuoto)
prototipale
IAS (1952)
memoria
elettronica
MIT e Bell LAboratories (USA)
primo calcolatore moderno per
operare in tempo reale
Princeton (USA) primo vero
elaboratore in senso moderno
per calcolo numerico
GEN
PERIODO
TECNOLOGIA
PRODOTTO
PROTOTÍPO
MEMORIZ.
NOTE
I/O
1
1950 - 1960
tubi a vuoto
grande
calcolatore
commerciale
UNIVAC I (1951)
IBM 701 (1952)
schede perforate
48 esemplari di UNIVAC I
memoria a nuclei
magnetici
19 esemplari di IBM 701
2
1960 - 1969
Transistor
calcolatore
economico
Burroughs 6500
NCR CDC 6600
Honeywell
schede, nastri
magnetici, dischi
magnetici,
memorie
magnetiche
3
1969 - 1978
circuiti integrati
minicalcolatore
DEC PDP-11
microprocessore
50 nuove società
c.s., dischetti,
telematica
Nascita del microprocessore:
Intel 8008, 8080, 8086 (1978)
memorie a stato
solido
Texas 6800 68000
dischetti, nastri
ad alta densità,
dischi ottici, CDROM
Intel 80286 (1982) 80386 (1985)
80486 (1989)
4
1978 - 199?
circuiti ad altissima
integrazione
(VLSI)
Personal
Computer
Workstation
IBM PC, Apple
Macintosh, Apollo,
SUN, HP
Nascita della tecnologia RISC
Intel Pentium (1991)
5
199? -
elaborazione
parallela
calcolatore
multiprocessore
macchine “nonVon Neumann”
?
LE RADICI STORICHE
79
L’informatica commerciale si può far iniziare convenzionalmente nel 1950. Da quel momento essa è passata attra verso quelle che comunemente vengono chiamate generazioni, caratterizzate da una tecnologia elettronica dominante, e dal prodotto di mercato tipico, come indicato nelle
tavole 1.2 e 1.5. In quest’ultima tavola le cinque generazioni
convenzionali (prima colonna) sono precedute dai prototipi
“ufficiali” di macchine da calcolo a programma memoriz zato, ciascuno con le proprie tecnologie per il calcolo, per la
memoria, e per la comunicazione input/output. Come si vede,
le tecnologie che hanno permesso l’innesco del ciclo di sviluppo della macchina sono state l’elettronica e il supporto
magnetico.
La prima generazione utilizzava tubi a vuoto (“valvole termoioniche”) come dispositivi di commutazione (la cella
elementare per memorizzare un bit ed eseguire le operazioni
logiche di base); i tubi a vuoto sono oggi praticamente in di suso in tutti i settori dell’elettronica13. Le macchine erano
mastodontiche, dissipavano molta energia in calore e si guastavano assai frequentemente. Ciononostante, UNIVAC-I fu
venduto in 48 esemplari (al prezzo di $ 250,000 cadauno);
IBM, leader nel campo delle macchine per ufficio, entrò a
grande velocità nel settore costruendo in due anni il
13
Eccetto applicazioni particolari, come ad esempio amplificatori Hi-Fi di
altissima classe, generazione di microonde. Il tubo a vuoto non va sottovalutato dal
punto di vista storico: la sua invenzione come dispositivo amplificatore di deboli
correnti (l’audion, ad opera di Lee De Forest nel 1906) segnò ufficialmente la
nascita dell’Elettronica, cioè quella branca della scienza applicata che utilizza
deboli correnti (i “segnali” elettrici) per trasportare informazione. Il tubo
elettronico supportò da solo tutta l’elettronica (e l’informatica) fino alla nascita del
transistor (1947); nella decade successiva quest’ultimo, progressivamente e
integrato con densità sempre maggiori in singoli chip, ha sostituito la tecnologia
del vuoto. Una sola applicazione, diffusissima e fondamentale, è a tutt’oggi
dominio (quasi) incontrastato del tubo a vuoto: il tubo a raggi catodici, generatore
di immagini per i televisori e videoterminali.
80
PARTE PRIMA
modello 701 (19 esemplari venduti). Il settore applicativo
era, ovviamente, quello contabile-gestionale, che rappresentava la quasi totalità del mercato fino agli anni ’80, af fiancato da un importante ma modesto settore di calcolo
scientifico. Le macchine della prima generazione venivano
programmate in linguaggio macchina o linguaggi di bassis simo livello (sezione 2.2 sui linguaggi di programmazione);
non essendovi storia, non esistevano biblioteche di software
da riutilizzare, né strumenti software per utilizzare bene la
macchina (i primi sistemi operativi erano quasi inesistenti).
Anche l’immissione e la stampa dei dati erano primitivi, per
assenza di buoni supporti e relative periferiche. Si usavano
nastri di carta perforati (presi pari pari dalle comunicazioni,
dove venivano usati per registrare messaggi telegrafici e
telex), schede (quasi identiche a quelle di Hollerith di fine
’800); come stampanti presto vennero connesse le
telescriventi, anch’esse provenienti dal settore comunicazioni (sistema Baudot, fine ’800).
La seconda generazione - anni ’60 - usa il transistor, che fa ridurre costi, dimensioni, e consumi di un fattore 100.
L’affidabilità fa un balzo in avanti: un tubo aveva una vita di
circa 104 ore (circa un anno e mezzo, e una macchina con
1.000 tubi, numero tutto sommato modesto, avrebbe quindi
avuto un tempo di funzionamento medio fra due guasti m isurabile in giorni), contro le 10 6 - 107 ore del transistor.
Questo permise di aumentare la complessità delle macchine.
Ma è soprattutto il software che migliora enormemente: na scono linguaggi di programmazione “ad alto livello”, come
COBOL, FORTRAN e ALGOL (i primi due ancora vivi
anche se in grande declino); nascono i sistemi operativi e gli
strumenti per programmare (editor, compilatori, debugger,
gestori di librerie ecc.); nascono le figure professionali, tutte
tecniche, dell’informatica: analisti, programmatori, operatori: l’utente è una “terza parte”. Nasce anche la tecnologia
LE RADICI STORICHE
81
del supporto magnetico (dischi e nastri), sopravvissuta fino ad
oggi come la tecnologia per eccellenza nella realizzazione di
memorie di massa (sezione 2.1). I nastri magnetici (de cisamente ingombranti rispetto ad oggi) permisero la
creazione delle prime banche dati potenzialmente illimitate; i
primi dischi costituirono la base per lo sviluppo dei sistemi
operativi.
Con la terza generazione (anni ’70) l’informatica comincia a
limitare il numero di “addetti ai lavori” nell’uso dei suoi
strumenti. La tecnologia dei circuiti integrati, prima di piccola scala (mille transistor in un chip, anni ’70), poi di larga e
larghissima scala (centomila negli anni ’80, un milione negli
anni ’90, una decina di milioni nel 1997) permette di
aumentare ulteriormente le prestazioni senza andare a
discapito di costi e ingombri. Il miglioramento dei sistemi
operativi e delle periferiche limita la necessità di operatori
(addetti alla manutenzione, al cambio dei supporti di memorizzazione eccetera), in particolare, nella nuova fascia di
piccole macchine, emergenti negli anni ’70-’80, i minicalcolatori. Da questo punto il miglioramento di prestazioni è
stato vertiginoso, ma senza più “strappi” come nel pas saggio dalla prima alla seconda generazione. L’effetto “accelerazione” è sempre più pronunciato, ma è avvertito come
un continuum - in effetti, il vero cambiamento di tecnologia
con un “gradino” di prestazioni è stato quello dal vuoto al
silicio (transistor): in figura 1.18 sono affiancati i componenti tipici delle tre prime tecnologie: un tubo elettronico,
un transistor, alcuni circuiti integrati.
Con la terza generazione si delineano le modalità opera tive attuali: collegamenti a distanza (“telematica”), opera zioni in tempo reale e interattive, supporti di memorizzazione economici e trasportabili (i floppy disk), videoterminali
grafici e a colori. Inizia anche il declino dei nuclei magnetici
nelle memorie principali, ora realizzate direttamente in sili-
82
PARTE PRIMA
cio visti i costi bassissimi.
Figura 1.18 - Tubo elettronico, transistor, circuiti integrati
La quarta generazione nasce convenzionalmente con l’uso
massiccio dell’integrazione di larga scala (VLSI “Very Large
Scale Integration”), negli anni ’80. Ciò che la caratterizza è
soprattutto il nascere dell’informatica personale, grazie ai
costi ridotti e alle alte prestazioni. Allo stesso tempo, le tecnologie del software erano sufficientemente mature per
permettere investimenti da parte di case di software in sviluppo di puro software di base per dialogo con non specialisti,
cioè sistemi operativi di alto livello e utilizzabili da non tecnici. Fino a questi anni nessuno aveva ritenuto remunerativo
questo tipo di investimenti. Apparentemente, oltre alla maturità dei tempi (e del mercato), eventi casuali indirizzarono
l’informatica verso lo sviluppo della macchina per usi personali (la stazione di lavoro o workstation, poi il personal
computer). Le cattive condizioni economiche di una società
produttrice di chip, Intel, ad esempio, indussero IBM ad utilizzare per la prima volta una tecnologia di cui non era pro prietaria per il suo personal computer: questo, oltre a riportare
LE RADICI STORICHE
83
un insperato successo di mercato, fu riprodotto (o clonato)
liberamente dai concorrenti, generando un circolo virtuoso
di diffusione/interesse/produzione che nessuno aveva previsto.
Similmente accadde per il software di base, il sistema operativo MS-DOS, commissionato ad una piccola società di
software, la Microsoft, con la previsione - pessimisticamente
sbagliata - di venderne poche centinaia di migliaia di copie; i
milioni di PC venduti, al contrario, resero alla Microsoft,
tramite i diritti d’autore, enormi proventi da reinvestire in
nuovo software per il personal computing; Microsoft è arrivata
ad essere la prima società di informatica mondiale, e la
“prima ad essere prima” non avendo mai prodotto né
hardware né sistemi, ma puro software. Ma la strada della
diffusione del personal computing non sarebbe stata imboc cata se, negli anni ’80, Apple non avesse inventato il primo
sistema operativo a finestre: esso ruppe presto tutte le barriere di
diffidenza da parte dei non specialisti, allargando il mercato
e incidendo profondamente sul ruolo sociale dell’informatica. A ciò si arrivò utilizzando principi innovativi sull'interazione fra l’uomo e la macchina (in particolare fra una
macchina di larga diffusione personale e un uomo comune), principi
nati già negli anni ’70 da un gruppo di ricercatori di visione
piuttosto ampia in un centro di ricerca Xerox a Palo Alto. A
questa impostazione è dedicata la sezione 2.3 sui sistemi a
finestre.
La quarta generazione segna un cambiamento tecnolo gico poco marcato (si pensi a quanta differenza vi era stata
fra l’uso dei tubi a vuoto e quello dei transistor tra la prima e
la seconda), mentre rivoluzionario è il cambiamento in due
aspetti diversi: il software e l’integrazione con le comunicazioni (la telematica, idealmente nata negli anni ’70). Sul
software, in particolare su quello di base, ovvero di interazione fra uomo e macchina, abbiamo detto poco sopra:
84
PARTE PRIMA
naturalmente, software più potente (grafico, multimediale,
interattivo, ecc.) significa più potenza di calcolo “sprecata”
nella pura interazione con l’utente. Ma, con la quarta gene razione, di pura potenza di calcolo, per la prima volta, ce n’è
più di quanta se ne possa desiderare (figure 1.9 e 1.10). Il
microprocessore 8080 Intel (con cui nacque il personal
computer PC IBM) integrava meno di 5000 transistor nel
suo chip; l’attuale Pentium II ne contiene più di 7 milioni.
Un computer di grandi dimensioni (un cosiddetto mainframe)
tipico del 1970 come il System/370 Modello 168 IBM costava circa 3,5 milioni di dollari e la sua velocità di calcolo
veniva usata al 100% in elaborazione di dati commerciali o
scientifici di alto valore specifico; il PC dotato di processore Intel Pentium 166 su cui sto scrivendo, veloce il
doppio di quella macchina, costa circa 1,5 migliaia di dollari e
sta usando il 50% della sua potenza di calcolo nel simularmi
sullo schermo, in bella grafica a colori, questa pagina di
testo, mentre l’altro 50% sta trasferendo “in silenzio” da
Internet un lungo documento con molte immagini e suoni.
In questa generazione si assiste, più che a un salto tecno logico vero e proprio, a miglioramenti e razionalizzazioni,
come la tecnologia RISC (Reduced Instruction Set
Computer, calcolatore con insieme di istruzioni [del linguaggio macchina] ridotto), che consiste nel prevedere una
unità di calcolo capace di un piccolissimo numero di istruzioni elementari, molto inferiore a quello tradizionale (CISC
- Complex Instruction Set Computer), ma così veloci da
rendere le prestazioni della macchina molto più alte. Tutte le
macchine attuali dalla classe “personal” in su sono migrate
verso questa tecnologia.
L’altro aspetto tipico della quarta generazione, che ab biamo già citato in precedenza, è l’integrazione con le tele comunicazioni e l’inserirsi con prepotenza nel percorso
evolutivo della società nella direzione del cosiddetto villaggio
85
LE RADICI STORICHE
globale, in cui la possibilità di scambiare informazione fra
uomini, su tutto il pianeta, non è più condizionata dalla di stanza fisica, ma da altre metriche ancora, in parte, da verifi care (ad esempio, livello tecnologico, disponibilità economica, livello socioculturale, moda, condizionamento di poteri forti, eccetera). Allo stesso tempo, il cambiamento dei
modi di rappresentare e diffondere il sapere (sia quello
“permanente” legato alla scienza e alla cultura consolidata,
sia quello “effimero” legato all’emotività, allo spettacolo,
all’arte e al gioco) sta creando profonde diversificazioni nel le figure professionali sia degli utenti che degli addetti all’informatica e ai mezzi di comunicazione; e, come è noto, in troduce inquietanti problemi nella gestione della sicurezza e
della privacy.
Figura 1.19a - Rapporto uomo/calcolatore: comunicare i
problemi alla macchina
86
PARTE PRIMA
Figura 1.19b - Rapporto uomo/calcolatore: nuove prospettive
Il rapporto logico dell’uomo con la macchina da calcolo
nel risolvere un generico problema è ora profondamente
cambiato rispetto a quello dell’era pre-informatica (figure
1.19a e 1.12, rispettivamente). L’uomo non ha più il ruolo di
unico depositario della procedura risolutiva, né quello di
controllore dell’esecuzione del calcolo; al contrario,
all’essere umano è richiesta fondamentalmente di comunicare i
problemi alla macchina. Questa svolge molti ruoli: memorizza
una biblioteca di metodi risolutivi, li applica su richiesta,
controlla l’esecuzione e fa da “abaco” a se stessa. L’utente
della macchina oggi deve essere in grado di selezionare il più
adatto fra i tanti strumenti informatici (procedure software)
disponibili, e di adoperarlo; la competenza dell’uomo si è
quindi spostata verso la conoscenza degli strumenti e dei
linguaggi con cui dialogare. Si è, allo stesso tempo, creata
una competenza della macchina che sempre più, perciò,
memorizza “conoscenza” sui problemi e sulle soluzioni,
gestendo l’interfaccia linguistica ad alto livello fra l’uomo e
le proprie biblioteche o “basi di conoscenza”. L’evoluzione
di questo rapporto uomo-macchina è quello schematizzato
LE RADICI STORICHE
87
nella figura 1.19b: il calcolatore “intelligente” dovrebbe
essere in grado di dialogare anche sul piano della scelta dello
strumento risolutivo, e senza richiedere un linguaggio
specialistico diverso da quello naturale. Al tempo stesso, la
biblioteca di conoscenza disponibile sarebbe l’insieme di
quella gestita da tutte le macchine esistenti. Questo scenario,
che conclude i nostri percorsi evolutivi della macchina da
calcolo, potrebbe emergere da un nuovo, forse imminente
salto generazionale della macchina, dalla quarta - attuale alla quinta generazione.
L’avvento della quinta generazione è stato più volte annunciato, con definizioni diverse; ma la vera introduzione di una
nuova tecnologia non è ancora iniziata. L’idea è quella del
superamento, parziale o totale, del modello della macchina di
Von Neumann; questo potrebbe avvenire in diversi modi:
?? architetture altamente parallele, in cui il calcolo non segue il modello algoritmico della stretta sequenza di passi,
ma viene portato avanti in parallelo da molte o moltissime
macchine interagenti fra loro; cenni a questi modelli, già
usati in applicazioni speciali, sono nella sezione 2.1;
?? sistemi ad alta connettività, ispirati al sistema nervoso
centrale dei viventi, basati sull’evoluzione delle tecnologie
elettroniche attuali o su una elettronica diversa (elettronica
molecolare);
?? sistemi basati su materiali e/o tecnologie diversi: arseniuro di gallio al posto del silicio, segnali luminosi anziché
correnti elettriche per il trasporto dell’informazione
(elaborazione ottica), uso di chip a bassissime temperature
(superconduttività);
?? uso massiccio di tecniche di intelligenza artificiale nel
software di base, per spostare l’interazione con il
computer verso la descrizione di problemi anziché degli algoritmi, cioè per dotare la macchina di capacità di compren -
88
PARTE PRIMA
dere descrizioni formali di problemi, di ragionare, e di
proporre e discutere strumenti e soluzioni partendo da un
grande archivio interno di “conoscenza”.
Nessuno sa esattamente quale sarà la strada emergente;
forse più d’una, forse qualche altra su cui nessuno oggi
scommetterebbe. Ciò che è sicuro è che dalla quarta generazione in poi il peso delle grosse, costose macchine per usi
gestionali diminuisce drasticamente come quota di mercato,
rispetto ad altri tre settori più o meno in equilibrio: 1) la
macchina personale, 2) i sistemi in rete, e 3) le macchine
impiegate nell’automazione di altre macchine (queste ultime,
meccaniche) e dei processi produttivi. L’informatica, in particolare, ha oggi una grande quota di informatica nascosta: piccoli e grandi elaboratori che, anziché dialogare con uomini,
leggono, elaborano e producono segnali codificati (sezioni 1.3
e 4.2) per controllare in modo autonomo (e nascosto)
macchine e processi produttivi.
Esempi di questa piccola informatica stanno negli elettrodomestici, negli impianti elettrici, nei telefoni, nei lettori
di CD audio, nei telefoni cellulari, nelle automobili, negli
apparati diagnostici medicali, nei televisori e così via.
Esempi della grande informatica per l’automazione e le co municazioni (figura 1.20) stanno nelle centrali telefoniche
(costituite ormai da gruppi di calcolatori), nelle reti di calcolatori che rendono totalmente automatici svariati processi
all’interno di una fabbrica, che regolano il traffico di metro politane e ferrovie, eccetera. Questi aspetti dell’informatica,
in particolare, sono totalmente assenti da questo libro; il
lettore è però avvertito che possono essere trascurati, ma
non ignorati.
LE RADICI STORICHE
89
Figura 1.20 - Informatica su larga scala: esempi
1.6. Analogico e Digitale
L’informatica è scienza e tecnologia del digitale. Anche
questa parola ha un significativo percorso etimologico dal
latino all’italiano attraverso l’inglese: digitus (dito [che serve
per numerare]) - digit (cifra) - digital (che tratta numeri) - digitale. Una buona traduzione è numerico: infatti la parola è usata
per indicare memorizzazione ed elaborazione di “informa zione in forma di numeri”, elaborazione di cui il calcolo è un
caso particolare. Ma esiste una elaborazione di “informa zione non digitale”?
Il mondo che noi osserviamo è fatto sia di quantità di screte, numerabili, che di grandezze continue. Il concetto di
numero nacque in relazione ai concetti numerabili (persone,
prede, oggetti, denaro) ancora prima della maturazione delle
90
PARTE PRIMA
relative entità linguistiche, come testimoniano gli oggetti
usati per contare di epoca preistorica (ossa con tacche, sassolini in recipienti). La misura, cioè la trasposizione in numeri di grandezze continue (lunghezze, distanze, peso, va lori astronomici, tempo) tramite unità di misura è di poco posteriore. Chiamiamo - impropriamente ma per semplificare le entità continue analogiche (chiariremo poi da dove questo
termine discende), in contrapposizione alle altre numeriche.
La storia della matematica e del pensiero algoritmico ha fin
dalle origini affrontato problemi in cui erano coinvolti entrambi i tipi di entità; ad esempio, l’agrimensura e la carto grafia sono sostanzialmente del primo tipo, la contabilità
commerciale è del secondo. La matematica applicata al cal colo, originariamente, ha prodotto strumenti per problemi
di entrambi i tipi; la geometria e l’algebra delle origini sono
testimonianza dei due mondi. D’altra parte, l’evoluzione del
concetto di numerazione, prima, e del calcolo simbolico,
successivamente, hanno indirizzato il calcolo verso il procedimento numerico per passi (o procedura effettiva di calcolo, vedi
sezione 1.7), formalmente definibile, che ha dato origine al
modello algoritmico del calcolo automatizzato.
Il modello della procedura effettiva di calcolo non è però
l’unico per la soluzione dei problemi. Un modello più
intuitivo consiste nell’uso dell’analogia fra il problema in
esame e un altro di cui si conosce la soluzione o si sa come
arrivare ad essa.
Nello schema di figura 1.21 il “problema 1” viene collegato, mediante analogia, al “problema 2” di c ui è nota la
soluzione. La soluzione di quest’ultimo, rivista alla luce
dell’analogia, viene interpretata come soluzione al problema
originale. L’idea è alla base di molti procedimenti antichi e
moderni; fra i primi, la misurazione del tempo (clessidre,
orologi che sfruttano l’analogia fra il fluire del tempo e
l’evolvere di un processo meccanico), la misura di un’area o
91
LE RADICI STORICHE
di un volume mediante pesatura (basate sulla proporziona lità fra area e peso, eccetera); fra i procedimenti moderni, la
memorizzazione del suono su un nastro magnetico, basata
sull’analogia fra pressione della vibrazione sonora e intensità
del campo magnetico 14.
problema 1
analogia
problema 2
?
analogia
soluzione 2
soluzione 1
procedimento di
calcolo analogico
Figura 1.21 - Procedura effettiva di calcolo analogico
Per risolvere uno stesso problema in modo numerico, è necessario fare una operazione concettualmente identica a
quella per il passaggio da un segnale analogico ad uno digi tale (sezione 1.3), cioè quantificare e discretizzare i possibili
valori delle grandezze continue (per poterle rappresentare
come numeri) e stabilire opportuni procedimenti algoritmici
sui numeri stessi. Il problema dell’area, ad esempio, può
venir risolto in modo numerico suddividendo
(“quantizzando”) l’area in tanti quadratini di superficie unitaria, e contando i quadratini contenuti all’interno. Così fa cendo, dovrò scegliere quali quadrati parzialmente interni
contare e quali no, commettendo un errore (ineliminabile)
dovuto alla quantizzazione; ma anche il procedimento ana 14
In modo più formale, l’analogia andrebbe definita come una legge, o una
funzione matematica, non ambigua, che mette in relazione le grandezze del
“problema 1” a quelle del “problema 2”; ad esempio, nel caso dell’area di una
superficie, la proporzionalità fra area e peso. In generale, questa legge è
complessa e non sempre definibile completamente.
92
PARTE PRIMA
logico è sempre affetto da errori, a volte solo meno evidenti
(non uniformità dello spessore, incertezza sul peso specifico, precisione della pesata eccetera).
I primi metodi analogici per risolvere problemi numerici
furono probabilmente l’uso di analogie geometriche
(costruzioni geometriche per ricavare numeri secondo certe
proporzioni). Occorre attendere il secolo XVII perché da
tali intuizioni scaturissero macchine analogiche da calcolo15; la
prima di tali macchine è probabilmente il compasso di Galileo
per eseguire divisioni. È bene notare che anche le prime
macchine calcolatrici meccaniche si basavano su un’analogia: la posizione di una ruota dentata per rappre sentare
una cifra, e il trascinamento delle ruote come analogia dell’addizione e del riporto.
Il più noto e di gran lunga il più importante strumento da
calcolo analogico fu il regolo calcolatore logaritmico, ideato da
Edmund Gunter nel 1665 e diffuso fino a pochi anni fa. Il
regolo, schematizzato in figura 1.22, risolveva con eleganza
il problema dei prodotti, divisioni, radici e potenze mediante
il (recentissimo al tempo dell’invenzione) concetto di logaritmo: sulle parti fisse e quelle scorrevoli del regolo erano
rappresentati i logaritmi dei numeri reali in una decade, ad
esempio fra 1 e 10; grazie alla definizione secondo cui il logaritmo del prodotto di due numeri è pari alla somma dei
rispettivi logaritmi, il problema del prodotto, ad esempio, si
riduceva a quello della somma. La somma, a sua volta, ve niva risolta per analogia, spostando l’origine del cursore sul
valore corrispondente al primo addendo della scala fissa e
leggendo su quest’ultima il valore della somma in corrispondenza del secondo addendo sul cursore. Lo strumento
da calcolo quindi si basa su una trasformazione matematica
15 Ad essere precisi, non si dovrebbe parlare di calcolo analogico, perché il
calcolo è per definizione numerico, ma di “metodi risolutivi”.
LE RADICI STORICHE
93
(numeri e loro logaritmi) e su una analogia meccanica (la
somma di due numeri come messa in sequenza di due segmenti di lunghezza pari ai numeri stessi).
Figura 1.22 - Regolo calcolatore logaritmico
In figura 1.22 è mostrato il procedimento di calcolo ana logico per calcolare il prodotto di 2 e 3 (che fa ovviamente
6): le gradazioni sulla parte fissa (in basso) e quella scorrevole (in alto) rappresentano i logaritmi dei numeri corrispondenti; il logaritmo di 2 è sommato a quello di 3 facendo
scorrere il cursore per far allineare i tratti corrispondenti a
log(2) e log(3); il risultato, 6, è letto sulla parte fissa in corrispondenza di questa somma, realizzando l’operazione
log(2*3) = log(6) = log(2) + log (3).
Fino a dieci-venti anni fa, il regolo rappresentava così
fortemente l’idea del calcolo tecnico-scientifico da essere
l’emblema dell’automazione del calcolo. Isaac Asimov, negli
anni ‘40, nella sua famosa Trilogia Galattica, dotava gli
psico-storiografi (scienziati in grado di prevedere il comportamento delle masse di popolazioni in base a complessi
calcoli matematici), di speciali “regoli calcolatori” come
strumenti di calcolo standard.
Contemporaneamente al regolo venne anche ideato, pro babilmente ad opera dell’astronomo Cristoforo Scheiner, un
altro popolare strumento analogico: il pantografo, macchina
per effettuare ingrandimenti e riduzioni di disegni.
94
PARTE PRIMA
Il secolo XVII, oltre a produrre le prime tre calcolatrici
numeriche, fu particolarmente prodigo di macchine basate
sul principio dell’analogia; oltre alla maturità della matematica, ciò fu dovuto probabilmente alla diffusione dell’orologeria (nata un centinaio di anni prima) e dei mec canismi di
precisione. A congegni meccanici, fino all’era elettronica dei
recenti anni ’30, era affidato il calcolo analo gico; questo, più
il calcolo tabellare, fecero fronte a tutta l’automazione del
calcolo in tutti i settori fino all’800 (almeno fino a che la
necessità di addizionare, tipica della contabilità e della
statistica, non richiese prepotentemente macchine necessariamente numeriche, come le varie addizionatrici, tabulatrici
e le stesse macchine di Babbage e Scheutz).
A sottolineare l’interesse e lo sviluppo degli strumenti da
calcolo analogico, è ancora da ricordare un complesso e im portante strumento perfezionato nell’800, il planimetro di
Laffon Jacob Amsler (figura 1.23), con il quale, percorrendo
il contorno di una figura piana qualunque (tipicamente su
una mappa o un disegno), si ottiene l’area della figura. Il
planimetro ha automatizzato il calcolo delle aree (per carto grafia, topografia) fino a pochi anni fa. Ma, soprattutto, esso
era un caso pratico di una famiglia di macchine analogiche
integratrici (l’area è un’applicazione della definizione matematica di integrale). Con l’inizio dell’800, infatti, il calcolo
differenziale e integrale era uno strumento teorico maturo, e
l’integrale era il principale operatore in questo calcolo,
utilizzato nella fisica (studio dei suoni, del calore e dei
fenomeni periodici) e nell’ingegneria (meccanica in
particolare). È oggi difficile immaginarsi la varietà di
strumenti meccanici che realizzavano “l’operatore integrale”
ideati nell’800: dal semplice integratore a due ruote di J. H.
Hermann (1814), a quelli di J. C. Maxwell (1855), J.
Thomson e W. Thomson (alias Lord Kelvin) (1876);
quest’ultimo costruì una imponente macchina integratrice
95
LE RADICI STORICHE
meccanica in grado di trattare fino a 11 variabili per lo
studio dei modelli periodici delle maree.
Figura 1.23 - Planimetro
L’integrazione meccanica non aveva possibilità di realizzare modelli di problemi complessi, e non era abbastanza
veloce - la più grande integratrice meccanica, (A.A.
Michelson e S.W. Stratton, 1898) trattava modelli a ben 80
variabili ma era estremamente complessa e lenta. Anche in
questo campo, l’elettronica riuscì a sostituire la meccanica
con un significativo aumento di prestazioni all’inizio degli
anni ’30 di questo secolo, un decennio prima dell’impiego
nelle macchine digitali.
Con la costruzione del calcolatore analogico (prima
“differential analyser”, poi “analogical computer”, 1931) ini ziò una nuova generazione di macchine che ebbero per 40
anni un significativo ruolo in applicazioni tecnico-scientifiche. Il calcolatore analogico era una macchina non pro grammabile, ma configurabile: mediante collegamenti elettrici
mobili, inizialmente, e sistemi automatici di commutazione,
più recentemente, era possibile realizzare circuiti elettronici
complessi le cui equazioni caratteristiche erano analoghe o
simili (si veda la nota sull’analogia) a quelle del sistema fisico
di cui si voleva prevedere, o calcolare, il comportamento. Il
96
PARTE PRIMA
calcolatore analogico era perciò uno strumento di simulazione, e la simulazione divenne un metodo di indagine corrente per studiare sistemi complessi (meccanici, elettrici):
per prevedere il comportamento, per analizzarne il funzionamento in varie circostanze. Simulazione e analogia sono
due aspetti dello stesso principio: la definizione della similitudine fra due sistemi, per cui le variabili di uno corrispondono, anche nella loro evoluzione, a quelle dell’altro.
Il ciclo di vita del calcolatore analogico si è arrestato inesorabilmente negli anni ’70, come macchina, ma non come
principio. La simulazione oggi si effettua risolvendo modelli
numerici dei problemi, sulle usuali macchine digitali. Quando
realizzò il primo calcolatore analogico nel 1931 al MIT,
Vannevar Bush forse non immaginò che l’ultima diffusa ap plicazione della sua macchina, negli anni ’60 e ’70, sarebbe
stata quella di simulare, in tempo reale, strumenti musicali,
reali o ideali: Robert Moog (il più famoso fra altri costruttori
di simili strumenti) realizzò a metà degli anni ’60 uno speciale calcolatore analogico in grado di generare musica, il cosiddetto sintetizzatore Moog, chiamato ancora oggi moog tout
court. Grazie a musicisti geniali e innovatori, come Walter
(poi Wendy) Carlos, il moog diede origine ad una tecnologia
elettronica per la musica, allo stesso tempo innovativa e com merciale, di grande popolarità, diffusione e qualità. Dagli
anni ’80 in poi anche questa tecnologia è evoluta completa mente verso il digitale, dando origine ad una disciplina
chiamata a pieno titolo informatica musicale.
Anche se strumenti e macchine da calcolo analogiche
oggi sono in disuso, i principi dell’analogia e della simulazione sono più vivi che mai; semplicemente, il modello del
“problema analogo” (il “problema 2” di figura 1.21) viene
realizzato mediante un modello numerico e risolto in modo
algoritmico. L’attuale informatica è sempre più ricca di elementi e concetti analogici, che sono tra l’altro diventati lo
LE RADICI STORICHE
97
standard di interazione fra uomo e macchina: grafica, imma gini, i sistemi di interazione a finestre (sezione 2.3), navigazione in Internet (sezione 3.2), multimedialità (sezione 4.2),
simulazioni tridimensionali e animazioni, elaborazione del
suono, realtà virtuale: un vero e proprio “trionfo dell’analogico”. Paradossalmente, si tratta di un trionfo simulato
dal digitale.
1.7. Algoritmi,
informatica
macchine di Turing e
1.7.1. Verso una caratterizzazione rigorosa del
concetto di algoritmo
Nelle sezioni precedenti abbiamo visto come, durante
tutta la storia delle matematiche, siano stati sviluppati algo ritmi per risolvere classi sempre più estese di problemi.
Tuttavia è soltanto in anni molto più recenti che il concetto
stesso di algoritmo è stato problematizzato in maniera espli cita, e fatto oggetto diretto di ricerca matematica. Ciò è av venuto attorno agli anni ’30 del nostro secolo, nel contesto
delle ricerche sui fondamenti della matematica. Le ricerche
precedenti quel periodo si basavano su di una nozione di
algoritmo del tutto intuitiva, non specificata in modo rigo roso. Tale nozione intuitiva fu del tutto sufficiente fin tanto
che lo scopo che ci si proponeva era quello di individuare
algoritmi che risolvessero problemi, o classi di problemi
determinate. Ma con ricerche sui fondamenti della matematica avvenne un radicale cambiamento di prospettiva. Fu rono poste domande di tipo nuovo, che non riguardavano
più la possibilità di individuare algoritmi specifici, ma che
concernevano l’intera classe dei procedimenti di tipo algoritmico. Soprattutto nel contesto del progetto fondazionali sta proposto da David Hilbert, diventava fondamentale ri -
98
PARTE PRIMA
spondere alla domanda se esistessero problemi matematici
che non ammettono neppure in linea di principio di essere
risolti mediante alcun algoritmo. Tutto ciò era a sua volta
strettamente legato allo studio delle proprietà dei sistemi
formali della logica matematica. Nel momento che la ricerca
si indirizzò allo studio delle proprietà della classe di tutti i
procedimenti algoritmici, tale classe dovette essere caratterizzata in maniera rigorosa, e non fu più sufficiente la tradi zionale definizione informale ed intuitiva. Nacque così quel
settore della logica matematica che è stato detto in seguito
teoria della computabilità (o della calcolabilità) effettiva (oppure
anche teoria della ricorsività), in cui vengono indagati concetti
quali quello di algoritmo e di funzione computabile in modo
algoritmico.
Durante gli anni ’30 numerosi fra i maggiori logici del periodo, fra i quali Gödel, Church, Post, Kleene, e Turing, af frontarono, da punti di vista differenti, il problema di indi viduare una definizione rigorosa della nozione di algoritmo.
In questa sezione presenteremo uno di questi approcci,
quello seguito dal logico inglese Alan Turing, che, rispetto
agli studi coevi sulla computabilità, presenta il vantaggio di
affrontare direttamente il problema, senza presupporre altre
nozioni o strumenti formali elaborati nell’ambito della ri cerca logico-matematica, analizzando direttamente il com portamento di un soggetto umano computante. Inoltre,
Turing ha formulato la sua proposta nei termini di una par ticolare classe di macchine astratte, che possono essere considerate modelli idealizzati dei calcolatori reali. Infine,
l’interesse del lavoro di Turing risiede anche nelle implicazioni avute in altri ambiti disciplinari, quali la filosofia della
mente, l’intelligenza artificiale e le scienze cognitive.
Prima di esaminare la proposta di Turing, riprendiamo
brevemente la nozione informale di algoritmo. Intuitiva mente, e in prima approssimazione, si dispone di un algo-
LE RADICI STORICHE
99
ritmo (o di un metodo effettivo) per risolvere un problema se si
dispone di un elenco finito di istruzioni tali che:
1) a partire dai dati iniziali, le istruzioni sono applicabili in
maniera rigorosamente deterministica, in maniera cioè
che ad ogni passo sia sempre possibile stabilire univocamente quale è l’istruzione che deve essere applicata al
passo successivo;
2) si dispone di un criterio univoco per stabilire quando si
è raggiunto uno stato finale, quando cioè il processo deve
considerarsi terminato e il risultato, se esiste, è stato ottenuto. Uno stato finale deve sempre essere raggiungibile
in un numero finito di passi.
Chiameremo input i dati di partenza; output il risultato del
calcolo.
Una funzione si dice calcolabile in modo algoritmico (o calcolabile
in modo effettivo, o effettivamente calcolabile) se esiste un algoritmo che consente di calcolarne i valori per tutti gli argomenti.
Esempi di algoritmi possono essere tratti dalle matematiche elementari: sono algoritmi, ad esempio, gli insiemi di regole che consentono di eseguire le quattro operazioni, come
pure è un algoritmo il procedimento euclideo per la ricerca
del massimo comun divisore di due numeri naturali. In logica, il metodo delle tavole di verità è un algoritmo che
permette di stabilire se una formula del calcolo proposizionale è o meno una tautologia. Per le caratteristiche di de terminismo e di finitezza che abbiamo enunciato, ogni algo ritmo si presta, almeno in linea di principio, ad essere auto matizzato, ad essere eseguito cioè da una macchina oppor tunamente progettata. Con lo sviluppo dell’informatica, la
teoria della computabilità effettiva ha dunque assunto, in un
certo senso, il ruolo di “teoria dei fondamenti” per questa
disciplina.
100
PARTE PRIMA
1.7.2. Le macchine di Turing
Turing affrontò il problema di fornire un equivalente rigoroso del concetto intuitivo di algoritmo definendo un
modello dell’attività di un essere umano che stia eseguendo
un calcolo di tipo algoritmico. Egli elaborò tale modello
nella forma di una classe di dispositivi computazionali, di
macchine calcolatrici astratte, che in seguito furono dette
appunto macchine di Turing (d’ora in avanti MT). Le MT sono
macchine astratte nel senso che, nel caratterizzarle, non
vengono presi in considerazione quei vincoli che sono fon damentali se si intende progettare una macchina calcolatrice
reale (ad esempio, le dimensioni della memoria, i tempi del
calcolo, e così via), e soprattutto nel senso che esse sono de finite a prescindere dalla loro realizzazione fisica (ad esempio, dal tipo di hardware utilizzato). Vale a dire, che cosa sia
una MT dipende esclusivamente dalle relazioni funzionali
che sussistono fra le sue parti, e non dal fatto di poter essere
costruita con particolari dispositivi materiali.
Seguiamo l’analisi del processo di calcolo come viene
condotta da Turing stesso nell’articolo “On computable
numbers, with an application to the Entscheidungspro blem”, del 1936-37, dove il concetto di MT viene formulato
per la prima volta. Un calcolo, osserva Turing, consiste
nell’operare su di un certo insieme di simboli scritti su di un
supporto fisico, ad esempio un foglio di carta. Turing argo menta che il fatto che abitualmente venga usato un sup porto bidimensionale è inessenziale, e che si può quindi
assumere, senza nulla perdere in generalità, che la nostra
macchina calcolatrice utilizzi per la “scrittura” un nastro
mono-dimensionale di lunghezza virtualmente illimitata in
entrambe le direzioni (tuttavia, come vedremo, in ogni fase
del calcolo la macchina potrà disporre soltanto di una
porzione finita di esso). Tale nastro sia inoltre suddiviso in
celle, in “quadretti”, “come un quaderno di aritmetica per
101
LE RADICI STORICHE
bambini”, ciascuna delle quali potrà ospitare un solo simbolo alla volta (figura 1.24).
sj
?q
nastro
testina di lettura/scrittura
i
Figura 1.24 - Macchina di Turing
Quanto ai simboli da utilizzare per il calcolo, ogni mac china potrà disporre soltanto di un insieme finito di essi, che
chiameremo l’alfabeto di quella macchina. Il fatto che l’alfabeto di cui si può disporre sia finito non costituisce
comunque una grave limitazione. È infatti sempre possibile
rappresentare un nuovo simbolo mediante una sequenza fi nita di simboli dell’alfabeto, ed avere così la possibilità di
esprimere un numero virtualmente infinito di simboli (come
avviene usualmente nella numerazione decimale mediante
cifre arabe). Sia dunque ? ? {s1, s2, ... ,sn} l’alfabeto di una
generica MT. Ogni cella del nastro potrà contenere uno di
tali simboli, oppure, in alternativa, restare vuota (indicheremo con s0 la cella vuota).
Vi è senza dubbio un limite al numero di simboli che un
essere umano può osservare senza spostare lo sguardo sul
foglio su cui sta lavorando. Turing argomenta che si può
quindi assumere senza perdita di generalità che la macchina
possa esaminare soltanto una cella alla volta, ed “osservare”
ad ogni passo al più un singolo simbolo. A tal fine la mac china sarà dotata di una testina di lettura, che sarà collocata, in
ogni fase del calcolo, su di una singola cella (figura 1.24).
Essa, per poter accedere alle altre celle del nastro, dovrà
spostarsi verso destra o verso sinistra. Chi sta eseguendo un
calcolo ha poi la possibilità di scrivere nuovi simboli, di
cancellare quelli già scritti o di sostituirli con altri. La testina
102
PARTE PRIMA
eseguirà anche tali compiti di cancellazione e di scrittura.
Anche in questo caso però essa potrà agire soltanto sulla
cella “osservata”, e, per accedere ad altre celle, dovrà prima
spostarsi lungo il nastro. Poiché ogni cella può contenere un
solo simbolo, scrivendo un nuovo simbolo in una cella il
simbolo eventualmente presente in essa si deve ritenere
cancellato.
Nell’eseguire un calcolo, un essere umano tiene conto
delle operazioni già eseguite e dei simboli osservati in precedenza mediante la propria memoria, cambiando cioè il
proprio “stato mentale”. Al fine di simulare ciò, supporremo che una macchina possa assumere, in dipendenza
dagli eventi precedenti del processo di calcolo, un certo
numero di stati interni (uno e non più di uno alla volta), che
corrispondano agli “stati mentali” dell’essere umano. Tali
stati saranno in numero finito, poiché (usando la parole
dello stesso Turing) “se ammettessimo un’infinità di stati
mentali, alcuni di essi sarebbero ‘arbitrariamente prossimi’,e
sarebbero quindi confusi”. Il limitarsi ad un numero finito
di stati non costituisce tuttavia un vincolo, in quanto “l’uso
di stati mentali più complicati può essere evitato scrivendo
più simboli sul nastro”. Siano allora q0, q1, ... , qm gli stati
che una generica MT può assumere. Nella rappresentazione
grafica indicheremo sotto la testina di lettura/scrittura lo
stato della macchina nella fase di calcolo rappresentata.
Definiamo configurazione di una MT in una data fase di
calcolo la coppia costituita dallo stato interno che essa
presenta in quel momento e dal simbolo osservato dalla
testina (la configurazione della macchina raffigurata nella
figura 1.24 è dunque (qi, sj)).
Una MT può dunque eseguire operazioni consistenti in
spostamenti della testina lungo il nastro, scrittura e cancellazione di simboli, mutamenti dello stato interno. Scompo niamo tali operazioni in un numero di operazioni atomiche, tali
LE RADICI STORICHE
103
da non poter essere ulteriormente scomposte in operazioni
più semplici. Nel tipo di macchina descritto ogni operazione
può essere scomposta in un numero finito delle operazioni
seguenti:
(1) sostituzione del simbolo osservato con un altro simbolo
(eventualmente con s0; in tal caso si ha la cancellazione
del simbolo osservato), e/o
(2) spostamento della testina su di una delle celle immediatamente attigue del nastro.
Ognuno di tali atti può inoltre comportare:
(3) un cambiamento dello stato interno della macchina.
Nella sua forma più generale, ogni operazione atomica
dovrà quindi consistere di un operazione di scrittura
e/o di uno spostamento atomico, ed eventualmente di
un mutamento di stato.
Indicheremo d’ora in avanti rispettivamente con le lettere
S, D e C il fatto che una macchina debba eseguire uno spo stamento (di una cella) verso sinistra (S), verso destra (D),
oppure non debba eseguire alcuno spostamento (dove C sta
per “centro”). Grazie a ciò potremo rappresentare ogni ope razione atomica mediante una terna, il primo elemento d ella
quale starà ad indicare il simbolo che deve essere scritto
sulla cella osservata, il secondo quale spostamento deve essere eseguito (S, D o C), il terzo infine lo stato che la mac china deve assumere alla fine dell’operazione. Ad esempio,
la terna:
si S qj
significa che la macchina deve scrivere il simbolo si sulla
cella osservata, spostarsi di una cella a sinistra, ed assumere
infine lo stato qj. Invece la terna:
s 0 C qp
104
PARTE PRIMA
significa che la macchina deve cancellare il simbolo osservato, non eseguire alcun movimento ed assumere lo stato qp.
Ogni singola MT deve essere “attrezzata” per eseguire un
tipo di calcolo specifico, deve cioè disporre di una serie di
regole, di istruzioni, che le permettano di eseguire il compito
per il quale è stata progettata. In un calcolo algoritmico ogni
passo deve essere completamente determinato dalla situazione precedente. Nel caso di un calcolatore umano, ogni
sua mossa deve dipendere esclusivamente dal ricordo delle
operazioni già eseguite e dai simboli che egli può osservare.
Analogamente, in una MT, poiché in ogni fase del calcolo la
macchina “sa” soltanto in quale stato si trova e quale è il
simbolo sulla cella osservata del nastro (cioè sa quale è la
sua configurazione corrente), e poiché ogni operazione può
essere scomposta in operazioni atomiche, allora ogni gene rica istruzione avrà la forma seguente:
<configurazione> ?
<azione atomica>
Cioè, ogni istruzione deve specificare quale operazione
atomica deve essere eseguita a partire da una determinata
configurazione. Un esempio di istruzione di questo tipo è:
qi s j ?
sj’ D qi’
che deve essere interpretata come segue: qualora la macchina si trovi nello stato qi ed il simbolo osservato sia sj, allora il simbolo sj’dovrà essere scritto sul nastro al posto di
sj, la testina dovrà spostarsi di una cella verso destra e la
macchina dovrà assumere lo stato qi’. In generale, poiché
ogni configurazione è rappresentabile mediante una coppia,
ed ogni operazione atomica mediante una terna, una istru zione (in cui di solito il simbolo “? ” viene omesso e considerato sottinteso) avrà la forma di una quintupla, i primi
due elementi della quale (uno stato interno ed un simbolo
dell’alfabeto) indicano la configurazione di partenza, mentre
gli ultimi tre elementi specificano l’operazione che deve es-
LE RADICI STORICHE
105
sere eseguita. Le istruzioni di cui dispone ogni singola MT
per eseguire il calcolo per il quale è stata progettata avranno
quindi la forma di un opportuno insieme finito di quintuple
(che verrà detto la tavola di quella MT). Una volta fissato
l’alfabeto, ciò che caratterizza ogni singola MT rispetto a
tutte le altre è appunto la tavola delle sue quintuple. Affinché un insieme di quintuple costituisca la tavola di una MT è
indispensabile che venga rispettata la seguente condizione.
Poiché il calcolo deve essere deterministico, a partire da una
singola configurazione non devono essere applicabili istruzioni diverse. Il che corrisponde alla condizione che, nella
tavola di una macchina, non possano comparire più quintu ple con i primi due elementi uguali.
Affinché il calcolo possa terminare, è necessario che ad
alcune delle configurazioni possibili non corrisponda alcuna
quintupla, altrimenti, qualunque fosse il risultato di una
mossa, esisterebbe sempre un’altra mossa che ad essa do vrebbe far seguito. Chiameremo tali configurazioni configurazioni finali. Data una MT, è sempre possibile costruirne
un’altra che esegua lo stesso calcolo, per la quale esista uno
specifico stato interno che compare in tutte e sole le confi gurazioni finali. Chiameremo tale stato stato finale, e stabiliremo convenzionalmente di riservare ad esso il simbolo q0.
Data una MT generica, per trasformarla in una che abbia q0
come stato finale si proceda nel modo seguente. Sia ( qn, sm)
una generica configurazione finale della macchina di partenza. La tavola della nuova macchina si ottiene aggiun gendo tutte le quintuple del tipo:
qn s m s m C q 0 .
In ogni caso in cui la macchina di partenza giungeva in
uno stato finale, la nuova macchina farà un’ulteriore mossa,
assumendo lo stato q0 (e lasciando inalterato tutto il resto).
I dati vengono forniti a una MT sotto forma di una se -
106
PARTE PRIMA
quenza finita di simboli dell’alfabeto scritti sul nastro prima
dell’inizio del calcolo (chiameremo input tale sequenza di
simboli). Il risultato è costituito invece da ciò che è scritto
sul nastro al momento della fermata (questo è l’output della
macchina). Stabiliamo convenzionalmente che all’inizio del
calcolo la testina debba essere collocata in posizione standard
(vale a dire, in corrispondenza del primo simbolo a sinistra
dell’input), e che lo stato interno della macchina debba es sere q1.
Vediamo un semplice esempio di MT. Si consideri
l’alfabeto ? ? {|}, composto come unico simbolo da una
barra verticale. Definiamo una macchina che, presa come
input una successione di barre consecutive, restituisca come
output tale successione aumentata di un elemento. A tal fine
è sufficiente disporre del solo stato interno q1 (oltre allo
stato finale q0); la tavola della macchina sarà la seguente:
q1 | | D q 1
q1 s0 | C q0.
Secondo le convenzioni stabilite, alla partenza la testina
deve essere collocata sul primo simbolo a sinistra dell’input,
e lo stato di partenza deve essere q1 (figura 1.25).
?q
1
Figura 1.25
Fintanto che la testina trova celle segnate con | allora, in
virtù della prima quintupla, viene riscritto | sulla cella osservata (cioè, vengono lasciate le cose come stanno), e la te stina si sposta a destra di una cella mantenendo lo stato q1
(figura 1.26).
107
LE RADICI STORICHE
?q
1
?q
1
................
?q
1
Figura 1.26
Quando la testina osserva una cella vuota viene attivata la
seconda quintupla, in virtù della quale la macchina deve segnare con una barra la cella osservata, non eseguire alcuno
spostamento, ed assumere lo stato finale q0 (figura 1.27).
?q
0
Figura 1.27
Sin qui abbiamo considerato MT che eseguono calcoli su
dati generici. Vediamo ora come si possano codificare i numeri naturali in modo da definire MT che calcolino funzioni
aritmetiche. Utilizziamo come alfabeto ? ? {|}. I numeri
naturali vengono codificati come segue. Al numero 0 corrisponde la sequenza composta da una sola barra. In generale,
ogni numero n viene codificato da una sequenza di n + 1
barre. Una n-pla di numeri naturali (k1, ... , kn) viene codificata sul nastro scrivendo la sequenza di barre corrispondente ad ogni ki (con 1 ? i ? n), e lasciando una cella vuota
come separatore fra ognuna di tali sequenze. Ad esempio, la
108
PARTE PRIMA
terna (4, 1, 0) viene codificata come in figura 1.28.
Figura 1.28
Diremo che una macchina M? computa una funzione ? ad
n argomenti (con n? 1) se e solo se quanto segue vale per ogni
n-pla (x1, ... , xn) di numeri naturali. Sia (x1, ... , xn) codificata nel modo sopra descritto e collocata in posizione stan dard rispetto alla testina (essendo vuota ogni altra cella del
nastro). Allora ? (x1, ... , xn) = y se e solo se, al termine del
calcolo, l’output di M? è costituito dalla codifica di y.
Diremo che una funzione ? è T-computabile se e solo se esiste una MT M? che la computa.
1.7.3. Esempi di macchine di Turing
In questa sezione presentiamo alcuni esempi di MT che
eseguono semplici calcoli. Eccetto i casi in cui sia indicato
esplicitamente, ognuna delle macchine ha ? ? {|}, e, al
momento dell’avvio, la testina deve essere collocata sulla
prima cella a sinistra dell’input. Lo stato iniziale è q1.
1. MT che esegue l’addizione di due numeri. Input: codifica
di una coppia di numeri naturali.
q1 | |
q2 | |
D q1
D q2
q1 s 0 | D
q2 s 0 s 0 S
q4 | s 0 C
q2
q3
q3 | s 0 S q 4
q0
La macchina riempie con una barra la cella vuota che separa
i due numeri dell’input, dopo di che cancella le due barre finali del secondo numero.
2. MT che raddoppia il numero di | consecutive che le
viene dato in input. Input: sequenza di |.
109
LE RADICI STORICHE
q1 |
s0 D q 2
q2 |
|
D q2
q2 s 0
q3 s 0
s0 D q 3
| D q4
q3 |
|
q4 s 0
|
D q3
S q5
q5 |
|
q6 |
|
q7 |
|
S q5
S q7
q5 s 0 s 0 S q 6
q6 s0 s0 C q0 (*)
S q7
q7 s 0 s 0 D q 1
La macchina cancella la prima barra a destra dell’input,
dopo di che si colloca a destra dell’input (lasciando una cella
vuota come separatore), e stampa due barre. Torna quindi
indietro, e ripete l’operazione sino a che tutte le barre
dell’input sono state cancellate.
3. MT che calcola la funzione ? (x)=2x. Input: codifica di un
numero naturale. La tavola è la stessa della macchina precedente, in cui la quintupla (*) è stata sostituita dalle tre quintuple seguenti:
q6 s 0 s 0 D q 8
q8 s 0 s 0 D q 8
q8 | s 0 C q 0
Poiché la codifica di un numero n è costituita da n+1 barre,
la codifica di 2n è costituita da 2n+1 = 2(n+1)-1 barre.
Quindi questa macchina, dopo avere raddoppiato il numero
delle barre in input, cancella una barra e si ferma.
4. MT che calcola la funzione il cui valore è 1 se
l’argomento è un numero pari, 0 se l’argomento è dispari.
Input: codifica di un numero naturale.
q1 | s 0
D q2
q2 | s 0 D q 1
q1 s 0 |
q3 s 0 |
C q0
C q0
q2 s 0 | D q 3
110
PARTE PRIMA
La macchina cancella successivamente tutte le barre
dell’input, assumendo alternativamente gli stati q1 e q2. Se,
quando l’intero input è stato cancellato, lo stato è q1 (il che
accade se l’input era la codifica di un numero dispari), la
macchina stampa una barra (la codifica di 0). Altrimenti, se
lo stato è q2 (se cioè l’input era pari), stampa due barre (la
codifica di 1). Dopo di che si ferma.
5. MT che calcola la differenza fra due numeri naturali.
Input: codifica di una coppia di numeri naturali, di cui il
primo maggiore o uguale del secondo. All’inizio del calcolo
la testina deve essere collocata sulla prima cella a destra
dell’input.
q1 |
s0 S q 2
| S q3
q2 s 0
q3 |
s0 C q 0
| S q3
q3 s 0 s 0 S q 4
q4 | s 0 D q 5
q5 | | D q 6
q6 s 0 s 0 S q 1
q4 s 0
q5 s 0
s0 S q 4
s0 D q 5
q6 |
|
q2 |
D q6
La macchina cancella una barra dalla codifica del secondo
numero in input. Dopo di che cancella alternativamente una
barra dalla codifica del secondo e del primo numero in
input, sino a che la codifica del secondo numero non è stata
cancellata completamente.
6. MT che controlla se una sequenza di parentesi è bilan ciata, se cioè, per ogni parentesi aperta, esiste una parentesi
chiusa corrispondente. ? ? { ( , ) , X }. Input: una sequenza
di ( e ) (senza celle vuote in mezzo). Output: una sequenza
di sole X se le parentesi dell’input erano bene accoppiate;
altrimenti, una sequenza di simboli di ? comprendente (
oppure ).
111
LE RADICI STORICHE
q1 ( ( D q 1
q1 X X D q 1
q1 ) ) S
q2 X X S q 2
q3 X X D q 3
q2
q2 ( X D q 3
q3 ) X D q 1
q2 s 0 s 0 C q 0
q1 s 0 s 0 C q 0
la macchina percorre l’input da sinistra verso destra mantenendosi nello stato q1 finché non trova una ); allora passa in
q2 e torna in dietro fino alla prima ( che incontra, che sostituisce con una X; assume quindi lo stato q3 e torna a destra, a sostituire con X anche la ) precedentemente individuata; dopo di che, torna in q1 e ripete da capo l’operazione;
si ferma non appena la testina incontra una cella vuota.
1.7.4. La tesi di Church
Nel 1936 il logico americano Alonzo Church, in seguito
alle sue ricerche sulla computabilità effettiva, propose di
identificare la classe delle funzioni calcolabili mediante un
algoritmo (o funzioni effettivamente calcolabili) con una
particolare classe di funzioni aritmetiche, detta in seguito
classe delle funzioni ricorsive generali. Tale identificazione divenne nota col nome di Tesi di Church. È possibile dimostrare l’equivalenza fra la classe delle funzioni ricorsive
generali e la classe delle funzioni T-computabili, in quanto
ogni funzione T-computabile è ricorsiva generale, e viceversa. La Tesi di Church può quindi essere formulata come
segue:
una funzione è effettivamente calcolabile
se e solo se è T-computabile.
Che ogni funzione ricorsiva generale (o T-computabile)
sia effettivamente computabile segue direttamente dalla definizione di T-computabilità e di MT. Ciò che invece è rilevante e problematico nella Tesi di Church è l’implicazione
112
PARTE PRIMA
inversa, secondo la quale ogni procedimento algoritmico è
riconducibile alla ricorsività generale. Algoritmo e funzione
computabile in modo effettivo sono concetti intuitivi, non
specificati in modo rigoroso, per cui non è possibile una
dimostrazione formale di equivalenza con il concetto di
funzione ricorsiva generale. La Tesi di Church non è dunque una congettura che, in linea di principio, potrebbe un
giorno diventare un teorema. Tuttavia, la nozione intuitiva
di funzione computabile in modo effettivo è contraddistinta
da un insieme di caratteristiche (quali determinismo, finitezza di calcolo, eccetera) che possiamo considerare in larga
misura “oggettive”. Questo fa sì che sia praticamente sempre possibile una valutazione concorde nel decidere se un
dato procedimento di calcolo debba essere considerato algoritmico o meno. Quindi, almeno in linea di principio, è
ammissibile che venga “scoperto” un controesempio alla
Tesi di Church: che si individui cioè una funzione effettivamente calcolabile secondo questi parametri intuitivi, ma che
non sia allo stesso tempo ricorsiva generale. In questa
sezione esporremo le ragioni per cui si ritiene improbabile
che un evento del genere si verifichi.
Prima di procedere, è opportuno un chiarimento. Le funzioni ricorsive generali (o T-computabili) sono esclusivamente funzioni aritmetiche. Ciò potrebbe sembrare troppo
restrittivo, in quanto esistono algoritmi definiti su oggetti
diversi dai numeri naturali. Vi sono algoritmi che stabiliscono se un certo oggetto matematico appartiene a un dato
insieme o meno. Ve ne sono altri che eseguono operazioni
simboliche sulle espressioni di un sistema formale, stabilendo ad esempio se una data formula gode o meno di una
certe proprietà. In logica matematica tuttavia sono state
sviluppate tecniche mediante le quali algoritmi di tipo diverso, quali quelli sopra citati, possono essere ricondotti a
funzioni aritmetiche. I numeri naturali infatti possono es -
LE RADICI STORICHE
113
sere utilizzati per rappresentare, mediante opportune codifiche, dati o informazioni di varia natura, purché di tipo di screto. Nel caso delle MT, si può dimostrare che ogni macchina con un alfabeto ? di simboli finito può essere trasformata in una macchina equivalente che calcola una fun zione aritmetica T-computabile come definita nella sezione
1.7.2.
Seguendo in parte l’analisi del logico S.C. Kleene, raccoglieremo gli argomenti a favore della Tesi di Church in due
gruppi, (a) e (b).
(a) Il primo gruppo di argomenti poggia su quella che si può
chiamare evidenza euristica. Rientra in questo gruppo la constatazione che, per ogni singola funzione calcolabile che sia
stata esaminata, è sempre stato possibile dimostrare la sua
appartenenza alla classe delle funzioni ricorsive generali.
Analogamente, si è dimostrato che le operazioni note per
definire funzioni effettivamente calcolabili a partire da altre
funzioni effettivamente calcolabili conservano la ricorsività
generale. Tale indagine è stata condotta per un grande nu mero di funzioni, di classi di funzioni e di operazioni. In fine, i vari metodi tentati per costruire funzioni effettivamente calcolabili che non fossero ricorsive generali hanno
condotto tutti al fallimento, nel senso che le funzioni otte nute erano tutte a loro volta ricorsive generali, oppure non
erano calcolabili in modo effettivo.
(b) Nel secondo gruppo di argomenti viene considerata
l’equivalenza delle diverse formulazioni proposte. Abbiamo accennato al fatto che numerosi studiosi hanno lavorato ad
una definizione rigorosa del concetto di algoritmo. Ebbene,
tutti i tentativi che furono elaborati per caratterizzare in
modo rigoroso la classe di tutte le funzioni effettivamente
computabili si rivelarono equivalenti, nel senso che la classe
di funzioni ottenuta era sempre la classe delle funzioni ricorsive generali. Ciò che è particolarmente rilevante ai fini di
114
PARTE PRIMA
una “corroborazione” della Tesi di Church è la diversità degli strumenti e dei concetti impiegati nelle diverse formulazioni. In molti casi tali formulazioni traggono la loro origine
da concetti matematici preesistenti. Nel caso della ricorsività
generale di Herbrand-Gödel si prendono le mosse dal concetto
di sistema di equazioni, nella ? -ricorsività di Church si parte
dall’idea di un calcolo di sole funzioni, il ? -calcolo.
Schoenfinkel e Curry elaborarono il cosiddetto calcolo dei
combinatori. Ad E. Post è dovuto l’approccio basato sui sistemi
normali o canonici. Negli anni cinquanta, il logico sovietico A.
A. Markov propose un’ulteriore formulazione tramite quelli
che vennero poi detti appunto algoritmi di Markov. Tale indipendenza dalla formulazione utilizzata è ovviamente un
forte elemento a favore della Tesi di Church.
Un posto a sé merita l’apporto all’evidenza della Tesi di
Church fornito dall’analisi del concetto di calcolo algoritmico compiuta da Turing. Il concetto di macchina di Turing si
distingue dalla maggior parte degli approcci sopra elencati in
quanto non si tratta di un concetto matematico elaborato
per ragioni diverse e proposto in un secondo tempo come
formulazione rigorosa del concetto di algoritmo, quanto
piuttosto di un tentativo diretto di costruire un modello
dell’attività di un essere umano che esegue un calcolo di tipo
deterministico. Storicamente, fu proprio l’analisi di Turing
ad aumentare notevolmente il convincimento della correttezza della Tesi di Church.
Questo tipo di approccio al problema della computabilità
effettiva ha condotto alcuni studiosi a considerare la Tesi di
Church come una sorta di “legge empirica” piuttosto che
come un enunciato a carattere logico-formale”. Il logico
Emil Post, il quale, nel 1936, propose un concetto di mac china calcolatrice in parte analogo a quello sviluppato da
Turing, sottolineava il suo disaccordo da chi tendeva ad
identificare la Tesi di Church con un assioma o una mera
LE RADICI STORICHE
115
definizione. Essa dovrebbe piuttosto essere considerata, afferma Post, una ipotesi di lavoro, che, se opportunamente
corroborata, dovrebbe assumere il ruolo di una “legge naturale”, una “fondamentale scoperta circa le limitazioni del
potere matematizzante dell’Homo sapiens”.
1.7.5.
La macchina di Turing universale e il
calcolatore di Von Neumann
L’interesse delle MT per la teoria delle macchine calcolatrici e per l’informatica risiede innanzi tutto nel fatto che le
MT sono un modello del calcolo algoritmico, di un tipo di
calcolo quindi che è, in linea di principio, automatizzabile,
eseguibile cioè da un dispositivo meccanico. Ogni MT è
quindi il modello astratto di un calcolatore - astratto in
quanto prescinde da alcuni vincoli di limitatezza cui i calcolatori reali devono sottostare; ad esempio, la memoria di una
MT (vale a dire il suo nastro) è potenzialmente estendibile
all’infinito (anche se, in ogni fase del calcolo, una MT può
sempre utilizzarne solo una porzione finita), mentre un cal colatore reale ha sempre limiti ben definiti di memoria.
Vi sono altre ragioni che giustificano l’analogia fra MT e
moderni calcolatori digitali. Sino ad ora abbiamo conside rato MT che sono in grado di effettuare un solo tipo di cal colo, sono cioè dotate di un insieme di quintuple che con sente loro di calcolare una singola funzione (ad esempio la
somma, o il prodotto). Esiste tuttavia la possibilità di defi nire una MT, detta Macchina di Turing Universale (d’ora in poi
MTU), che è in grado di simulare il comportamento di ogni
altra MT. Ciò è reso possibile dal fatto che le quintuple di
ogni MT possono essere rappresentate in maniera tale da
poter essere scritte sul nastro di una MT. Abbiamo accennato al fatto (sezione 1.7.4) che i numeri naturali possono
essere utilizzati per codificare informazioni di tipo discreto
di diverso genere. In particolare, è possibile sviluppare un
116
PARTE PRIMA
metodo per codificare mediante numeri naturali la tavola di
una qualsiasi MT. In questo modo, il codice di una MT può
essere scritto sul nastro e dato in input a un’altra MT. Inol tre, tale codifica può essere definita in maniera tale che, dato
un codice, si possa ottenere la tavola corrispondente e viceversa mediante un procedimento algoritmico (una codifica
che goda di questa proprietà è detta una codifica effettiva).
Si può dimostrare che esiste un MT (la MTU appunto)
che, preso in input un opportuno codice effettivo delle
quintuple di un’altra macchina, ne simula il comportamento.
In altre parole, la MTU è una macchina il cui inp ut è composto da due elementi (si veda la parte superiore di figura
1.29): 1. la codifica della tavola di un’altra MT (chiamiamola
M), 2. un input per M (chiamiamolo I). Per ogni M e per
ogni I, la MTU “decodifica” le quintuple di M, e le applica
ad I, ottenendo lo stesso output che M avrebbe ottenuto a
partire da I (come nella parte inferiore di figura 1.29).
Poiché la MTU è in grado di simulare il comportamento
di qualsiasi MT, allora essa, in virtù della Tesi di Church, è
in grado di calcolare qualsiasi funzione che sia calcolabile
mediante un algoritmo. Ciò che caratterizza la MTU rispetto
alle MT usuali è costituito dal fatto di essere una macchina
calcolatrice programmabile. Mentre infatti le normali macchine
di Turing eseguono un solo programma, che è
“incorporato” nella tavola delle loro quintuple, la MTU assume in input il programma che deve eseguire (cioè, la codifica delle quintuple della MT che deve simulare), e le quintuple che compongono la sua tavola hanno esclusivamente
la funzione di consentirle di interpretare e di eseguire il programma ricevuto in input.
117
LE RADICI STORICHE
Inizio del calcolo:
Codifica della
macchina M
Input I per la
macchina M
?
q1
Fine del calcolo:
Output della macchinaM
per l'input I
?
q0
Figura 1.29 - Macchina di Turing Universale
Un’altra caratteristica fondamentale della MTU è dato dal
tipo di trattamento riservato ai programmi. La MTU tratta i
programmi (cioè la codifica delle quintuple della MT da simulare) e i dati (l’input della MT da simulare) in maniera sostanzialmente analoga: essi vengono memorizzati sullo
stesso supporto (il nastro), rappresentati utilizzando lo
stesso alfabeto di simboli ed elaborati in modo simile. Queste caratteristiche sono condivise dagli attuali calcolatori,
che presentano la struttura nota come architettura di Von
Neumann (vedi sezione 1.5.3). La struttura di un calcolatore
di Von Neumann è raffigurata, molto schematicamente,
nella figura 1.30. Un dispositivo di input e un dispositivo di
output permettono di accedere dall’esterno alla memoria del
calcolatore, consentendo, rispettivamente, di inserirvi e di
estrarne dei dati. Le informazioni contenute in memoria
vengono elaborate da una singola unità di calcolo (detta
CPU - Central Process Unit), che opera sequenzialmente su di
essi, si veda la sezione 2.1). La caratteristica più importante
della macchina di Von Neumann è costituita dal fatto che
118
PARTE PRIMA
sia dati che programmi vengono trattati in modo
sostanzialmente omogeneo, ed immagazzi nati nella stessa
unità di memoria. Così, quando un programma deve essere
eseguito, l’unità di calcolo lo reperisce in memoria, e lo
applica quindi ai dati, anch’essi conservati in memoria.
Questo consente una grande flessibilità al sistema. Ad
esempio, poiché dati e programmi sono oggetti di natura
omogenea, è possibile costruire programmi che prendano in
input altri programmi e li elaborino, e che producano
programmi in output. Queste possibilità sono am piamente
sfruttate negli attuali calcolatori digitali, e da esse deriva gran
parte della loro potenza e della loro facilità d’uso (ad
esempio, un compilatore o un sistema operativo sono
essenzialmente programmi che operano su altri programmi).
In questo senso limitato, un calcolatore di Von Neumann
costituisce una realizzazione concreta della MTU (e la memoria dati/programmi può essere considerata l’equivalente
del nastro della MTU). Anche la potenza computazionale è
la stessa, nel senso che, se lo si suppone dotato di una me moria e di tempi di calcolo virtualmente illimitati e si prescinde dalla possibilità di errori, un calcolatore di Von
Neumann è in grado di calcolare tutte le funzioni computa bili secondo la Tesi di Church (per questo si dice che una
macchina di Von Neumann è un calcolatore universale). Per
queste ragioni, la MTU costituisce un modello astratto degli
attuali calcolatori digitali (elaborato prima della loro realizzazione fisica).
CPU
unità
di input
memoria
dati/programmi
unità
di output
Figura 1.30 - Macchina di Von Neumann
LE RADICI STORICHE
119
Si noti che anche i vari linguaggi di programmazione svi luppati in informatica consentono di definire tutte e sole le
funzioni ricorsive generali (purché, ovviamente, si supponga
che tali linguaggi “girino” su calcolatori ideali con memoria
e tempi di calcolo illimitati). Questo vale sia per i linguaggi
di programmazione di alto livello (come PASCAL,
FORTRAN, BASIC, C, LISP, PROLOG, ecc.), sia per i vari
tipi di codice assembler. In questo senso, tali linguaggi possono
essere considerati analoghi ai vari formalismi citati al punto
(b) della sezione 1.7.4.
1.7.6. Il problema della fermata
La tesi di Church ha molte importanti conseguenze dal
punto di vista teorico. Dalla sua validità consegue l’esistenza
di problemi che non sono risolvibili mediante un algoritmo
(come si ricorderà, stabilire se tutti i problemi matematici
possono essere in linea di principio risolti con un algoritmo
era stata una delle motivazioni principali per lo studio rigoroso del concetto di algoritmo). In particolare, si può dimo strare che non è effettivamente decidibile il problema della
fermata (halting problem) per le MT, cioè il problema di stabilire se, per ogni MT M e per ogni input I, M con input I
termina il suo calcolo o meno. Va precisato inna nzi tutto
che il fatto che la tavola di una MT comprenda almeno una
configurazione finale è una condizione necessaria ma non
sufficiente perché la macchina termini il calcolo. Si consideri
ad esempio la MT seguente:
q1 s 0 s 0 D q 1
q1 | s0 C q2.
(q2, s0) è una configurazione finale; se tuttavia questa macchina viene attivata col nastro completamente vuoto, il suo
calcolo andrà avanti all’infinito.
L’indecidibilità del problema della fermata comporta che
120
PARTE PRIMA
non esista alcun algoritmo che, data una generica MT (o il
suo codice secondo una opportuna codifica effettiva) e dato
un generico input per essa, consenta di stabilire se il calcolo
di quella macchina con quell’input termina o meno. Diamo
qui di seguito una breve traccia intuitiva di come, in base
alla tesi di Church, si possa giungere a questo risultato ragionando per assurdo. Data una generica macchina M, sia
CM il suo codice in base a una codifica effettiva (scritta
nell’alfabeto ? ? {|}). Per la tesi di Church, supporre, per
assurdo, che sia decidibile il problema della fermata per le
MT significa supporre che esista una certa macchina H, tale
che, per ogni macchina M e per ogni input I di M, H si
comporti nella maniera seguente:
?
?
dà come output 1 se il calcolo di M per l'input I termina
?
?
?
dà come output 0 se il calcolo di M per l' input I non termin a.
H con input C M e I ??
Qualora esistesse la macchina H, allora sarebbe banale costruire un’altra macchina H’che si comporti come segue:
H' con input C
?
?
?
?
M ??
?
??
dà come output 1 se il calcolo di M per l'input C termina
M
dà come output 0 se il calcolo di M per l' input C non termina.
M
H’infatti calcola una funzione che è un “caso particolare”
della funzione calcolata da H (in quanto CM è un caso particolare di input I). Se tuttavia esistesse H’, allora si potrebbe
a sua volta costruire una macchina Z così definita:
Z con input C
?
?
?
?
?
?
M ??
?
?
?
?
?
genera un calcolo che non termina se H ' con input C dà come output 1
M
(cioè, se il calcolo di M per l'input CM termina)
dà come output 0 se H ' con input C dà come output 0
M
(cioè, se il calcolo di M per l'input C non termina).
M
Per ottenere Z a partire da H’sarebbe sufficiente aggiungere
alla tavola di H’alcune quintuple che facciano in modo che,
se l’output di H’è 1, allora abbia origine un calcolo che non
termina (ad esempio, la testina potrebbe iniziare a spostarsi
a destra sul nastro qualunque sia il simbolo osservato). Ora,
LE RADICI STORICHE
121
si immagini di dare in input a Z il suo stesso codice CZ. E’
facile constatare che, in base alla definizione di Z, Z con
input CZ darebbe origine a un calcolo che termina se e soltanto se il calcolo di Z per l’input CZ non termina, il che è
palesemente assurdo. Ne consegue quindi che una macchina
che si comporti come H non può esistere, e che quindi, se è
vera la tesi di Church, non può esistere un algoritmo che
decida il problema della fermata.
Da questo risultato consegue che esistono problemi i
quali, neppure in linea di principio, possono essere risolti da
un calcolatore. Ad esempio, non può esistere alcun programma che sia in grado di stabilire in generale se un programma qualsiasi con un certo input terminerà il suo calcolo
o meno. E’importante ricordare che l’indecidibilità del problema della fermata è strettamente collegata ai risultati di limitazione della logica matematica, in primo luogo i teoremi
di Gödel.
1.7.7. Le macchine di Turing e la mente: il test di
Turing
Abbiamo accennato alla tendenza ad interpretare la Tesi
di Church come un’ipotesi empirica sulle capacità computazionali degli esseri umani. Su questa linea procedono alcuni
sviluppi successivi del pensiero dello stesso Turing. Nel suo
saggio “Macchine calcolatrici ed intelligenza”, pubblicato
nel 1950, assistiamo ad una sorta di "radicalizzazione" di
questo modo di intendere la Tesi di Church. Facendo
riferimento a calcolatori reali, che tuttavia vengono
caratterizzati in maniera analoga ad una MT, Turing si
dichiara fiducioso che macchine di questo tipo possano
giungere a simulare, nel volgere di pochi decenni, non
soltanto il “comportamento computazionale” di un essere
umano, ma anche qualsiasi altra attività cognitiva umana.
Turing propone di riformulare la domanda “possono
122
PARTE PRIMA
pensare le macchine?” nei termini del cosiddetto gioco
dell’imitazione. Il gioco viene giocato da tre “attori”: a) un
essere umano, b) una macchina calcolatrice e c) un altro
essere umano, l’interrogante. L’interrogante non può vedere
a) e b), non sa chi dei due sia l’essere umano, e può
comunicare con loro solo in maniera indiretta (ad esempio,
attraverso un terminale video e una tastiera). L’interrogante
deve sottoporre ad a) e a b) delle domande, in maniera tale
da scoprire, nel più breve tempo possibile, quale dei due sia
l’uomo e quale la macchina. a) si comporterà in modo da
agevolare c), mentre b) dovrà rispondere in modo da
ingannare c) il più a lungo possibile. Invece di chiedersi se le
macchine possono pensare, dice Turing, è più corretto
chiedersi se una macchina possa battere un uomo nel gioco
dell’imitazione, o, comunque, quanto a lungo possa
resistergli. Questo “esperimento mentale” viene oggi
abitualmente indicato col nome di Test di Turing.
Turing era decisamente troppo ottimista circa le possibili
prestazioni delle macchine calcolatrici: “Credo che entro
circa 50 anni sarà possibile programmare calcolatori ... per
far giocare loro il gioco dell’imitazione così bene che un
esaminatore medio non avrà più del 70 per cento di proba bilità di compiere l’identificazione esatta dopo cinque minuti
di interrogazione. Credo che la domanda iniziale, ‘possono
pensare le macchine?’,sia troppo priva di senso pe r meritare
una discussione. Ciò nonostante credo che alla fine del se colo l’uso delle parole e l’opinione corrente si saranno tal mente mutate che chiunque potrà parlare di macchine pensanti senza aspettarsi di essere contraddetto”. Ci troviamo
qui di fronte ad una sorta di versione “estremista”, o
“radicale”, della Tesi di Church, che, grosso modo,
potrebbe essere formulata come segue: ogni attività cognitiva è
T-computabile (il che non vuol dire, ovviamente, che la nostra
mente funziona come una macchina di Turing, ma che ogni
LE RADICI STORICHE
123
attività mentale è simulabile da un dispositivo che abbia la
stessa potenza computazionale delle macchine di Turing).
Seppure modificata e raffinata rispetto alla formulazione di
Turing, una assunzione di questo genere è a fondamento di
numerose teorie e ricerche svolte nell’ambito di quel settore
di ricerca che va sotto il nome di scienze cognitive. Si tratta di
un ambito di ricerca interdisciplinare che ha per oggetto lo
studio della mente, e che raccoglie i contributi di diverse
discipline quali la psicologia cognitiva, la linguistica, la
filosofia, l’informatica e le neuroscienze. Ciò che accomuna
le ricerche svolte nelle scienze cognitive è appunto l’ipotesi
che gli strumenti di tipo computazionale possano essere in
qualche misura adeguati come modelli per lo studio delle
facoltà mentali. In particolare, fra le scienze cognitive,
l’intelligenza artificiale è quel settore dell’informatica che si
prefigge di elaborare programmi che simulino specifiche attività cognitive umane, sia allo scopo di meglio comprendere queste ultime, sia allo scopo di costruire manufatti tecnologicamente rilevanti.
1.7.8. Oltre Von Neumann: reti neurali e modelli
connessionisti
Nel corso della storia dell’informatica, sono stati proposti
vari modelli alternativi al calcolatore di Von Neumann. In fatti, benché estremamente versatile, l’architettura di Von
Neumann è stata talvolta criticata per specifici limiti di tipo
informatico. In particolare, è discutibile la netta separazione
fra immagazzinamento ed elaborazione dei dati che questo
tipo di architettura comporta. In un calcolatore di Von
Neumann memoria e unità centrale di calcolo (CPU) sono
due componenti rigidamente distinte. L’unità di calcolo attinge di volta in volta ai dati contenuti nella memoria, ma
quest’ultima rimane sostanzialmente passiva durante la
maggior parte della durata del calcolo. Si tratta del cosiddetto problema del “collo di bottiglia” dell’architettura di
124
PARTE PRIMA
Von Neumann: le informazioni vengono elaborate solo
quando vengono richiamate dalla CPU del sistema. Ciò
comporta problemi di efficienza nello sfruttamento delle risorse computazionali.
Queste limitazioni hanno un corrispettivo anche dal
punto di vista dello studio computazionale della mente. Una
distinzione netta fra memorizzazione delle informazioni e
loro elaborazione è difficilmente giustificabile sulla base
delle conoscenze disponibili sul sistema nervoso. Nel cervello non esiste alcun dispositivo centralizzato per il controllo dell’elaborazione. Le operazioni computazionali nel
sistema nervoso sembrano demandate ad un meccanismo di
controllo altamente distribuito. Inoltre, non esiste una sepa razione netta fra dispositivi per la memorizzazione e per
l’elaborazione delle informazioni. Ciò pone problemi ai mo delli computazionali dell’Intelligenza Artificiale e della
scienza cognitiva tradizionale, relativi alla mancanza di plau sibilità dal punto di vista anatomico e neurofisiologico del
paradigma computazionale di Turing e di Von Neumann. Il
punto centrale è che il cervello è un dispositivo di calcolo
altamente parallelo. Il numero dei neuroni è di un ordine stimabile fra 1010 e 1011, e ciascuno di essi si comporta come
una singola unità di calcolo, che lavora contemporanea mente a tutte le altre. I neuroni sono altamente intercon nessi: ogni neurone ha moltissime sinapsi in entrata e in
uscita, mediante le quali scambia i propri input e i propri
output con gli altri neuroni. Ogni neurone esegue operazioni relativamente semplici. La complessità dei meccanismi
cognitivi viene determinata dall’interazione di un grande
numero di neuroni.
Su considerazioni di questo genere si è basato lo sviluppo
delle cosiddette reti neurali, una classe di dispositivi di calcolo
in parte motivati dall’intento di superare i limiti del modello
di Von Neumann. Si tratta di sistemi distribuiti ad alto pa -
LE RADICI STORICHE
125
rallelismo, ispirati, in senso lato, alle proprietà del sistema
nervoso. Una rete neurale è costituita da un insieme di unità
(che sono il corrispettivo dei neuroni), collegate fra loro da
connessioni, che costituiscono l’analogo delle sinapsi. Ogni
unità ha un certo numero di connessioni in ingresso e/o un
certo numero di connessioni in uscita. Ciascuna unità costituisce un semplice processore, un singolo dispositivo di
calcolo che, ad ogni fase del calcolo, riceve i propri input
attraverso le connessioni in ingresso, li elabora, e invia
l’output alle altre unità collegate tramite le sue connessioni
in uscita. In una rete tutte le unità operano in pa rallelo, e
non esiste alcun processo di ordine “più alto”, nessuna CPU
che ne coordini l’attività. Il calcolo che ciascuna unità
esegue è di norma molto semplice; la potenza com putazionale del sistema deriva dal grande numero delle unità
e delle connessioni. Nell’ambito delle scienze cognitive, sulle
reti neurali si basano le teorie e i modelli di tipo connessionista. Il connessionismo è una tendenza nello studio computazionale della mente che ha avuto un grande sviluppo nel
corso degli ultimi quindici anni, e che si è in parte contrapposta agli approcci dell’intelligenza artificiale e delle scienze
cognitive tradizionali. Rispetto a queste ultime, il connessionismo è caratterizzato appunto da una maggiore attenzione
per i rapporti fra attività cognitive e struttura del sistema
nervoso.
E’ opportuno notare tuttavia che questi sviluppi non
hanno comportato un superamento dei risultati della teoria
della computabilità effettiva, o una qualche forma di
“falsificazione” della tesi di Church. Di fatto, tutti i modelli
computazionali basati sulle reti neurali che siano stati effettivamente realizzati sono risultati riconducibili ai limiti della
ricorsività generale (nel senso che le funzioni computate da
tali modelli risultano essere funzioni ricorsive generali). Più
in generale, benché le MT e i calcolatori con architettura di
126
PARTE PRIMA
Von Neumann siano dispositivi di calcolo di tipo stretta mente sequenziale, è possibile estendere la validità della tesi
di Church anche a calcoli di tipo parallelo. Rilevanti in questa direzione sono state ad esempio le ricerche del logico
Robin Gandy, che è partito dalla constatazione che il con cetto di MT corrisponde ad una nozione di calcolo troppo
specifica e particolare perché gli possa essere ricondotto
ogni tipo di dispositivo di calcolo concepibile. Ad esempio,
nelle MT si assume che il calcolo proceda secondo una sequenza di passi elementari, elaborando un solo simbolo alla
volta, mentre un calcolatore artificiale può procedere in parallelo, elaborando contemporaneamente un numero arbi trario di simboli. Per superare tali limitazioni, Gandy ha
formulato, utilizzando strumenti di tipo insiemistico, una
caratterizzazione estremamente generale del concetto di
macchina calcolatrice, in cui le MT rientrano come caso
particolare. Egli ha dimostrato quindi che ogni funzione cal colabile da tali macchine è ricorsiva generale, a patto che
vengano rispettate alcune condizioni molto generali di finitezza (determinismo, possibilità di descrivere il calcolo in
termini discreti, e così via). Le macchine Von Neumann restano comunque il modello di calcolo più largamente diffuso, e quello cui si farà riferimento nel resto del libro.
LE RADICI STORICHE
127
Per saperne di più
La storia della matematica e del calcolo è trattata in molti
libri. Suggeriamo, fra gli altri: Storia della Matematica, di Carl
B. Boyer (Mondadori, Milano, 1980); Enciclopedia Feltrinelli
Fischer: Matematica I e II (Feltrinelli, Milano, 1967); La
matematica delle civiltà arcaiche, di Livia Giacardi e Silvia Clara
Roero (Stampatori, Torino, 1979); Storia Universale dei
Numeri, di Georges Ifrah (Mondadori, Milano, 1983);
Introduzione al Pensiero Matematico, di Friedrich Waissmann
(Boringhieri, Milano, 1971). Per la storia dell’informatica,
alcuni testi rari ma significativi sono i lavori di Mario G.
Losano: Charles Babbage: La Macchina Analitica, (Etas Libri,
Milano, 1973), Georg Scheutz: La Macchina alle Differenze, (Etas
Libri, Milano, 1974), Konrad Zuse: L'Elaboratore Nasce in
Europa, (Etas Libri, Milano, 1975); e inoltre: The Computer
from Pascal to Von Neumann, di Herman H. Goldstine
(Princeton University Press, Princeton, 1972).
Per chi volesse affrontare gli aspetti tecnici della teoria della
computabilità, un buon manuale è quello di H. Hermes,
Numerabilità, decidibilità, computabilità (Boringhieri, Torino,
1973). Una raccolta di scritti di Alan Turing è Intelligenza meccanica, a cura di G. Lolli (Bollati, Torino, 1994). E’stata
pubblicata anche una biografia di Turing, scritta da A.
Hodges, dal titolo Storia di un enigma. Vita di Alan Turing
(1912-1954) (Bollati, Torino, 1991). L’articolo dove viene
proposto il test di Turing è compreso anche nell’antologia a
cura di V. Somenzi e R. Cordeschi, La filosofia degli automi.
Origini dell’intelligenza artificiale (Bollati, Torino, 1994). Una
prima, agile introduzione alle scienze cognitive è il volume
di Patrizia Tabossi, Intelligenza naturale e intelligenza artificiale (Il
Mulino, Bologna, 2a ed. 1994). Due testi più approfonditi
sull’argomento sono La nuova scienza della mente, di H.
Gardner (Feltrinelli, Milano, 1988), e La mente e il computer, di
P. Johnson-Laird (Il Mulino, Bologna, 1990). Il primo ha un
128
PARTE PRIMA
taglio più storico, il secondo di tipo manualistico. Un testo
introduttivo all’intelligenza artificiale è Invito all’intelligenza
artificiale, di Luigia Carlucci Aiello e Marta Cialdea Mayer
(Angeli, Milano, 1995). Due manuali indirizzati a chi ha in teressi di tipo umanistico e psicologico sono Intelligenza
umana e intelligenza artificiale, di Margaret Boden (Tecniche
Nuove, Milano, 1993), e Intelligenza artificiale. Teoria e sistemi,
di Danilo Fum (Il Mulino, Bologna, 1994). Per una prima
introduzione alle reti neurali e al connessionismo si veda Intervista sulle reti neurali, di Domenico Parisi (Il Mulino, Bologna, 1989). Due libri che trattano in modo affascinante e
molto particolare i temi della sezione 1.7 sono The Emperor's
New Mind, di Roger Penrose (Oxford University Press,
New York, 1989) e, soprattutto, Gödel, Escher, Bach: un’eterna
ghirlanda brillante, di D. Hofstadter (Adelphi, Milano, 1984).