I
Prefazione
Un kit di sopravvivenza per il terzo millennio
Questo libro è concepito per coloro che si ritengono esclusi da un mondo ad alta tecnologia e sono alla ricerca di un modo per entrarvi. Se qualche volta vi siete chiesti cosa
si intende per classe Java, file server, Ethernet, World Wide Web, PGP, questo libro vi
fornirà le risposte che cercate. Vi hanno detto che avete bisogno di un compilatore, ma
per quale motivo? Cosa fa realmente un compilatore? Vi hanno chiesto di far comparire
un’immagine su una pagina Web in seguito alla pressione del pulsante “sorpresa”; siete
in grado di farlo? Il vostro computer va a 1 gigahertz: un miliardo di cosa al secondo?
A proposito, ma che cos’è in realtà un computer? Oggi saper lavorare su un foglio di
calcolo e fare clic su una pagina Web non è più sufficiente. Ci sono centinaia di milioni
di computer connessi in rete; collegandoci a Internet possiamo entrare in comunicazione
con persone e organizzazioni in qualsiasi parte del mondo; abbiamo quotidianamente a
che fare con l’informatica nel lavoro, nello svago, nella vita privata. Dobbiamo imparare a conoscere queste tecnologie, a comprenderne l’intima logica di funzionamento, non
semplicemente a utilizzarle passivamente.
Qualcosa di più di un elenco di fatti
Questo libro offre una presentazione generale dell’informatica organizzandola attorno al
tema delle “grandi idee” di questa disciplina, ovvero le scoperte, i paradigmi, le soluzioni
che per prime attraggono l’attenzione di chiunque si accosti all’argomento; è nostra convinzione che tali “grandi idee” forniscano un ideale percorso di apprendimento. Il libro
inizia con una introduzione al World Wide Web, spostandosi poi verso la programmazione Java. L’idea è che se imparate a formattare in HTML le vostre pagine Web, e se sapete
programmare l’elaboratore per fargli svolgere alcuni compiti che vi interessano, allora ne
avrete veramente compreso il funzionamento.
Una volta compresa la programmazione, avrete una notazione e un linguaggio che vi
permetteranno di parlare del calcolo automatico e di esplorarne a fondo i meccanismi nascosti. Questa è la seconda area di interesse del libro: capire come funzionano l’hardware
e il software che vi forniscono così tanti servizi. Cosa fanno in realtà il sistema operativo,
il compilatore, il browser e i programmi applicativi nel momento in cui richiedete un ser-
%LHUPDQQSGI
xvi
Prefazione
vizio? Perché agiscono proprio in quel modo particolare? Cosa potremmo aspettarci in
futuro? Alcuni capitoli di questo volume sono dedicati all’architettura degli elaboratori, ai
meccanismi di compilazione, ai sistemi operativi, alla sicurezza, alle reti, con descrizioni
dettagliate di cosa fanno e di come funzionano.
La terza area di interesse prende in esame i limiti e le sfide che oggi l’informatica deve
affrontare. Quali sono i paradigmi necessari alla comprensione dei problemi più difficili
che ci troviamo ad affrontare? Quali problemi potremo risolvere negli anni a venire,
anche se attualmente non sappiamo come? Quali problemi invece non sono risolvibili da
un computer, né ora né, molto probabilmente, in futuro?
Il libro nel suo insieme è stato pensato per fornire una panoramica complessiva sulla
computer science, ossia sull’informatica intesa come disciplina scientifica, con un’enfasi
sulla comprensione dei problemi più profondi della disciplina.
Nel corpo e nella mente
Il metodo di insegnamento adottato in questo libro richiede di fare, piuttosto che limitarsi
a leggere e ripetere. L’idea è che se vi trovate a svolgere di persona i singoli passi per la
creazione di un programma o se simulate a mano un processo, quel meccanismo, assieme
alle idee a esso collegate, entrerà in voi, e ne acquisirete una padronanza non solo intellettuale, ma anche, per così dire, “fisica”. Nel libro, dunque, apprenderete i sistemi di database programmandone uno in Java; comprenderete l’architettura di un sistema leggendo
e scrivendo codice in linguaggio assembly; capirete i meccanismi di compilazione effettuando a mano una compilazione di frammenti di programmi Java; comprenderete la non
computabilità lavorando su prove di non computabilità e imparando a classificare autonomamente i problemi come computabili o non computabili. Questo è l’approccio didattico
orientato ai problemi, che ha avuto così tanto successo nelle discipline scientifiche.
Un corso di informatica
Questo libro è insolito per due aspetti. Esso copre un insieme di argomenti molto vasto
(dalla formattazione del testo in HTML alla complessità dei programmi e alla non computabilità) con una profondità relativamente elevata (per mettere gli studenti in grado di
risolvere effettivamente problemi specifici nei vari ambiti). Come tale, esso può essere utilizzato in un corso introduttivo per studenti di informatica; gli studenti, in questo
caso, possono iniziare il loro percorso formativo con una visione d’insieme della disciplina, andando poi a inserire ogni corso successivo in una collocazione già predisposta
dal corso introduttivo. Il libro, tuttavia, può anche essere utilizzato nell’unico corso di informatica sostenuto da studenti di altre discipline; esso fornisce infatti una comprensione
concettuale della tecnologia dell’informazione che persone con un buon livello di istru-
%LHUPDQQSGI
Prefazione
xvii
zione dovrebbero comunque possedere. Il testo supporta il modello di FITness (Fluency
in Information Technology) descritto in un recente studio del National Research Council
degli Stati Uniti (Snyder et al. 1999), coprendo gran parte dei concetti di informatica che
lo studio ha indicato come indispensabili.
Un migliaio di eroi
Il volume è il risultato di quindici anni di esperienza nel corso “Great ideas in computer
science” (le “grandi idee dell’informatica”) tenuto presso la Duke University e in altri
istituti. L’elenco dei ringraziamenti include i molti assistenti e collaboratori che hanno
insegnato usando l’approccio delle “great ideas”. (Si consulti, ad esempio, la descrizione
di Biermann di questo approccio didattico, seguito presso varie università: “Computer
Science for the Many,” Computer 27 (1994): 62–73.) I nostri assistenti e collaboratori
hanno fornito un contributo fondamentale aiutandoci a sviluppare un approccio idoneo a
introdurre Java, scrivendo molti degli appunti che si sono infine evoluti in questo libro
e sviluppando gli esercizi di laboratorio per i nostri corsi. Contributi fondamentali sono
stati quelli di Steve Myers, Eric Jewart, Steve Ruby e Greg Keim. Dobbiamo dei ringraziamenti speciali ai nostri colleghi di facoltà Owen Astrachan, Robert Duvall, Jeff Forbes
e Gershon Kedem per averci fornito alcune critiche costruttive, conversazioni stimolanti e suggerimenti tecnici. Ben Allen ha preparato alcuni dei programmi Java presentati
nel capitolo sulla simulazione. Carrie Liken ha creato alcune delle immagini presenti nel
Capitolo 5. Un ringraziamento va anche a David e Jennifer Biermann, Alice M. Gordon,
Karl, Lenore e M.K. Ramm, Jeifu Shi, Michael Fulkerson, Elina Kaplan, Denita Thomas,
alle migliaia di studenti del corso alla Duke, al lungo elenco di persone che ci hanno
aiutati per le prime edizioni, ai nostri redattori Deborah Cantor-Adams e Alice Cheyer e
come sempre al nostro gentile editor esecutivo Robert Prior.
%LHUPDQQSGI