Mark Jason Dominus
Higher-Order Perl

Elsevier inc - 2005 - 37.77 $
ISBN:1-55860-701-3
© 2003 Perl Mongers Italia. Tutti i diritti riservati.

Recensione di Daniele Radogna [Voto:5/5]

Commenta la recensione

Disclaimer :-) il mio modo di intendere una recensione è che essa si basa fondamentalmente su un insieme di giudizi. Per i puri fatti rimando alla Toc (table of contents) agevolmente accessibile su http://hop.perl.plover.com.

Prima buona notizia: il testo sarà distribuito gratuitamente in forma elettronica. Sempre dal sito citato: "My contract says that after the book is published I can distribute the complete text from my web site. The content of my book will be available to everyone everywhere for free. Watch this space for updates."

La seconda ottima notizia è che questo è un libro importante sul Perl e la ragione della sua importanza è esplicitamente e nitidamente dichiarata nella prefazione: il testo si ripromette di intervenire e correggere quella comune incomprensione del Perl che fa si che i programmatori scrivano codice Perl pensando in C (ottenendo quindi programmi che sono una versione lenta dei programmi realizzati in C).

L'autore è efficace nel mantenere la promessa e nell'ottenere, se posso permettermi di usare questi termini, questo fondamentale mutamento di paradigma. Parodiando Larry Wall, nel capitolo sui packages, pagina 278 della seconda edizione del Perl Programming, se per caso il vostro nome non è Mark Jason Dominus, quando avrete riposto il libro penserete diversamente da quando lo avete sollevato (perlomeno per quanto concerne la programmazione Perl), il che non capita esattamente con tutti i libri. In particolare, nella prefazione molto densa e molto stimolante, il punto di partenza per gli sviluppi successivi è un confronto - non illegittimo, sorprendentemente - tra Perl e Lisp. Questo confronto, almeno nel mio caso, non era francamente un avvio prevedibile e ha contribuito a tenere alta la suspence.

Il testo si articola su capitoli che trattano approfonditamente di: ricorsione e callback, dispatch table, caching e memoization, iteratori, streams infiniti, high order functions, parsing, programmazione dichiarativa, in quest'ordine.

L'esposizione è molto buona ma non è elementare; tuttavia la sua progressione consente di seguire lo sviluppo delle tecniche e degli argomenti in modo perfettamente adeguato; questa precisazione è importante perché, tra tutti i testi Perl che conosco, questo è quello che più si avvicina, sia per modalità espositiva, sia per la natura dei temi trattati, a un testo universitario; in certi punti, si avverte nettamente un'aria di alta montagna che è inerente alla materia, in buona parte basata su quelli che sono - o dovrebbero essere - gli strumenti concettuali fondamentali della cassetta degli attrezzi di un programmatore consapevole (quale che sia il linguaggio di elezione).

Un esempio forse illustrerà cosa intendo dire. Troviamo nel testo una trattazione della ricorsione (non manca il classico esempio della torre di Hanoi) per cui (se non mi sbaglio) non trovo precedenti nella letteratura Perl; e ciò, fondamentalmente, credo, perché l'argomento ricorsione ha più impatto sul versante della consapevolezza teorica che in quello delle tecniche di tutti i giorni (non sono moltissimi i casi in cui la ricorsione è inevitabile, anche se sono molti quelli in cui la ricorsione è piacevole, a scapito della efficienza); ma l'argomento viene presentato e discusso per essere, correttamente, superato dalle tecniche e dalle metodiche che seguono; e tuttavia l'esposizione è talmente buona da essere utile a chi conosce poco o punto tale tecnica (e che quindi sarà bene si affretti a colmare questa lacuna) e contemporaneamente da gettare luce sulla economia e sullo statuto di necessità delle variabili lessicali nel Perl.

Dominus ha la capacità di trattare con sicurezza e in modo didatticamente valido argomenti che hanno dignità teorica, guidando il lettore negli aspetti concreti e pratici della programmazione con esempi che sono chiari, comprensibili e realmente esplicativi; gli argomenti trattati, se meditati, vengono ben assimilati e quindi arricchiscono significativamente le tecniche a disposizione del lettore. Dulcis in fundo gli esempi sono realmente, genuinamente perlish, ma lo sono in un modo particolare in quanto mettono in luce possibilità e aspetti del linguaggio forse solo indirettamente accennati in altre esposizioni e mai pienamente ed esplicitamente espressi. Ciò è probabilmente dovuto proprio al fatto che i metodi illustrati si situano saldamente nel dominio degli algoritmi fondamentali; ovvero l'esposizione da per scontato che il lettore padroneggi le basi del Perl, guidandolo quindi nella costruzione di metafore che si pongono a un livello di astrazione superiore (esempio: gli iteratori).

Il risultato finale è a mio giudizio più che buono: è eccellente e costituisce un caso a se. Se il testo non è per niente adatto (ma il titolo stesso mette in guardia in questo senso) a un principiante, azzarderò la seguente, forse enfatica conclusione. HOP si situa saldamente nell'empireo dei testi sul Perl (per intenderci, dei testi sul Perl come linguaggio, non del Perl inteso nell'ambito di qualche specifica tecnologia - xml, tcp/ip, interfacce grafiche) e - forse più di ogni altro a me noto - aiuta capire che cosa esattamente è il Perl e qual è la sua identità nell'ecosistema dei linguaggi di programmazione.