Filosofia dell'informatica/La nascita dell'informatica: differenze tra le versioni

Wikibooks, manuali e libri di testo liberi.
Contenuto cancellato Contenuto aggiunto
Riga 96: Riga 96:


Per Turing, se una macchina riesce nel gioco imitativo, dobbiamo concludere che in un qualche senso , quella macchina pensa.''''''
Per Turing, se una macchina riesce nel gioco imitativo, dobbiamo concludere che in un qualche senso , quella macchina pensa.''''''




Oltre metà dell’articolo originale di Turing è dedicato a rispondere alle principali obiezioni a questa posizione:
Oltre metà dell’articolo originale di Turing è dedicato a rispondere alle principali obiezioni a questa posizione:

Versione delle 12:57, 10 ago 2016

Indice del libro

I pionieri dell'informatica

Passando dalle idee logiche che stanno alla base degli attuali calcolatori, alla loro costruzione effettiva, vengono in primo piano i problemi di ingegneria e le persone che sono riusciti ad affrontarli vittoriosamente. Vi sono versioni molto diverse della storia delle macchine calcolatrici. Tra i protagonisti vi sono Charles Babbage, Ada Lovelace, Claude Shannon (1916-2001, il fondatore della teoria matematica dell’informazione) e John von Neumann.

Ada Lovelace

Ada Lovelace (1815-1852) fu la prima programmatrice di computer della storia. Figlia del celebre poeta George Gordon Byron e della matematica Anne Isabelle Milbanke, sin da piccola fu istruita dai piu importanti docenti del tempo, mostrando grande interesse per le scienze e la matematica.

Come di consuetudine per le giovani aristocratiche, a 18 anni Lovelace debuttò in società ed iniziò a frequentare i più facoltosi salotti grazie ai quali conobbe personalità come Charles Darwin, Charles Dickens, Michael Faraday e Charles Babbage che proprio in quegli anni stava lavorando alla macchina differenziale, un marchingegno in grado di fare somme e sottrazioni automaticamente. Ada, estremamente affascinata, iniziò a studiare i metodi di calcolo realizzabili con essa, e così nacque uno splendido rapporto di amicizia e di lavoro che durerà per anni. La macchina divenne sempre più grande ma, pur essendo concettualmente valida, non fu mai costruita a causa dei costi eccessivi e delle scarse competenze tecnologiche del tempo.

Dopo la macchina differenziale nacque la macchina analitica, una macchina ancora più complicata, capace di fare ulteriori operazioni quali moltiplicazioni, divisioni, comparazioni a radici quadrate. Babbage cercò di far conoscere la macchina all’estero, precisamente in Italia, dove incontrò il giovane matematico Luigi Federico Menabrea. Quest’ultimo scrisse nel 1842 un breve articolo in francese sulla macchina che fu pubblicato sulla rivista svizzera "Bibliothèque Universelle de Genève". Ada, sollecitata da un amico di Babbage, Charles Wheatstone, iniziò a tradurre l’articolo in inglese e vi aggiunge ben sette note, frutto di un lavoro durato interi mesi, e che firmò con le sole iniziali (A. A. L.). Le note descrivevano le caratteristiche strutturali e funzionali della macchina e, soprattutto, mostravano la possibilità da parte della MA di poter essere programmata. Questo, infatti, è ciò che la rende il più antenato dei nostri computer: a differenza della macchina differenziale, che poteva manipolare solo numeri, la macchina analitica era in grado di manipolare simboli sulla base di semplici regole. La nota più importante è senza dubbio l’ultima, la nota G, nella quale Lady Lovelace descrisse, a tal fine, un algoritmo per calcolare i numeri di Bernoulli, algoritmo che oggi viene riconosciuto come il primo programma informatico della storia.

Nonostante la macchina analitica, proprio come la macchina differenziale, non fu mai costruita, il contributo pioneristico di Ada Lovelace e Charles Babbage è stato di fondamentale importanza: dopo quasi un secolo, Alan Turing inventò i primi computer elettronici grazie alle note di Ada Lovelace. A partire dal 2009, negli Stati Uniti si celebra ogni anno l’Ada Lovelace Day, in onore di tutti i conseguimenti ottenuti dalle donne nelle scienze, nella tecnologia, nell’informatica e nella matematica.

Charles Babbage

Charles Babbage nacque a Londra il 26 dicembre 1791. Il connubio tra filosofia e matematica diede vita ad uno dei più influenti scienziati informatici del suo tempo nella regione inglese, che per primo concepì l’idea di un calcolatore programmabile. Babbage fu studente al Trinity Colledge e successivamente al Penterhouse di Cambridge, dove discusse la laurea nel 1814, e dove nel 1828 rivestirà la "cattedra lucasiana di matematica", che in passato aveva accolto il genio di Isaac Newton (1669). Il mondo dell’informatica lo ricorda per la macchina differenziale, della quale venne realizzato un prototipo imperfetto, e per la macchina analitica, che, sebbene fosse rimasta soltanto un progetto, in base ad alcuni studi svolti alla fine del XX secolo sul modello creato da Babbage avrebbe, a quanto pare, potuto funzionare. Babbage constatò che i calcolatori umani erano soliti incorrere in molteplici errori, talvolta dovuti alla stanchezza, talvolta alla noia. Tali considerazioni portarono lo studioso a riflettere sul concepimento di un calcolatore sotto forma di macchina, così da aggirarne gli errori. Quindi, sulla base del lavoro svolto da Pascal e Leibniz, Babbage, nel 1823, in una lettera a Sir Humphrey Davy discusse i principi di un motore di calcolo. Charles Babbage morì il 18 ottobre 1871 a Londra, all’età di 80 anni.

La macchina differenziale

Il primo tentativo di implementazione delle proprie idee, Babbage lo trovò nel concepimento della macchina differenziale. Il modello fu presentato alla Royal Astronomical Society nel 1823, in un saggio intitolato “Note on the application of machinery to the computation of astronomical and mathematical tables”, e si basava sul cosiddetto “metodo delle differenze”, in base al quale Babbage sperava di creare tabelle di polinomi. Ottenuto un finanziamento di 1500 sterline dal governo britannico per l’idea brillante, Babbage incorse, tuttavia, in una serie di errori tecnici nella realizzazione della macchina differenziale. Gli ingranaggi disponibili a quel tempo, infatti, risultarono poco adatti, e in particolare l’attrito generato dalle meccaniche creava una fastidiosa e costante vibrazione, che rese impossibile il funzionamento della macchina. Inoltre, le incomprensioni con gli operai assunti per la realizzazione del progetto, e i repentini cambi di idea riguardo la sua realizzazione, portarono Babbage a spendere invano circa 17.000 sterline, 6.000 delle quali di tasca propria. In seguito, il taglio dei finanziamenti da parte del governo inglese lo indusse a scrivere le celebri “Reflections on the Decline of Science in England, and some of its Causes”. La macchina differenziale rimase, purtroppo, soltanto un’idea brillante.

La macchina analitica

Tra il 1833 e il 1842, Babbage ci riprovò. Questa volta, tentò di costruire una macchina che fosse, però, in grado di eseguire qualsiasi tipologia di calcolo, non soltanto quelli basati su equazioni polinomiali: la macchina analitica, riconosciuta come il primo prototipo di calcolatore generico complesso. Il progetto di Babbage si basava sul telaio di Joseph Marie Jacquard, il quale utilizzava alcune schede perforate per determinare come dovesse essere la trama del tessuto. Babbage unì le schede traforate ad un processore aritmetico atto a calcolare i numeri, ad un’unità centrale che controllasse lo svolgimento del lavoro, un meccanismo di uscita e una memoria, dove potessero essere conservati i dati in attesa della loro elaborazione. La riserva conteneva 1000 numeri, ognuno di cinquanta cifre, ma Babbage costruì la macchina in modo da donarle una riserva pressoché infinita, grazie alla rilettura delle stesse carte forate resa possibile per il futuro. La componente “Mill” (mulino), e cioè il sistema che permetteva l’elaborazione dei dati, che costituiva l’idea di base delle moderne CPU, sarebbe stata in grado di svolgere le quattro operazioni aritmetiche. La macchina, inoltre, lavorava su tre differenti tipi di schede: un tipo per le operazioni matematiche, un altro per le costanti matematiche, ed infine un terzo per il caricamento e il salvataggio dei dati. Tuttavia, anche l’implementazione di questa seconda idea, a causa delle quasi medesime complicazioni che Babbage aveva affrontato nella messa a punto della macchina differenziale, risultò fallimentare, e il progetto che era stato messo a punto nel 1837 terminò prima ancora di vedersi tramutato in macchina.

Claude Shannon

Claude Shannon (1916-2001) è il padre della teoria dell'informazione.

Alan Turing

File:Alan Turing Aged 16.jpg
Alan Turing (1927 circa)

Alan Mathison Turing nacque a Londra nel 1912 e morì suicida nel 1954, perseguitato dal governo di una nazione che, senza clamore, aveva contribuito a salvare. Fu un genio che con la crittografia aiuta a vincere la Seconda Guerra Mondiale e uno dei padri dei moderni computer e dell’intelligenza artificiale, ma anche un omosessuale che, bistrattato dalla storia, venne spinto al suicidio dopo un trattamento disumano, ordinato dalla giustizia inglese. Nel 2009, a distanza di 55 anni dalla sua morte, il primo ministro Gordon Brown formulò una dichiarazione di scuse ufficiali da parte del governo del Regno Unito: «Per conto del governo britannico, e di tutti coloro che vivono liberi grazie al lavoro di Alan, sono orgoglioso di dire: ci dispiace, avresti meritato di meglio». Il 24 dicembre 2013 la regina Elisabetta II ha poi elargito la grazia postuma per Alan Turing.

Il problema della decisione

Leibniz sognava una ragione umana ridotta a puro calcolo e a grandi macchine meccaniche che consentissero l’esecuzione dei calcoli. Frege fu il primo a produrre un sistema di regole capace di rendere conto in modo plausibile di tutti i ragionamenti deduttivi umani. Hilbert cercava un algoritmo di un ampiezza senza precedenti, in grado di risolvere il problema della decisione (Entscheidungsproblem), ossia il problema della completezza del sistema di Frege. Questo algoritmo (ribattezzato poi l'algoritmo di Dio) avrebbe dovuto ridurre tutti i ragionamenti deduttivi umani a calcolo bruto, realizzando in buona misura il sogno di Leibniz. Dopo Gödel era difficile pensare che tale algoritmo potesse esistere. Alan Turing cominciò a chiedersi come si poteva dimostrare che un algoritmo del genere non esisteva.

Un algoritmo, ossia una procedura di calcolo destinato alla soluzione di un problema, è definito da un elenco di regole che una persona può seguire in modo meccanico e preciso. Turing dimostrò che una tale persona poteva limitarsi a poche azioni di base, molto semplici, senza che il risultato finale del calcolo cambiasse. Comprese poi che l’essere umano poteva essere sostituito da una macchina capace di eseguire quelle stesse azioni di base. Dimostrò infine che nessuna macchina in grado di eseguire solo tali azioni poteva stabilire se una data conclusione era derivabile da premesse date usando le regole di Frege. Concluse che non esisteva un algoritmo per il problema della decisione (Entscheidungsproblem).

La riflessione sul calcolo

Come corollario, Turing trovò un modello matematico di macchina calcolatrice onnifunzionale. Turing immaginò che la persona incaricata del calcolo lavorasse con un nastro di carta diviso in quadretti, e si rese conto che eseguire un calcolo complicato utilizzando un nastro unidimensionale non comportava nessun problema fondamentale. Turing scoprì alcuni aspetti cruciali di qualsiasi calcolo. Ogni persona che esegue un calcolo (aritmetico, algebrico, infinitesimale ecc.) è soggetta a due vincoli: 1) in ogni stadio del calcolo l’attenzione è rivolta solo a pochi simboli; 2) in ogni stadio l’azione intrapresa dipende solo da quei simboli su cui si focalizza la sua attenzione e dal suo stato mentale del momento. In conclusione ogni calcolo può essere inteso come un processo con le seguenti caratteristiche:

  • viene eseguito scrivendo dei simboli nelle caselle di un nastro di carta.
  • a ogni passo la persona che esegue il calcolo fa attenzione al simbolo scritto in una sola di queste caselle.
  • l’azione successiva dipenderà da questo simbolo e dallo stato mentale della persona.
  • tale azione consisterà nello scrivere un simbolo nella casella osservata ed eventualmente nello spostare l’attenzione sulla casella immediatamente a destra o a sinistra.

È facile vedere che la persona può essere sostituita da una macchina nella quale il nastro – che possiamo pensare come un nastro magnetico, ove i simboli scritti sono rappresentati da informazioni in codice – si muove avanti e indietro, mentre agli stati mentali dell’operatore corrispondono differenti configurazioni delle componenti interne della macchina. Quest’ultima va progettata in modo da scandire, istante per istante, uno solo dei simboli del nastro. A seconda della sua configurazione interna e del simbolo scandito, scriverà sul nastro un certo simbolo (che rimpiazzerà quello scandito), dopodiché o continuerà a scandire la stessa casella o si sposterà di un passo verso destra o verso sinistra. Ai fini del calcolo non importa come sia costruita la macchina e di che cosa sia fatta: conta solo che abbia la capacità di assumere un certo numero di configurazioni (dette anche stati) distinte e che in ognuna di esse si comporti in modo adeguato.

La macchina di Turing

Il punto non è la costruzione effettiva di una di queste macchine di Turing, che dopotutto sono solo astrazioni matematiche: ciò che importa è che questa analisi della nozione di calcolo abbia consentito di stabilire che tutto ciò che è calcolabile mediante un processo algoritmico può essere calcolato da una macchina di Turing. Se quindi si può dimostrare che un certo compito non può essere eseguito da una macchina di Turing, è certo che non esiste un processo algoritmico in grado di eseguirlo. Fu così che Turing dimostrò che non esisteva un algoritmo per il problema della decisione. La macchina di Turing è dunque un automa astratto, teorico, universale, il cui disegno logico fornisce una traduzione formale del concetto intuitivo di calcolabilità. La macchina di Turing è tuttora utilizzata, nelle sue numerose varianti, come modello astratto del calcolo automatico sviluppato da un elaboratore.

Inoltre Turing mostrò come creare una singola macchina di Turing capace di fare, senza aiuti esterni, tutto ciò che poteva essere fatto da una qualsiasi macchina di Turing: era un modello matematico di calcolatore generale. Dal punto di vista logico, ogni macchina di Turing può essere descritta da un elenco di quintuple, ossia da espressioni logiche espresse da cinque simboli: Quando la macchina si trova nello stato R e legge sul nastro il simbolo a, sostituisce a con b, si sposta di un casella a destra e passa nello stato S.

La teoria della computabilità

L’insolubilità dell’Entscheidungsproblem

Essendo pure astrazioni matematiche, le macchine di Turing hanno il vantaggio, rispetto alle macchine fisiche, di poter usare una quantità di nastro illimitata. È possibile che il calcolo di una macchina di Turing non abbia mai fine anche se essa percorre solo una quantità prefissata di nastro.

Una rappresentazione grafica della macchina di Turing

Il comportamento della macchina è strettamente legato ai dati di ingresso. Alcune macchine di Turing, con certi dati in ingresso, si arrestano; altre no. L’applicazione a questi secondi casi (le macchine che non si arrestano) della diagonale di Cantor condusse Turing alla scoperta di problemi che le sue macchine non potevano risolvere, e, come passo successivo, alla dimostrazione dell’insolubilità dell’Entscheidungsproblem. Turing tradusse gli elenchi di quintuple in codici numerici e scoprì che con alcuni numeri la macchina finirà per fermarsi, mentre con altri può andare avanti per sempre: l’insieme dei numeri del primo tipo è il suo insieme di fermata.

Hilbert aveva capito che la soluzione dell’Entscheidungsproblem, il problema fondamentale della logica matematica, avrebbe fornito un algoritmo capace di rispondere a tutte le domande matematiche. Ma un algoritmo così non esiste. Pur nella sua grande potenza logica, la macchina di Turing ha infatti un limite intrinseco: data una configurazione iniziale di una macchina di Turing non è decidibile a priori la sua possibilità di giungere a un termine, cioè a una configurazione finale (indecidibilità della fermata di una macchina di Turing). L’Entscheidungsproblem è dunque algoritmicamente insolubile. Nei risultati di Turing c’era però qualcosa di problematico: egli aveva dimostrato che non si poteva usare una macchina di Turing per risolvere il problema della decisione, ma per passare da questo risultato alla conclusione che non esisteva nessun algoritmo, di nessun genere, capace di risolvere tale problema, aveva dovuto utilizzare la propria analisi di quello che accade quando un essere umano esegue un compito. Per consolidare la tesi che ogni compito di questo tipo può essere svolto da una macchina di Turing, egli escogitò la macchina universale.

La macchina universale

L’analisi di Turing mirava a dimostrare che qualunque calcolo poteva essere svolto da una macchina di Turing: questa macchina sarebbe stata così una macchina di Turing capace di svolgere, da sola, i compiti di qualunque macchina di Turing. Era dai tempi di Leibniz che si pensava alle macchine calcolatrici, ma prima di Turing si era sempre supposto che la macchina stessa, il programma e i dati fossero entità del tutto distinte. La macchina universale di Turing dimostrava che tale distinzione era illusoria. La macchina di Turing, infatti, è un congegno che ha componenti meccaniche (hardware), ma sul nastro della macchina universale il codice numerico funziona come un programma (software) che dà le istruzioni per l’esecuzione del calcolo alla macchina, mentre la macchina universale tratta le cifre del codice di una macchina come semplici dati sui quali lavorare. Questa fluidità dei tre concetti è fondamentale per l’informatica odierna. L’analisi di Turing offriva una visione nuova dell’antica arte del calcolo, rivelando che la nozione stessa di calcolo andava ben oltre i calcoli aritmetici e algebrici.

Mentre Turing lavorava a dimostrare che non esiste una soluzione algoritmica del problema della decisione, a Princeton (USA) Alonzo Church giungeva a conclusioni analoghe alle sue dimostrando che esistono problemi algoritmicamente insolubili[1]. Lo stesso Kurt Gödel era abbastanza scettico nei confronti delle idee di Church, e fu solo l’analisi di Turing, trasferitosi nel frattempo a Princeton, a convincerlo che erano corrette. L’analisi della nozione di calcolo e la scoperta della macchina calcolatrice universale sono invece idee completamente nuove.

Il legame tra calcolo e ragionamento è autentico e profondo: il tentativo di ridurre il ragionamento logico a una serie di regole formali risale ad Aristotele, ed era alla base del sogno leibniziano di un linguaggio computazionale universale, nonché del successo di Turing nel dimostrare che la sua macchina universale poteva svolgere qualsiasi calcolo. La logica assicura all’informatica sia un impianto fondazionale unificante sia uno strumento per costruire modelli, svolgendo un ruolo fondamentale nell’intelligenza artificiale, nei sistemi di database ecc.

L'intelligenza delle macchine: il test di Turing

Nel 1950 Turing pubblicò un breve saggio ormai classico, Computing Machinery and Intelligence[2], in cui prevedeva (sbagliando) che per la fine del secolo vi sarebbero stati programmi di calcolatore capaci di sostenere una conversazione con tale disinvoltura che nessuno sarebbe stato in grado di dire se quello con cui stava parlando era una macchina o un essere umano. Turing cercava un modo per stabilire se il comportamento di un calcolatore fosse intelligente, e a tale scopo propose un test oggettivo e facile da somministrare.

In questo saggio, Turing descrive quello che è passato alla storia come il test di Turing, ossia un criterio per determinare se una macchina sia in grado di pensare. Il test consisteva in questo: se si riesce a programmare un calcolatore in modo che sappia conversare, su qualsiasi argomento gli venga proposto, tanto bene che nemmeno un interlocutore mediamente intelligente saprebbe dire se sta parlando con una persona o una macchina, allora si doveva ammettere che quel calcolatore mostrava una certa intelligenza. Tuttavia siamo ancora lontani dal saper produrre un programma di questo tipo, e molti sono convinti peraltro che un simile comportamento non sarebbe di per sé intelligente. Turing e von Neumann furono mossi a paragonare il calcolatore al cervello umano per un’ottima ragione: sapendo che gli esseri umani sono capaci di pensare secondo schemi molto diversi, ipotizzarono che la nostra capacità di fare tante cose diverse sia dovuta alla presenza, nel nostro cervello, di un calcolatore universale.

In questo articolo del 1950, Turing lanciò la domanda se una macchina possa pensare: il cosiddetto test di Turing, prende spunto dal “gioco dell’imitazione” , cui partecipano tre persone: un uomo A, una donna B e un esaminatore C, che è isolato dagli altri due. C può porre ad A e B domande arbitrarie e dalle risposte deve stabilire chi è la donna. A e B si sforzano entrambi di essere identificati nella donna, quindi B cerca di aiutare C e A cerca di ingannarlo, fornendo le risposte che a suo parere darebbe la donna. C può avere a disposizione soltanto le risposte e non altri indizi (che renderebbero facile l’identificazione) : quindi può comunicare con A e B solo mediante tastiera. Questa versione del gioco consente di affrontare il problema se le macchine possano pensare evitando di definire i termini “macchina” e “pensare”, il cui significato è difficile da precisare. L’utilità di questo esperimento concettuale sta non tanto nella risposta che esso consente di fornire al problema (non è scontato che la fornisca), quanto nella possibilità di analizzare concetti come mente, pensiero, intelligenza. Il gioco dell’imitazione presuppone che le risposte di una donna siano distinguibili da quelle di un uomo; ma anche che l’uomo sia in grado di simularle. Non bisogna dimenticare tuttavia che il gioco è a tre: l’identificazione di A e B è demandata a un giudice. Se il giudice è in gamba può prendere la decisione corretta nonostante gli sforzi di A per sviarlo. Il test di Turing si basa sul presupposto che una macchina si sostituisca ad A. In tal caso, se C non si accorgesse di nulla, la macchina dovrebbe essere considerata intelligente, in quanto, in questa situazione, è stata in grado di comportarsi come un uomo. Nell'articolo si legge: secondo la forma più estrema di questa opinione, il solo modo in cui si potrebbe essere sicuri che una macchina pensa è quello di essere la macchina stessa e sentire se si stesse pensando. [...] Allo stesso modo, la sola via per sapere che un uomo pensa è quello di essere quell'uomo in particolare. [...] Probabilmente A crederà "A pensa, mentre B no", mentre per B è l'esatto opposto "B pensa, ma A no". Invece di discutere in continuazione su questo punto, è normale attenersi alla educata condizione che ognuno pensi.

Quella di Turing, in un certo senso, è una provocazione filosofica, che ci costringe a fronteggiare e analizzare le nostre convinzioni in materia di pensiero. Se una macchina può sostenere una conversazione come farebbe un essere umano, possiamo dire che pensa.

Per Turing, se una macchina riesce nel gioco imitativo, dobbiamo concludere che in un qualche senso , quella macchina pensa.'

Oltre metà dell’articolo originale di Turing è dedicato a rispondere alle principali obiezioni a questa posizione: l’obiezione teologica (l’uomo è dotato di anima, le macchine no, quindi non possono pensare), l’obiezione “testa nella sabbia” (speriamo che le macchine non arrivino mai a pensare, sarebbe terribile), l’argomento della coscienza (solo se la macchina è consapevole di ciò che sta facendo, e non semplicemente manipolando simboli, possiamo dire che pensa), l’argomento delle inabilità (la macchina sa conversare benissimo, ma non sa fare X, dove X è una caratteristica scelta in un insieme più o meno arbitrario di cose che sanno fare gli esseri umani), l’argomento di Lady Lovelace (le macchine fanno solo quello che noi gli ordiniamo di fare), e così via.

L’idea di una macchina che impara può apparire paradossale ad alcuni lettori. Come possono cambiare le regole di funzionamento della macchina? Esse dovrebbero descrivere completamente come reagirà la macchina qualsiasi possa essere la sua storia, a qualsiasi cambiamento possa essere soggetta. Le regole sono quindi assolutamente invarianti rispetto al tempo. Questo è verissimo. La spiegazione del paradosso è che le regole che vengono cambiate nel processo di apprendimento sono di un tipo meno pretenzioso e intendono avere solo una validità temporanea. Possiamo sperare che le macchine saranno alla fine in grado di competere con gli uomini in tutti i campi puramente intellettuali. Ma quali sono i migliori per cominciare? Anche questa è una decisione difficile. Molta gente pensa che un’attività molto astratta, come giocare a scacchi sarebbe la migliore. Si può anche sostenere che è meglio fornire alla macchina i migliori organi di senso che si possano comprare e poi insegnarle a capire e parlare una lingua umana. Questo processo potrebbe seguire il metodo d’insegnamento normale per un bambino. Ancora una volta ignoro quale sia la risposta esatta, ma penso che bisognerebbe tentare ambedue le strade. Possiamo vedere nel futuro solo per un piccolo tratto, ma possiamo pure vedere che in questo piccolo tratto c’è molto da fare.

I primi calcolatori universali

Il calcolatore universale era un apparato concettuale meraviglioso, capace di eseguire da solo qualsiasi compito di natura algoritmica: ma era possibile costruirlo?

Konrad Zuse

Konrad Zuse: lo Z1 e la sua evoluzione

L'ingegnere tedesco Konrad Zuse (1910-1995) è stato l'inventore del primo computer moderno, il calcolatore Z1, la cui progettazione e costruzione è iniziata nel 1936, e venne completata nel 1938, anticipando di alcuni anni il Colossus, nonché i primi enormi calcolatori programmabili a valvole prodotti in Inghilterra e negli Stati Uniti nella seconda metà degli anni '40[3]. E' inoltre stato l'inventore del primo linguaggio di programmazione di alto livello, il Plankalkül. Zuse ricevette numerosi finanziamenti per la costruzione delle macchine da enti civili e militari sia negli anni del regime nazionalsocialista sia dopo la guerra.

Lo Z1 era programmabile, dotato di memoria (RAM di serie da 176 byte), di un'autonoma unità di calcolo in virgola mobile basata sul sistema binario, con istruzioni immesse tramite nastro di celluloide perforato. Era retto da una tecnologia elettromeccanica e possedeva un hertz di frequenza. Esso era solamente in grado di compiere operazioni semplici, quali addizioni e sottrazioni, fra valori in virgola mobile di 22 bit, e comprendeva una logica di controllo che gli permetteva anche di effettuare operazioni più complesse, ad esempio moltiplicazioni e divisioni. Nel 1939 Zuse riuscì a migliorare lo Z1 attraverso il meccanismo di calcolo a relè (un dispositivo elettromeccanico), dando vita così allo Z2. Nel 1941, grazie all'appoggio economico dell'Ufficio Centrale per la Ricerca Aeronautica, nacque lo Z3, la prima macchina da calcolo completamente funzionante, avente le caratteristiche generali del computer odierno. Sfortunatamente nel 1944 venne distrutto da un bombardamento, ma Zuse lo ricostruì subito dopo, denominandolo Z4.

Alan Turing e il Colossus

Turing era interessato alla possibilità di costruire fisicamente una macchina di questo tipo e mise insieme diverse parti della sua macchina costruendo personalmente i circuiti elettromeccanici di cui aveva bisogno. Tornato a Cambridge nel 1938, fu subito chiamato a lavorare alla decrittazione delle comunicazioni militari tedesche. Il sistema di comunicazione tedesco usava una versione modificata di una macchina per criptare già presente sul mercato, chiamata Enigma. Turing progettò una macchina efficientissima nell’usare alcune informazioni sfuggite ai tedeschi per dedurne le configurazioni giornaliere di Enigma. Nel frattempo non smise di riflettere sull’applicabilità del suo concetto di macchina universale: la sua ipotesi era che il segreto dell’enorme potenza del cervello umano fosse legato proprio a questa nozione di universalità, che in qualche modo il nostro cervello fosse realmente una macchina universale.

Negli anni Trenta le radio contenevano un certo numero di tubi elettronici (le cosiddette valvole termoioniche) che si bruciavano spesso e dovevano essere sostituite. Turing venne a sapere che le valvole termoioniche potevano eseguire le stesse operazioni logiche che fino ad allora si facevano coi circuiti elettrici, e in più erano molto rapide. Grazie al lavoro del suo maestro Max Newman, Turing potè assistere alla realizzazione del primo calcolatore elettronico del mondo, il Colossus, una meraviglia dell’ingegneria che conteneva 1500 valvole, che eseguiva calcoli di natura logica e non aritmetica e si dimostrò preziosa per elaborare i messaggi tedeschi intercettati.

John von Neumann

John von Neumann e l'EDVAC

Il grande logico e matematico ungherese, naturalizzato statunitense, John von Neumann (1903-1957) colse al volo l’occasione di partecipare al progetto della Moore School of Electrical Engineering di Philadelphia: la costruzione di un calcolatore elettronico potentissimo, l’ENIAC, una macchina enorme (occupava da sola una grande stanza) dotata addirittura di 18.000 tubi elettronici e costruita sul modello delle macchine calcolatrici meglio riuscite dell’epoca, gli analizzatori differenziali. Von Neumann passò subito a occuparsi dell’organizzazione logica di una nuova macchina, l’EDVAC (Electronic Discrete Variable Calculator).

Nel 1945 von Neumann presentò una bozza di proposta, intitolata First draft of a report on the EDVAC[4], che fece conoscere l'architettura hardware dell'EDVAC in tutto il mondo, suggerendo che il nuovo calcolatore fosse fisicamente realizzato sul modello della macchina universale di Turing. L’EDVAC avrebbe posseduto la capacità (memoria) di immagazzinare, come il nastro della macchina astratta, sia dati sia istruzioni in codice, avrebbe avuto anche una componente aritmetica in grado di effettuare ciascuna delle operazioni aritmetiche di base in un solo passo. L'EDVAC è uno dei primi computer elettronici digitali della storia, uno dei primi computer a programma memorizzato della storia e uno dei primi computer della storia basato sull'architettura di von Neumann.

L'architettura di von Neumann

Mentre l’ENIAC eseguiva le sue operazioni aritmetiche su numeri espressi per mezzo delle dieci cifre decimali, l’EDVAC avrebbe fruito della semplificazione resa possibile dalla notazione binaria, inoltre avrebbe contenuto una componente deputata al controllo logico che doveva trasferire le istruzioni da eseguire dalla memoria alla componente aritmetica. Questo tipo di organizzazione del calcolatore ha preso il nome di architettura di von Neumann, un modello sulla cui base sono costruiti ancora oggi i calcolatori.

Nel Draft il nome di Turing non viene mai citato, ma la sua influenza è chiara: più di una volta von Neumann afferma che l’EDVAC dovrà essere di carattere generale, e lascia intendere che il cervello umano deve parte delle sue notevolissime capacità al fatto di saper funzionare come un calcolatore universale. Von Neumann si rendeva conto che i princìpi base della progettazione dei calcolatori elettronici si fondavano sulla logica. I calcolatori creati dopo la seconda guerra mondiale erano profondamente diversi dai precedenti calcolatori automatici poiché erano pensati come apparati universali capaci di eseguire qualsiasi processo simbolico.

Tuttavia una macchina reale poteva solo avvicinarsi a quella universale e ideale di Turing: era importante che essa avesse una memoria molto grande, corrispondente al nastro potenzialmente infinito di Turing, nella quale potessero coesistere istruzioni e dati. D’altro canto, i programmi da eseguire venivano memorizzati, per la prima volta, dentro la macchina. Ma l’aspetto veramente rivoluzionario di questi calcolatori era il loro carattere generale e universale, mentre il programma memorizzato era semplicemente un mezzo.

Alan Turing e l'ACE

Dopo aver scritto un articolo seminale nel 1936, intitolato On Computable Numbers, with an Application to the Entscheidungsproblem[5], Turing scrisse un altro lavoro nel 1945, il rapporto sull’Automatic Computing Engine (ACE) presso il National Physics Laboratory (NPL) che presenta una descrizione completa di un calcolatore. L’ACE di Turing era una macchina molto diversa dall’EDVAC di von Neumann: mentre quest’ultimo metteva al primo posto il calcolo numerico, Turing pensava ad una macchina da adibire anche a molte altre mansioni, quindi la immaginava più minimalista e più vicina alle macchine astratte.

Per Turing le operazioni aritmetiche andavano affidate alla programmazione, al software più che all'hardware. Turing criticava la tradizione americana di risolvere le difficoltà servendosi di una gran quantità di apparecchiature in luogo del pensiero. Nel 1947 Turing parlò dei calcolatori elettronici digitali, e in particolare dell’ACE, davanti alla London Mathematical Society. Turing si chiedeva in che misura fosse possibile, in linea di principio, per una macchina calcolatrice simulare attività umane e questo lo portò a considerare la possibilità di una macchina programmata per imparare e alla quale fosse permesso di commettere errori: “se ci si aspetta che la macchina sia infallibile, allora essa non può essere anche intelligente”.

Il National Physics Laboratory, dal quale Turing si allontanò, riuscì a costruire una versione ridotta dell’ACE, il cosiddetto ACE pilota, che funzionò egregiamente per anni. Mentre von Neumann chiamava il lavoro di programmazione “codifica” e lo considerava una mansione da impiegato che non richiedeva grande intelligenza, Turing considerava programmare un calcolatore un lavoro molto affascinante, anche perché qualunque processo che sia davvero meccanico può essere passato alla macchina. È probabile che von Neumann abbia ripreso l’idea di un calcolatore universale utilizzabile nella pratica dall’opera di Turing. In definitiva, tutti gli odierni calcolatori sono “macchine di von Neumann”, ossia varianti dell’architettura di base che von Neumann, proseguendo il lavoro di Alan Turing, elaborò negli anni Quaranta. Nel suo rapporto sull’ACE, Turing aveva proposto una macchina relativamente semplice nella quale moltissime cose erano affidate al software, ma in compenso il programmatore aveva un forte controllo delle operazioni di base: era una macchina che aveva tutte le potenzialità per funzionare, ma Turing non ebbe il piacere di vederla realizzata.

Riferimenti bibliografici

  • M. Davis, The Universal Computer. The Road from Leibniz to Turing, 2000; tr. it. Il calcolatore universale, Milano 2003, pp. 174-242 (nuova ed. 2012, pp. 182-251).
  • T. Numerico, Alan Turing e l'intelligenza delle macchine, Milano 2005.
  • L'eredità di Alan Turing. 50 anni di Intelligenza artificiale, Milano 2005.
  • D. Leavitt, The man who knew too much: Alan Turing and the invention of the computer, 2006; tr. it. L'uomo che sapeva troppo: Alan Turing e l'invenzione del computer, Torino 2008.
  • M. G. Losano, Il centenario di Konrad Zuse (1910-1995): il computer nasce in Europa, in Atti della Accademia delle scienze di Torino. Classe di scienze morali, storiche e filologiche, 145 (2011), pp. 61-82.
  • Alan Mathison Turing: l'indecidibilità della vita, a cura di C. Petrocelli, Milano 2014.

Note

[6]

  1. (EN) Alonzo Church, An Unsolvable Problem of Elementary Number Theory, in American Journal of Mathematics, vol. 58, n. 2, The Johns Hopkins University Press, aprile 1936, pp. 345–363. URL consultato il 6 maggio 2016.
  2. (EN) Alan M. Turing, Computing Machinery and Intelligence (PDF), in Mind, vol. 59, october 1950, pp. 433-460. URL consultato il 6 maggio 2016.
  3. Konrad Zuse Internet Archive
  4. First draft of a report on the EDVAC by John von Neumann – Contract No. W-670-ORD-4926 between the United States Army Ordnance Department and the University of Pennsylvania – Moore School of Electrical Engineering, University of Pennsylvania – June 30, 1945. Il documento è disponibile anche nel seguente libro: Nancy Stern, From ENIAC to UNIVAC – An appraisal of the Eckert-Mauchly computers, Digital Press, 1981.
  5. (EN) Alan M. Turing, On Computable Numbers, with an Application to the Entscheidungsproblem (PDF), in Proceedings of the London Mathematical Society, ser. 2, vol. 42, 12 novembre 1936, pp. 230-265. URL consultato il 6 maggio 2016.
  6. Alan M. Turing, Computing Machinery and Intelligence in Mind, vol. 59, october 1950, pp. 167-193.