15 libri per iniziare o migliorare nella programmazione con PHP

Durante alcuni dei nostri incontri, sono capitate domande e discussioni su quelle che potrebbero essere le migliori fonti per imparare o approfondire le proprie conoscenze sul  PHP, o comunque per migliorare le proprie competenze di sviluppatore.

Cito quelli che reputo essere stati testi fondamentali nel mio percorso di crescita professionale, lungi dal voler (nè poter) fare un elenco esaustivo. Ringrazio anticipatamente chi vorrà contribuire con i propri commenti e le proprie integrazioni.

Mi rendo conto che 15 testi sono parecchi; ho cercato di essere più generico possibile, comunque indicando accanto ad ogni testo, e nelle singole descrizioni, le caratteristiche di ciascun libro e il target di lettori – secondo me – più adatto.

Un principiante potrebbe partire dai seguenti:

  • The Pragmatic Programmer
  • PHP Objects, Patterns and Practice – 3rd Edition
  • Head First Design Patterns


Libri sulla scrittura di Buon Codice

Prima di passare in rassegna i testi specifici sul linguaggio PHP, ritengo che ci siano alcuni libri che ogni sviluppatore (o aspirante tale) dovrebbe leggere. Forniscono una serie di consigli e indicazioni di alto livello, validi indipendentemente dal linguaggio e – secondo me – di fondamentale importanza. La lettura di questi libri ha avuto in me un impatto dirompente, facendo subito emergere sia ignoranza metacognitiva (ovvero l’inconsapevolezza della mia incompetenza), sia cosa c’era “che non andava” da un punto di vista pratico. Sono testi che hanno permesso di rendermi conto dei miei limiti e poter quindi agire con maggior precisione ed efficacia nel migliorare.

The Pragmatic Programmer [per tutti]

Libro famoso, e ulteriormente reso celebre dalle referenze presenti in pressochè qualsiasi libro moderno che parli di sviluppo software, è uno dei testi che consiglio veramente a tutti. Di estrema semplicità, si legge in pochissimo tempo, ma può subito indirizzare il principiante sulla buona strada; allo stesso tempo, può anche far cogliere all’esperto punti di vista o aspetti dello sviluppo software che non aveva ancora considerato. Evidenzia alcuni “peccati mortali”, che è fondamentale evitare, ed è anche per questo un libro che personalmente non mi stancherei mai di sfogliare nuovamente. Lo consiglio vivamente a tutti; probabilmente prima di qualsiasi altro testo.

The Pragmatic Programmer – A. Hunt, D. Thomas – Addison-Wesley Professional, 1999 – 354 p.

Code Complete/Clean Code [principianti e chi ha già pratica]

Sono due libri simili al precedente, per quanto riguarda l’obiettivo che si pongono, ovvero far energere la consapevolezza di quelle che sono le buone e le cattive pratiche nella scrittura di codice. L’approccio in questo caso è però meno “filosofico” e più pratico. Sono fornite indicazioni ed esempi  su come scrivere buon codice, nel dettaglio. Il prezzo da pagare per tale completezza è dato dalle loro dimensioni, e quindi dal tempo necessario per leggerli. Sono certamente più impegnativi rispetto a “The Pragmatic Programmer”, ma secondo me se si vogliono fare le cose sul serio, vale davvero la pena di leggerne almeno uno dei due; raccolgono infatti consigli e aneddoti di buona programmazione basati su decenni di sviluppo, anche in seno a grandi aziende. Non sostituiscono “The Pragmatic Programmer”, ma certamente favoriscono la messa in pratica di molti dei consigli in esso contenuti.

Mi è difficile consigliarne uno tra i due; Clean Code è dell’agilista “Uncle Bob” ed è perciò da molti considerato “più figo”, a priori. Rispetto a Code Complete 2 (Microsoft Press), è più orientato verso uno specifico linguaggio (Java), meno esplicito, e quindi più corto. Può essere letto in meno tempo, ma forse richiede maggior attenzione per comprendere bene gli argomenti trattati e trasporli al mondo del PHP. Personalmente, nonostante fosse “meno figo”, ho preferito Code Complete 2, perchè mi è stato più facile leggerlo in maniera disimpegnata, nel tempo libero (anche in vacanza, con tutte le distrazioni del caso), pur riuscendo a cogliere l’enorme quantità di consigli utili forniti. E’ sicuramente più esplicito, ma leggerlo è stato comunque impegnativo in termini di tempo, per via delle sue 960 pagine (la maggior parte comunque di qualità e che sono state quindi lette volentieri). Detto ciò, sono secondo me entrambi due ottimi libri, e ritengo che la scelta vada fatta unicamente tra sinteticità (Clean Code) e maggior esplicatività nella trasmissione dei contenuti (Code Complete 2), anche in base a quando e come si pensa di leggerli.

Code Complete 2 – S. McConnell – Microsoft Publishing, 2004 – 960 p.
Clean Code – B. Martin – Prentice Hall, 2008 – 464p.

Programming Pearls – Second Edition [chi ha già pratica ed esperti]

Libro vecchio stile, che presenta una serie di problemi informatici (raccolti nelle “Communications of the ACM”, tra il 1983 e il 1985). Personalmente l’ho trovato molto interessante e divertente, perchè espone problemi che, di fondo, possono ripresentarsi in qualsiasi contesto e in qualsiasi linguaggio. Oggigiorno forse sotto forma di possibilità di ottimizzazione, più che altro. Si scende infatti a livello piuttosto basso, e ciò potrebbe essere pericoloso. Le risorse hardware a nostra disposizione ci permettono oggi di scrivere codice pulito, prima che efficiente; e penso che questo dovrebbe essere il primo obiettivo di ogni sviluppatore. Per questo motivo, lo consiglio soprattutto a chi ha già parecchia esperienza. L’entusiasmo dopo aver letto un libro del genere potrebbe infatti rischiare di portare a ottimizzazioni premature, se non si ha buona pradonanza della materia. Non fatevi peraltro impressionare dal numero limitato di pagine; è un libro che comunque richiede il suo tempo e il suo impegno per essere letto. Anche perchè è organizzato a problemi, la cui risoluzione è inizialmente lasciata al lettore. E’ quindi anche un ottimo esercizio, a livello di ragionamento.

Programming Pearls – J. Bentley – Addison-Wesley Professional, 1999 – 256 p.


Libri sulla Progettazione Software

Scrivere buon codice è senza dubbio molto importante; non meno importante è però essere in grado di organizzare opportunamente lo stesso, per evitare di realizzare applicazioni che siano difficili da mantenere (dato che permeate di componenti dipendenti tra loro, ridondanze, codice che non può essere testato, etc). Ecco quindi di seguito alcuni libri che ritengo essere molto validi dal punto di vista della progettazione.

Progettazione a oggetti con UML [principianti e chi ha già pratica]

Libro che sicuramente gode di meno popolarità rispetto alla maggior parte degli altri testi di quest’elenco, ma che secondo me merita invece di essere preso in seria considerazione da qualsiasi sviluppatore. Sebbene il titolo possa trarre in inganno, facendolo passare per l’ennesimo testo su come scrivere documentazione in UML, questo libro presenta in realtà parecchi concetti, fondamentali, ma non sempre chiari a chi lavora con linguaggi di programmazione object oriented come il PHP. In una delle migliori traduzioni in Italiano di cui io abbia memoria, sono trattati argomenti fondamentali come incapsulamento, ereditarietà, polimorfismo, scambio di messaggi, ingombro, coesione, etc. E’ secondo me un testo che fornisce input fondamentali verso la progettazione di sistemi software “puliti” e facilmente manutenibili. Nonostante le 384 pagine, è un libro gradevole e snello, che si legge piuttostovelocemente.

Progettazione a Oggetti con UML – M. Page Jones – Apogeo, 2002 – 384 p.

Design Patterns – Elements of Reusable Object-Oriented Software [chi ha già pratica ed esperti]

Altro grande classico, che non dovrebbe mancare nello scaffale di uno sviluppatore / ingegnere software, questo libro è tipicamente noto con il nome di “libro della GoF” (Gang of Four – il numero degli autori). E’ un libro che parla di Design Pattern, ovvero soluzioni ritenute universamente valide, per problemi ricorrenti. E’ stato pubblicato nella sua prima edizione nel 1995 ed è da questo testo che il termine pattern (preso in prestito dall’architettura, dove fu proposto per la prima volta dall’estroso Alexander) ha acquisito crescente popolarità nell’ambito dello sviluppo software. Sebbene non tutti dei pattern presentati (IE Singlton) siano oggi da considerarsi delle best practices per tutti i contesti, è un testo secondo me molto importante, perchè accresce il bagaglio di strumenti a propria disposizione nella progettazione di software. Non dovrebbe esserci secondo me laureato in discipline informatiche a digiuno in materia. Qualcuno ne lamenta la scarsa chiarezza, ma personalmente non l’ho trovato così contorto …anche se ammetto che, alla fine, le pagine sono sembrate essere più di quelle reali (probabilmente per densità dei contenuti, più che effettiva difficoltà).

Design Patterns: Elements of Reusable Object-Oriented Software – E. Gamma, R. Helm, R. Johnson, J. Vlissides – Addison-Wesley Professional, 1994 – 416 p.

Head First Design Patterns [principianti e chi ha già pratica]

E’ questa un’alternativa al libro precedentemente introdotto. Presenta e descrive una serie di design pattern con un approccio decisamente diverso, meno serioso e più informale. Tutto è trattato per mezzo di esempi concreti e per mezzo di “annotazioni”, piuttosto che prolisse descrizioni testuali. Io sinceramente ho preferito il GoF (forse perchè l’ho letto prima e quindi gran parte dei contenuti non mi erano nuovi, in questo caso), ma siccome so che molti lo ritengono ostico e che il mio collega Stefano Valle si è trovato molto bene con questo libro, ho pensato di includerlo nell’elenco. Effettivamente, rispetto al libro della GoF è meno ermetico, dato che non solo elenca i pattern e i casi d’uso, ma si sofferma anche alle caratteristiche che li rendono adatti (o meno) ai diversi contesti di possibile impiego.  Lo considero una valida alternativa, forse più semplice ed esplicativa, rispetto al precedente.

Head First Design Patterns – E. Freeman, E. Freeman, B. Bates, K. Sierra, E. Robson – O’Reilly Media, 2004 – 688 p.

Patterns of Enterprise Application Architecture [chi ha già pratica ed esperti]

Nei due libri precedentemente introdotti vengono trattati design pattern, che tipicamente hanno ambito di applicazione circoscritto, tra una o più classi di un’applicazione, ma tipicamente non riguardano l’architettura generale della stessa, nel suo insieme. Questo libro tratta invece i pattern a livello architetturale, ed è diviso in due parti: nella prima c’è una guida che raccoglie i principi generali per lo sviluppo di applicazioni complesse; nella seconda c’è una referenza dettagliata ai vari pattern trattati, anche con esempi implementativi (in Java o C#). Nel concreto, il libro tratta alcuni importanti argomenti quali la suddivisione di un’applicazione in livelli (concetto second me fondamentale), i diversi approcci per l’organizzazione della business logic, possibili approcci per il mapping tra relazionale (database) e object oriented (codice) e, non ultimo, il pattern MVC (fondamentale per chi sviluppa su web). E’ questo un testo che consiglio a chiunque voglia approfondire le proprie conoscenze, ed essere in grado di progettare un’applicazione ben strutturata.

Patterns of Enterprise Application Architecture – M. Fowler – Addison-Wesley Professional, 2002 – 560 p.

Refactoring – Improving the Design of Existing Code [per tutti]

Se un’applicazione riscontra successo, questa andrà manutenuta ed auspicabilmente estesa. Non sempre sono questi facili task, d’altronde. Un’applicazione potrebbe essere scritta male, magari non da noi e perciò, prima ancora che modificarla o esternderla, può risultare difficile anche comprenderla. Simili situazioni non devono essere tollerate, ed è opportuno procedere con il cosiddetto refactoring, ovvero il miglioramento del codice esistente, così da rendere l’applicazione più manutenibile e controllabile (meno soggetta a bachi). E’ necessario che il mito de: “fin che funziona non si tocca” venga sfatatu, dato che è questo – a parere di chi scrive – un preoccupante indice di possibile fallimento di un progetto, dal principio. In questo libro sono contenuti un elenco di “bad smells“, ovvero indicatori di candidati per il miglioramento, nonchè una serie di “ricette” per far fronte a tali problemi. Insomma… se un’applicazione vi fa impazzire, avete paura ogni volta che ci mettete sopra le mani e non avete mai letto questo libro, consiglio di farlo ora!

Refactoring: Improving the Design of Existing Code – M. Fowler, K. Beck, J. Brant, W. Opdyke, D. Roberts – Addison-Wesley Professional, 1999 – 464 p.


Libri specifici sul Linguaggio PHP

Considero il sito del linguaggio (http://www.php.net), un’ottima fonte per imparare i costrutti, le funzioni e le caratteristiche principali dello stesso. Può certamente essere utile accostare qualche libro che tratti il tutto in maniera più organica, magari enfatizzando e portando al PHP i concetti presentati dai libri sopra introdotti. Ecco un elenco di testi con tali caratteristiche:

PHPObjects, Patterns and Practice – 3rd Edition [principianti e chi ha già pratica]

E’ questo probabilmente IL libro che consiglierei se mi venisse chiesto il miglior libro per imparare il PHP, sia per chi ha già esperienza di sviluppo in altri linguaggi, sia per chi non ce l’ha. Zandstra è infatti secondo me molto chiaro. Presenta dapprima le caratteristiche del PHP ad oggetti moderno, passando poi in rassegna tutta una serie di pattern e buone pratiche per scrivere applicazioni facilmente manutenibili, e fornendo infine tutta una serie di consigli su come condurre opportunamente un progetto in PHP. Penso che principianti e non esperti potrebbero essere quelli cui la lettura di un simile libro gioverebbe di più, ma so che diversi esperti lo utilizzano anche come referenza.

PHP Objects, Patterns and Practice – M. Zandstra – Apress, 2010 – 536 p.

Guide To Building Testable Applications in PHP [chi ha già pratica ed esperti]

Un libro questo assai breve (meno di 60 pagine) ma incredibilmente omnicomprensivo. Può essere letto in un paio d’ore, ma riesce a mettere in evidenza una serie innumerevole di validissimi consigli, legati sia alla struttura di un’applicazione, sia alle metodologie di sviluppo e deployment. Sono fornite indicazioni, anche attraverso snippet di codice e referenze, di quelle che sono le best practices comunemente accettate per una buona architettura software e un buon processo di sviluppo. E’ un libro che consiglio sicuramente, e rimando ad apposita recensione per ulteriori informazioni in merito.

The Grumpy Programmer’s Guide To Building Testable Applications in PHP – C. Hartjes – Leanpu, 2012 – 56 p.

Practical PHP Testing [principianti e chi ha già pratica]

Scritto dall’amico Giorgio Sironi, questo libro – gratuitamente scaricabile – permette di mettere in pratica i consigli della “Guide To Building Testable Applications in PHP” attraverso un’introduzione al TDD (Test Driven Development) e a spiegazioni passo passo sull’utilizzo di PHPUnit per l’esecuzione dei test unitari. E’ molto semplice da seguire e veloce da leggere (60 pagine circa). Permette di essere subito operativi con PHPUnit e quindi di migliorare immediatamente la qualità del proprio codice. Lo consiglierei anche se non fosse gratuito; per come stanno le cose, direi che è invece da considerarsi peccatore lo sviluppatore che non lo legge, pur non essendo già esperto della materia trattata.

Practical PHP Testing – G. Sironi – 2009 – XXX p. 61

Zend PHP 5 Certification Study Guide [per tutti]

E’ questo un libro corto, che si legge in poco tempo. Confesso che mi ha lasciato parecchio perplesso quale guida per la preparazione all’esame di certificazione Zend (vedasi mia recensione su Amazon), ma che ho comunque trovato interessanti molti dei contenuti qui presentati. Ci sono spunti interessanti sull’implementazione del linguaggio, sul trattamento delle stringhe, sugli array e sulla manipolazione di XML, oltre che sugli Stream e la programmazione di rete. Sono a parer mio considerazioni interessanti, che possono velocizzare lo sviluppo ed evitare errori a volte inspiegabili, anche se mancano le fondamentali novità introdotte da PHP 5.3. Sicuramente è un libro che sconsiglio quale strumento per la preparazione all’esame di certificazione Zend, e che consiglierei comunque solo DOPO aver letto gli altri libri in questa lista.

php|architect’s Zend PHP 5 Certification Study Guide – D. Shafik, B. Ramsey – Marco Tabini & Associates, Inc., 2009 – 292 p.

php|architect’s Guide to PHP Security [chi ha già pratica]

Scritto dal padre del PHP, Rasmus Lerdorf, nonchè da Alshanetsky, uno dei più esperti per ciò che riguarda la sicurezza in ambito PHP, è questo un libro che considero molto importante, ma forse anche troppo ermetico, per certi versi. Contiene infatti numerosissimi concetti e spunti, ma anche errori (anche nel codice) e assunzioni, che lo rendono non sempre d’immediata comprensione. E’ comunque una referenza che reputo indispensabile e di cui soprattutto uno sviluppatore con esperienza potrebbe trarne parecchio vantaggio. I concetti presentati vanno infatti acquisiti e poi portati nel mondo reale attraverso le proprie conoscenze pregresse; non si sono esempi concreti, di cui è possibile fare “copia/incolla”.  Per un principiante, è insomma sicuramente utile leggere gli altri libri di quest’elenco, prima di cimentarsi con questo testo. Detto ciò, è anche vero che nel 2010 è uscita la seconda edizione di Pro PHP Security. Non l’ho personalmente ancora letto, ma ho ricevuto feedback molto positivo, e mi è stato detto essere di più immediata comprensione rispetto a questo, e quindi forse più adatto per i principianti, che vogliono partire con il piede giusto dal punto di vista della sicurezza (cosa comunque mai trascurabile!)

php|architect’s Guide to PHP Security – I. Alshanetsky, R. Lerdorf –  Marco Tabini & Associates, Inc., 2005 – 200 p.

Pro PHP Refactoring [per tutti]

Confesso di non aver ancora letto questo libro e di basare la mia inclusione sulle testimonianze di terze parti. Avendo citato il libro di Fowler sull’argomento, mi è comunque sembrato opportuno citare anche questo testo, dato che può permettere di cogliere i suggerimenti di Fowler, applicandoli direttamente nel contesto di uso quotidiano e quindi, credo, favorendo l’apprendimento. Tra l’altro, anche in questo caso il libro è scritto da due connazionali, i membri del Grusp Franchesco Trucchia e Jacopo Romei. Qualche amico madrelingua si è lamentato dell’opera di editing per l’inglese non sempre impeccabile, ma ritengo che gli italiani non dovrebbero avere alcun problema di comprensione, e anzi potrebbero rendersi attivamente partecipi nella diffusione di simili iniziative e conseguentemente della diffusione della cultura di sviluppare buon software nel nostro paese. Cosa di cui ci sarebbe parecchio bisogno!

Pro PHP Refactoring with Test Driven Design – F. Trucchia, J. Romei – Apress, 2010 – 350 p.

Info su steve

@maraspin - Ingegnere dell'informazione, appassionato di PHP dai tempi di PHP/FI, Stefano Maraspin è PHP 5 Zend Certified Engineer. Managing partner di M.V. Associati, s'interessa di di User Centered Development e progettazione di Architetture Software, soprattutto negli ambiti del commercio elettronico e dei sistemi distribuiti. Il tempo libero è sempre troppo poco.
Questa voce è stata pubblicata in articoli e contrassegnata con , , , , , , , , , . Contrassegna il permalink.

I commenti sono chiusi.