Inizio le recensioni di libri di informatica del 2011 con la casa editrice che per me è stata la prima fonte di informazioni in questo campo quando intrapresi questo settore alla fine degli anni ’90, la Apogeo.
Se non fosse stato che il libro di cui parlo oggi è stato scritto per la “concorrenza” – Oracle, PostgreSQL e soprattutto MySQL – direi che rappresenterebbe il libro perfetto che qualunque sviluppatore dovrebbe avere nel proprio arsenale di testi tecnici.
Gli esempi di codice, infatti, non aiutano chi, come me, usa SQL Server nella vita quotidiana. Anche il codice di programmazione non è scritto in linguaggi a me conosciuti, ma in PHP.
Detto questo è da constatare, ahimè, l’assoluta mancanza di un testo simile per chi appartiene all’altra “sponda” (ovvero Microsoft).
In meno di 300 pagine sono raccolti 25 “anti-patterns”, un termine molto azzeccato per definire quegli errori di design, di implementazione e di sviluppo, che programmatori alle prime armi (e non solo) possono compiere quando creano applicazioni che fanno uso di basi dati (ovvero praticamente tutte).
Si passa da errori piuttosto banali, ma spesso subdoli, come il creare troppi indici, scegliere un tipo di dato non adeguato, sbagliare la scelta delle chiavi primarie, ecc. ecc., ad errori più sottili (e pericolosi) come le “sql-injection” e gli attributi multi-colonna. Il tutto suddiviso in 5 parti: le prime due dedicate al database in quanto tale (sbagli nella progettazione logica e fisica), e altre due dedicate alle query e al codice applicativo che fa uso di database.
Comunque, anche chi, come me, può riscontrare una certa difficoltà a seguire gli esempi di codice (soprattutto quello in PHP), questo libro mantiene un suo fascino e una sua utilità pressochè unica.
Per di più il tono discorsivo è molto leggero e godibile. In capitoli, nella maggioranza dei casi, non sono lunghi più di una dozzina di pagine, e questo aiuta molto nell’atto di “aprire e chiudere” un argomento senza doverne interrompere a metà la lettura per mancanza di tempo.
All’inizio di ciascuno di essi l’autore riporta sia una massima – scritta o detta da personaggi famosi, non necessariamente informatici - sia una sua breve storia di vita vissuta in cui si è scontrato con l’anti-pattern trattato nel capitolo (assolutamente da leggere, sono molto istruttive).
Ovviamente, come un bravo medico, l’autore non descrive solo il male e la malattia, ma propone la cura (il “pattern”) da seguire, sia estirparlo, nel caso sia già conclamato, sia, soprattutto, per evitarlo.
E qua viene la parte più bella, e su cui il lettore dovrebbe fermarsi un attimo a riflettere: “Ho fatto anche io questi errori?” – “In seguito, come li ho risolti?”, e così via.
E come ogni dottore che si rispetti, l’autore può proporre anche più di una soluzione. Non esiste infatti la medicina miracolosa, ma possono esservene diverse, ognuna coi suoi pro e suo contro.
Terminando un attimo queste similitudini infermieristiche, devo sottolineare che il lettore ideale conosce già SQL nella sua sintassi base (quella Ansi) e sa di cosa si parla quando si trattano indici, stored procedure, funzioni, e così via.
E tale lettore ideale si immedesimerà in diverse situazioni simili in cui si è scontrato con tali problematiche e trabocchetti.
Non ci sono esercizi o domande di riepilogo (non avrebbero nemmeno senso, in un libro del genere), ma vi sono decine di citazioni sparse nei vari capitoli e due interessanti appendici. Una dedicata alla normalizzazione dei database, e l’altra – molto più breve – è un’utile bibliografia.
Questo libro è la traduzione di un titolo della Pragmatic Programmers, una casa editrice di cui ho già recensito qualche testo nel passato e specializzata in argomenti un po’ particolari. Ad esempio non si troverà a catalogo un testo sul C#, ma come eseguire test e le metodologie agili, ecc. E’ particolarmente predisposta per l’open source, questo spiega perché questo testo si basa su database MySQL e PHP.
Qua sotto la copertina della versione originale, pubblicata a luglio dell’anno scorso.
La traduzione mi pare molto ben fatta, per un libro che, ipotizzo, all’origine contenga molte frasi colloquiali e gergali. Ho solo notato qualche refuso qua e là, ma nulla di grave.
La Apogeo è sufficientemente gentile da mettere a disposizione un po’ di materiale gratuito in formato Pdf a questa pagina.
Innanzitutto i capitoli 1 e 2 (9 pagine ciascuno) e il sommario dettagliato (8 pagine).
Purtroppo la rilegatura è quella classica “Apogeana”, durissima, e ciò non aiuta nella lettura.
L’impaginazione e la scelta dei font, invece, è azzeccata.
Qua sotto la pagina principale sul sito della Pragmatic Programmers dedicata al libro.
Il piccolo file del codice lo si scarica dal sito della casa editrice originaria, in formato sia zip che tgz (e non poteva mancare, data la vocazione open source dell’autore).
Qua sotto l’immagine (con link) dove poter reperire le errate sul sito della Pragmatic.
Come si vedrà, le errate non sono poche, ma la maggior parte sono ininfluenti sottigliezze.
Che dire, un testo validissimo ed unico, di cui si sente la mancanza di un analogo che sia “Microsoft centrico”.
La sua lettura è consigliata a tutti, sia programmatori alle prime armi che veterani inveterati.
Segnalo che il libro è venduto su Amazon Italia con il 30% di sconto. Il prezzo più basso che ho trovato.
PRO
Un libro che decida di trattare le “worst practice” invece delle “best practice” lo rende unico di per sé. La ricchezza di idee, di spunti e di avvertimenti lo rende utilissimo, e direi irrinunciabile, per sviluppatori intermedi ed avanzati. La lettura è molto scorrevole e piacevole, e il livello della traduzione è superiore alla media.
CONTRO
Il contro, dal punto di vista di uno sviluppatore Microsoft, è relativo al fatto che è stato scritto per applicazioni open source, e quindi gli esempi sono per MySQL e PHP.
La rilegatura Apogeo risulta eccessivamente rigida per un uso confortevole del libro.
Voto complessivo: 8/10
Lettore: Intermedio
Sommario
Nota dell’editore
1- Capitolo 1 Introduzione
Parte I Antipattern nella progettazione logica di database
13 - Capitolo 2 Jaywalking
23 - Capitolo 3 Alberi naif
41 - Capitolo 4 ID richiesto
51 - Capitolo 5 Inserimento senza chiavi
59 - Capitolo 6 Entità-Attributo-Valore
73 - Capitolo 7 Associazioni polimorfe
85 - Capitolo 8 Attributi multicolonna
93 - Capitolo 9 Metadati e tribble
Parte II Antipattern nella progettazione fisica di database
105 - Capitolo 10 Errori di arrotondamento
113 - Capitolo 11 31 gusti
121 - Capitolo 12 File fantasma
129 - Capitolo 13 Indici dappertutto
Parte III Antipattern relativi alle query
143 - Capitolo 14 Paura dell’ignoto
153 - Capitolo 15 Gruppi ambigui
163 - Capitolo 16 Selezione casuale
171 - Capitolo 17 Il motore di ricerca dei poveri
185 - Capitolo 18 Spaghetti query
195 - Capitolo 19 Colonne implicite
Parte IV Antipattern nello sviluppo di applicazioni
205 - Capitolo 20 Password leggibili
217 - Capitolo 21 SQL injection
231 - Capitolo 22 Pseudochiavi al posto sbagliato
239 - Capitolo 23 Il diavolo si nasconde
245 - Capitolo 24 Immunità diplomatica
255 - Capitolo 25 Fagioli magici
Parte V Appendici
271 - Appendice A Regole di normalizzazione
285 - Appendice B Bibliografia
287 - Indice analitico