Presentazione dell’edizione italiana La scelta di un testo dedicato agli algoritmi e alle strutture dati, di livello universitario, da tradurre in italiano è stata lunga e difficile, dovendosi prendere in considerazione esigenze didattiche, scientifiche ed editoriali: alla fine si è scelto questo testo di Adam Drozdek, che è certamente innovativo per molti motivi. La base di conoscenza esposta nel libro è quella, ormai classica, delle strutture dati viste e introdotte prima come tipi di dati astratti, definite mediante la loro interfaccia, per poi passare alla loro realizzazione concreta in un linguaggio di programmazione e ad alcuni esempi significativi di un loro utilizzo in ambito progettuale, scientifico e ingegneristico. Questa metodologia didattica si adatta alla perfezione a essere esemplificata con un linguaggio di programmazione a oggetti, e su questo punto l’Autore fa la prima scelta innovativa utilizzando il linguaggio Java, anziché il più consueto linguaggio C++. La scelta del linguaggio, ovviamente, non è casuale, ma dettata dall’obiettivo di adattare la didattica alla pratica industriale e scientifica, dove ormai il linguaggio Java ha largamente soppiantato gli altri linguaggi di programmazione per quanto riguarda i nuovi progetti software (se si esclude cioè la manutenzione di progetti già sviluppati). Il linguaggio Java si rivela, leggendo il testo, particolarmente adatto alla didattica delle strutture dati, in quanto la definizione dei tipi di dati astratti si traduce in modo naturale nella definizione di una interfaccia in Java, e la realizzazione di una struttura dati concreta si traduce nella definizione di una classe che realizzi tale interfaccia. Un altro aspetto decisamente innovativo, che certamente si rivelerà molto utile nella didattica, consiste nella presentazione di un “caso di studio” in ciascun capitolo del libro, un esempio di progetto software completo che porterà lo studente a confrontarsi con tutti i problemi tipici di tali realizzazioni, dove vedrà un uso concreto degli argomenti appena studiati, insieme alla risoluzione delle classiche problematiche di ricezione dei dati in ingresso, di interazione con l’utente, di manipolazione dei file. Caratteristica non trascurabile per un testo prevalentemente (ma non solo) orientato alla didattica, l’Autore propone parecchie decine di esercizi al termine di xii Presentazione dell’edizione italiana ciascun capitolo, suddivisi in due sezioni: esercizi di verifica della comprensione teorica degli argomenti trattati, ed eventualmente loro approfondimenti, e veri e propri esercizi di progettazione software, di complessità spesso simile a quelli affrontati nei casi di studio. Una risorsa che si rivelerà sicuramente utile, vista anche la cronica carenza di libri di esercizi in questo settore. Per quanto riguarda la collocazione del testo nel panorama della didattica universitaria italiana, è difficile fare affermazioni precise, come invece è possibile negli Stati Uniti, dove i programmi dei corsi sono molto più uniformi. È ragionevole ritenere che il testo si adatti con buona precisione al programma di un corso di Fondamenti di Informatica II (nelle diverse denominazioni che esso può avere nei vari Atenei italiani), cioè di un corso di base di scienza dell’informazione che si collochi a valle di un primo corso in cui siano state studiate le strutture dati elementari (variabili, array) e lo studente abbia acquisito i rudimenti di un linguaggio di programmazione, che non necessariamente deve essere il linguaggio Java. In seguito alla definizione di nuovi percorsi di studio per le lauree triennali, che si stanno profilando nel panorama italiano, si assiste ad una ancor maggiore diversificazione delle denominazioni dei corsi e dei relativi programmi, con la tendenza a corsi più brevi e di argomento più focalizzato. Un esempio in tal senso potrebbe essere un corso di “Dati e Algoritmi”, sul modello statunitense, il cui programma potrebbe agevolmente coincidere con gli argomenti trattati nel testo, forse con l’esclusione degli ultimi due capitoli, che presentano sostanzialmente dei casi di studio molto approfonditi, ma non introducono argomenti teorici. Per quanto riguarda l’aspetto linguistico della traduzione, alcune scelte si discostano dalla pratica comune, per cui meritano forse una giustificazione. Innanzitutto, negli esempi di codice Java i nomi dei vari identificatori (di variabili, di metodi, di classi ecc.) sono stati mantenuti nella lingua originale: questo permette una lettura del codice più fluida e coerente, perché risulta omogenea con le parole chiave del linguaggio e con gli identificatori della libreria standard di Java, che sono ovviamente in lingua inglese e non possono essere tradotti. Sempre per omogeneità, si è deciso di usare il punto come separatore decimale, anziché la virgola che viene usata in Italia, perché altrimenti si sarebbe dovuto usare la virgola nei numeri presenti nel testo e il punto nei numeri presenti nel codice. Infine, alcuni termini sono stati mantenuti nella lingua originale anche nella trattazione teorica, quando questo risulti essere la pratica comune: esempi in tal senso sono heap e hash. Il testo è affiancato da un sito Web (booksite) in cui sono disponibili ulteriori materiali didattici, nonché eventuali aggiornamenti e/o correzioni, all’indirizzo http://www.apogeonline.com/libri/00895/allegati/ Marcello Dalpasso Dipartimento di Elettronica e Informatica Università degli Studi di Padova