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).
Documenti analoghi
breve storia delle macchine da calcolo e del computer
grado di amplificare le nostre capacità nello studio della matematica. Fare matematica oggi con il
calcolatore non significa eseguire solo calcoli numerici , bensì estendersi in campi di applicazio...