sabato 24 gennaio 2009

L'Architettura di Von Neumann

Il 16 febbraio del 1946 J. Presper Eckert e John Mauchly, due ingegneri della Moore School of Electrical Engineering dell'Università di Pennsylvania presentavano ufficialmente ENIAC (Electronic Numerical Integrator And Computer), il primo computer elettronico della storia. Si trattava di una macchina gigantesca, un ammasso enorme di valvole, condensatori e interruttori da trenta tonnellate di peso. Prendeva così corpo il progetto di dispositivo per il calcolo automatico più ambizioso che si fosse mai visto fino a quel momento, motivato, incoraggiato e finanziato durante la seconda guerra mondiale, per possibili applicazioni belliche (ad esempio calcoli balistici).

Ma ENIAC risultava essere una macchina limitata, soprattutto perchè la sua programmazione avveniva tramite cavi elettrici di collegamento sui pannelli, che dovevano essere ogni volta scollegati e ricollegati, in modo che ogni configurazione consentisse al computer di risolvere un diverso problema. Questa attività era particolarmente onerosa e il programma risultava dipendere molto dalle caratteristiche fisiche della macchina. ENIAC era una macchina costruita per svolgere solo ben determinate operazioni (come le calcolatrici tascabili di oggi), non dava certo l'idea di flessibilità, inoltre il programma era concettualmente e praticamente disgiunto dai dati su cui operava.

ENIAC non era una macchina programmabile nel senso che si intende al giorno d'oggi. E probabilmente non esisteva ancora neppure con sufficiente chiarezza l'idea di macchina programmabile, sicuramente molti di quelli che lavoravano in questo campo non l'avevano ancora maturata. La citazione seguente, di ben 10 anni successiva alla realizzazione di ENIAC, rende bene questo concetto: "Se risultasse che le logiche di base di una macchina progettata per la soluzione numerica di equazioni differenziali coincidono con quelle di una macchina destinata a preparare le fatture di un grande magazzino, penserei che si tratta della più stupefacente coincidenza di tutta la mia vita" (Aiken, 1956).

John Von Neumann entra in contatto con ENIAC subito dopo alcune esperienze con macchine calcolatrici (Herman Goldstine, Howard Aiken) e lo utilizza per alcune applicazioni scientifiche, in particolare per realizzare i primi calcoli metereologici.

Von Neumann è uno dei più grandi scienziati del ventesimo secolo, nella sua carriera si è occupato dei più svariati problemi nei campi più importanti del sapere, tra cui quello della logica matematica. Proprio questa lo portò a partecipare ad uno storico congresso che si tenne a Königsberg nel 1930, in cui il grande logico Kurt Gödel annunciò i risultati preliminari del suo famoso teorema di incompletezza (pubblicato in forma definitiva l'anno seguente). Si tratta di un risultato che ha segnato una svolta nella storia della logica, condizionando ogni ricerca successiva in questo campo. Von Neumann fu l'unico tra gli scienziati presenti in quel congresso a capirne subito fino in fondo la portata. Egli, successivamente a tale episodio, abbandonò definitivamente le ricerche di logica matematica. Il suo interesse per questo tipo di argomenti riemerse solo alcuni anni più tardi e principalmente in ragione del loro rapporto con il calcolo automatico. In questo campo spiccava il lavoro importantissimo di Alan Turing con la sua Macchina Universale (1936), un lavoro peraltro legato in maniera molto stretta a quello già citato di Gödel. Si trattava in breve di uno studio in cui si formalizzava in modo estremamente generale l'attività di calcolo. Il lavoro era di tipo teorico ma Von Neumann si accorse che alcune idee potevano essere direttamente utilizzate per formulare la struttura logica di un computer. E lo fece.

Il 30 giugno 1945, in qualità di consulente del gruppo di lavoro che stava progettando EDVAC (Electronic Discrete Variable Automatic Computer), il successore di ENIAC, John Von Neumann fece circolare una bozza di un centinaio di pagine dal titolo "First Draft of a Report on the EDVAC", in cui forniva per la prima volta la descrizione di quella che sarà da quel momento in poi l'architettura dei calcolatori moderni. A tutt'oggi questo schema di progettazione è noto come "Architettura di Von Neumann" o "Macchina di Von Neumann". A parte i dettagli l'aspetto essenziale di questa architettura sta nel fatto che essa si distingue per la caratteristica di immagazzinare all'interno dell'unità di memoria, sia i dati dei programmi in esecuzione che il codice di questi ultimi. Dati e programmi sono fra loro indistinguibili e vengono memorizzati su un’unica memoria, usando le stesse tecniche di gestione. In questo modo è possibile collegare fra loro più programmi, modificarne agevolmente la struttura ed eventualmente scambiarli fra macchine diverse.

Si tratta di una schematizzazione molto sintetica ma che si è rivelata molto potente. Con essa infatti i computer diventano definitivamente delle Macchine di Turing Universali, rendendo finalmente credibile l'idea che una stessa macchina possa svolgere compiti diversissimi, purchè opportunamente programmata. Anche in questo caso utilizzo una citazione per sottolineare l'importanza che questa struttura ha avuto nella storia dell'informatica e che ha tuttora: "In pratica tutti gli odierni calcolatori, dalle supermacchine da dieci milioni di dollari a quei minuscoli chip che fanno andare i telefoni cellulari, hanno una cosa in comune: sono tutti Macchine di Von Neumann, varianti dell'architettura di base che John Von Neumann, proseguendo il lavoro di Alan Turing, elaborò negli anni quaranta" (TIME, 1999).

giovedì 15 gennaio 2009

Galileo

Un giorno Galileo prese un cannocchiale (fino ad allora utilizzato per scopi terrestri: in battaglia, nella navigazione, ecc.), lo puntò verso il cielo e vide cose che gli umani non erano neppure riusciti ad immaginare: vide i satelliti di giove, le montagne della luna, le fasi di venere, le miriadi di stelle della via lattea, le macchie solari. Da quel momento l'uomo fu più consapevole dell'universo che abita.

Un giorno Galileo fu costretto a presentarsi davanti al tribunale della santa inquisizione e a negare ufficialmente tutto quello che aveva visto, a ritrattare tutte le nuove teorie esposte nella sua opera principale, il "Dialogo sopra i due massimi sistemi del mondo", e ad impegnarsi a non divulgarle in futuro. Da quel momento l'uomo fu più consapevole di quanto il potere è nemico della libertà di pensiero.

lunedì 12 gennaio 2009

Il mio lavoro ....

Il mio lavoro mi porta a contatto con un campione piuttosto grande di tecnici informatici. Questi svolgono i compiti più svariati ma solitamente hanno all'interno della loro infrastruttura IT aziendale una loro porzione ben definita di attività, com'è giusto che sia e come deriva da una corretta organizzazione del lavoro. Fanno eccezione i dipendenti di società molto piccole e i consulenti che invece hanno solitamente a che fare con un gran ventaglio di problematiche assai diverse.

La cosa che spesso mi colpisce, soprattutto nelle persone che si occupano da anni della stessa cosa (e che lo fanno in certi ambienti lavorativi forse poco stimolanti), è osservare che la loro area circoscritta di lavoro coincide con le loro conoscenze in campo informatico e più in generale con la loro cultura in questo settore della conoscenza. E spesso questo è giudicato più che sufficiente per fare bene il proprio lavoro.

Io sono convinto che qualunque lavoro si faccia il grado di conoscenza e di cultura che si ha (più o meno attinente all'attività svolta) è estremamente importante, sia per i risultati che si possono ottenere nel lavoro che si fa sia per la soddisfazione che se ne può ricavare semplicemente facendolo ogni giorno. Questo è tanto più vero quanto più è profondo e generale il settore di conoscenze a cui è direttamente o indirettamente legata la nostra attività professionale. Come succede nel caso dell'informatica.

Fare l'informatico occupandosi solo dei pezzi di ferro, cioè farlo occupandosi solo del prodotto specifico che si vende o su cui si fa assistenza, senza neppure tentare di allargare le proprie conoscenze almeno alle tecnologie di fondo utilizzate in quel prodotto (e, perchè no, anche alla loro storia), è una cosa che mette tristezza. E ai miei occhi appare un atteggiamento decisamente troppo diffuso.

L'informatica è una scienza, è un settore della matematica con ricadute tecnologiche di importanza cruciale per la nostra società. E' una disciplina estremamente vasta e articolata, con infinite applicazioni nei campi più disparati, ma anche con una sua certa unità, nelle idee di fondo, nei metodi. Nel termine informatica può ricadere contemporaneamente il problema teorico più raffinato e generale come l'applicazione pratica più specifica e contingente. L'informatica ha ormai una sua storia. Abbracciare in varia misura, per quanto possibile, tutti questi aspetti, è il modo migliore (forse l'unico) per comprenderla e apprezzarla.

Queste considerazioni forse mi porteranno in futuro a tentare di scrivere dei post o piccoli articoli, senza nessuna pretesa di originalità, su alcune importanti tecnologie informatiche, su alcune idee di fondo dell'informatica e su alcuni episodi e personaggi significativi della sua storia. E a presentarli in questo blog.