Dieci buoni motivi per non utilizzare PHP

Posted on Thu 09 October 2008 in Programmazione • Tagged with difetti, linguaggi, php, Programmazione

php logo

Quando in questi giorni ho appreso la triste notizia che il progetto da consegnare per l'esame di Laboratorio di Reti avrebbe dovuto essere realizzato in PHP, sono stato preso un po' dallo sconforto.

Per anni mi sono sempre rifiutato di imparare ed utilizzare questo linguaggio ed ho persino declinato diverse offerte di lavoro, visto che già sulla carta ne avevo sempre sentito parlare male. Adesso è arrivato il momento di ingollare il rospo ed imparare almeno il minimo indispensabile alla realizzazione del progetto.

Ho approfittato della situazione per documentarmi un po' sul PHP e per ribadire alcuni motivi che per anni mi hanno tenuto lontano da questo linguaggio. I punti che seguono prendono spunto sia da considerazioni personali, sia da un ottimo articolo di Edwin Martin.

1. Ricorsione?! Chi era costei...

La ricorsione, come molti di voi sapranno, è un meccanismo che permette ad una funzione di chiamare se stessa. Viene impiegata nell'implementazione di moltissimi algoritmi, come ad esempio il Quick Sort. Se vengono generate troppe chiamate ricorsive in PHP, il linguaggio va letteralmente in palla e non funziona piu' correttamente. Questa cosa è stata segnalata come bug e la motivazione che è stata data dagli sviluppatori è che PHP utilizza lo stack al posto dell'heap per le chiamate ricorsive. Questo cosa c'entra? Mi viene da chiedere... eppure in altri linguaggi la ricorsione funziona benissimo!

2. Molti moduli PHP non sono thread safe

Anche se tutti i moduli del core di PHP sono garantiti thread safe, la maggior parte degli altri moduli non lo sono. Questo rende completamente inutile il fatto che Apache 2 supporti la modalità multithreaded: gli sviluppatori di PHP sconsigliano pure di utilizzare questa versione di Apache.

3. PHP è azzoppato per motivi commerciali

Vi sembra che PHP sia un po' lento? Non avete provato la versione commerciale di Zend PHP, che garantisce maggiori prestazioni! La versione gratuita di PHP infatti non ha alcuna ottimizzazione e a meno di non utilizzare un qualche meccanismo di cache (come ad esempio APC) le prestazioni saranno basse.

4. Nessun supporto ai Namespace

Se due moduli hanno una funzione che si chiama read, non possono essere utilizzati contemporaneamente. Era stata proposta una soluzione a questo problema in PHP5, ma alla fine non è stata inclusa nella release definitiva. L'unico modo per evitare la collisione dei nomi dei metodi è quello di nominarli aggiungendo il nome del modulo all'inizio. Ecco perchè non è strano trovare metodi che ad esempio si chiamano xsl_xsltprocessor_transform_to_xml che di sicuro non aumentano la leggibilità del codice.

5. Caratteri di formattazione delle date non standard

La maggior parte dei linguaggi di programmazione utilizza uno standard per quanto riguarda i caratteri di formattazione delle date, che deriva da Unix e dal linguaggio C. PHP utilizza un proprio formato, completamente incompatibile.

6. Inconsistenza nei nomi delle funzioni

Quando i nomi dei metodi contengono piu' di una parola, solitamente ci sono tre modi diversi per poterli scrivere. Prendiamo ad esempio un'ipotetica funzione che restituisce il numero dei file aperti. Potremmo chiamarla getnumberofopenfiles, get_number_of_open_files oppure getNumberOfOpenFiles. Quale metodo utilizza PHP? Tutti e tre ovviamente! Oltre a questo è opportuno far notare che i nomi dei metodi e delle funzioni non sono case sensitive.

7. Assenza di un framework integrato

Il modello piu' corretto per sviluppare un'applicazione web, sarebbe quello chiamato MVC, dove la parte di visualizzazione, la business logic e la validazione dei dati ed infine l'interazione con il database, sono parti separate del progetto.

Nella maggior parte dei siti scritti in PHP è molto comune trovare sorgenti che includono tutti e tre questi aspetti in un unico file! Poche righe sopra viene fatta la connessione al database, poi c'è una parte di visualizzazione di alcuni dati, verso la metà ci sono le funzioni di validazione ed infine di nuovo altro codice html di visualizzazione. Credo che questo sia il peggiore dei modi di realizzare un'applicazione web. Pensate che sia facile per un grafico dover apportare modifiche alla parte di visualizzazione senza toccare il codice PHP? E viceversa... pensate che sia facile per un programmatore, aggiungere codice PHP senza rischiare di scombinare il layout della pagina?

Altri linguaggi con Ruby o Python ci hanno ormai abituati a framework come Rails e Django, rispettivamente. Per fortuna le cose sono in miglioramento anche su PHP, grazie a framework come CakePHP o Symfony.

8. Mancanza del supporto Unicode

Questa lacuna forse potra' non riguardarci da vicino, visto che il set di caratteri che utilizziamo in Europa ed in America è ampiamente supportato, ma non è certo così per Cina, Giappone ed altre nazioni dove viene utilzzato un set di caratteri e di simboli molto diverso dal nostro. Tramite Unicode è possibile supportare anche questi caratteri. PHP avrà il supporto per Unicode solo nella futura versione 6.

9. Lentezza

Pensate che il Java sia un linguaggio lento? Beh, niente a confronto di PHP! Leggendo questo report si mettono in evidenza le scarse prestazioni di questo linguaggio. Persino Rasmus Lerdorf, il creatore di PHP ammette che non c'è modo di migliorare le prestazioni di PHP. Rasmus tra l'altro sconsiglia persino l'utilizzo dei frameworks sopra citati (CakePHP e Symfony) perchè rallenterebbero inutilmente le prestazioni dei siti web.

10. Estrema facilità di utilizzo

Ammetto che questo ultimo punto possa essere non condiviso da molte persone, si tratta infatti di una mia personalissima opinione. Il fatto che un linguaggio di programmazione sia troppo facile da usare, secondo me puo' presentare anche degli svantaggi. Permette infatti anche a chi ha scarse conoscenze di programmazione, di cimentarsi in progetti, con il rischio poi di far abbassare notevolmente la qualità del codice che si trova in giro. Non è difficile infatti imbattersi in programmi scritti in PHP che all'apparenza possono risultare gradevoli ed accattivanti (magari perchè scritti da persone che principalmente si occupano di web design), ma che sotto sotto sono dei veri e propri pastoni di codice mal scritto.

Conclusioni

A favore di PHP possiamo sicuramente dire che si tratti di un linguaggio molto semplice da imparare ed ampiamente supportato dalla maggior parte dei servizi di hosting in tutto il mondo. A parte queste due motivazioni però, non mi sentirei in alcun modo di consigliarlo per sviluppare un'applicazione web.

Sicuramente qualcuno mi fara' notare che lo stesso blog sul quale sto scrivendo è scritto in linguaggio PHP. Per l'utilizzo che ne devo fare, Wordpress va piu' che bene, almeno per le mie esigenze. Questo non toglie che PHP soffra ugualmente di tutti i problemi che sono stati esposti sopra.

E' mia intenzione che questo articolo sia di avvertimento a chi si sta per avvicinare per la prima volta al PHP o chi già lo utilizza. Ci tengo però al fatto che non contenga imprecisioni, perchè credo che servirebbero solo a screditare la natura stessa dell'articolo. Invito quindi i lettori che rilevassero imprecisioni a segnalarmele, indicandomi dove poter trovare maggiori informazioni per verificare la validità di quanto riportato.


Agile Web Development with Rails: imparare Rails 2.x

Posted on Thu 05 June 2008 in Programmazione, Ruby, Ruby on Rails • Tagged with agile, libro, manuale, Programmazione, rails, Ruby, Ruby on Rails, web development

Rails3

Chi volesse cimentarsi nell'apprendimento del framework per lo sviluppo web Rails, troverà al momento, a parte qualche tutorial qua e la, solo manuali che trattano la versione 1.2 di Rails.

Da fine dicembre 2007 è uscita la versione 2.0 e da pochi giorni la 2.1. Le modifiche al framework e le differenze nella stesura del codice sono così numerose da aver interrotto la compatibilità con la versione precedente.

Per esperienza personale, avevo installato la versione 2.0.2 di Rails, seguendo un manuale che purtroppo era basato sulla 1.2. Ad ogni capitolo qualcosa non funzionava (rispetto a quanto spiegato nel libro) ed ero costretto a ricorrere a Google oppure ai forum dedicati per chiedere spiegazioni.

A quel punto mi sono chiesto: ma non esiste un libro che sia basato su Rails 2.x ?! Per fortuna, dopo una breve ricerca ho scoperto l'esistenza di questo fantastico manuale: Agile Web Development with Rails, Third Edition.

Il libro non è ancora stato rilasciato in versione definitiva, tanto che uscira' d ottobre 2008. Come fare ad averlo in anteprima? Gli autori mettono a disposizione (a prezzo piuttosto ridotto) la versione beta in formato PDF e permettono di pre-ordinarela versione cartacea. Una volta acquistata la versione in PDF (al prezzo di circa 15€, grazie al cambio favorevole euro/dollaro) si ha diritto a tutti gli aggiornamenti che vengono rilasciati (ogni 2 o 3 settimane circa)  ed alla versione definitiva del PDF quando verrà rilasciato il libro ad Ottobre.

Per quello che posso dirvi, soprattutto avendo iniziato a leggere un manuale analogo che trattava la versione 1.2, si tratta di un ottimo prodotto che, anche se in versione beta, è praticamente pronto per essere studiato con estremo profitto. Quasi tutti i capitoli sono stati già rivisti e quindi ripensati per la sintassi e le funzionalità di Rails 2.x, in particolare quelli che trattano ActiveRecord.


Installare le Qt 4.4.0 su Ubuntu Linux 8.04

Posted on Thu 08 May 2008 in Linux, Programmazione, Qt, Ubuntu (IT) • Tagged with 4.4.0, hardy, installazione, librerie, multipiattaforma, Programmazione, Qt, sviluppo, Ubuntu (EN)

QtLogo

Da pochi giorni la Trolltech ha rilasciato la versione 4.4.0 delle proprie librerie multipiattaforma Qt. La versione corrente di Ubuntu (la 8.04) contiene al momento le librerie Qt nella versione 4.3.4.

Gli sviluppatori che utilizzano le Qt potrebbero voler installare l'ultima release delle librerie, per testare le nuove funzionalità o per verificare il funzionamento di una propria applicazione con questa particolare versione.

La buona notizia è che non c'è bisogno di scaricarsi i sorgenti delle Qt 4.4.0 e ricompilarli, perchè il team di Ubuntu ha già preparato i pacchetti per la Ubuntu Hardy.

Per installarli è necessario abilitare il repository chiamato hardy-backports andando suSystem->Administration->Software Sources.

A questo punto la versione 4.4.0 dovrebbe essere disponibile tra gli aggiornamenti di sistema. Basterà quindi un apt-get upgrade per procedere all'aggiornamento.


PyCon2: conferenza italiana dedicata al linguaggio Python

Posted on Sun 06 April 2008 in Linux, Programmazione, Python • Tagged with conferenza, firenze, italiana, linguaggio, Programmazione, pycon, pycon2, Python, sviluppatori

Python

PyCon Due

è la seconda conferenza italiana dedicata al linguaggio di programmazione Python. La conferenza è organizzata da un gruppo di appassionati e senza finalità di lucro; si prefigge la divulgazione di Python, e di dare visibilità agli sviluppatori professionisti, studenti, aziende e semplici interessati al linguaggio.

Dove e quando

La conferenza si tiene a Firenze nelle giornate di Venerdì 9, Sabato 10 e Domenica 11 Maggio. L'evento di apertura si terrà a Palazzo Vecchio nel pomeriggio di Venerdì, durante il quale terrà un keynote Richard Stallman. Sabato e Domenica, al Viva Hotel Laurus (Via Cerretani 54/r), nei pressi del Duomo, si svolgeranno 3 track parallele di conferenze.

Gli Interventi

Durante la conferenza si terranno due tipi di interventi: i keynote ed i talk.

I keynote sono interventi di ampio respiro che trattano temi di attualità del mondo dell'informatica; hanno una durata indicativa di 90' e verranno tenuti in occasione dell'evento di apertura di venerdì 9 ed alla chiusura delle due giornate successive.

I talk

sono invece interventi focalizzati su un particolare argomento; hanno una durata indicativa di 45', comprensivi del tempo per le domande del pubblico. I talk di PyCon Due si tengono durante le giornate di sabato 10 e domenica 11, e si dividono in tre track: "Scoprire Python", "Diffondere Python" e "Imparare Python":

  • Scoprire Python è una track introduttiva su librerie, framework e metodologie, pensata per chi si sta avvicinando al Python o desidera una prima trattazione di un argomento;
  • Diffondere Python è una track dedicata ad aspetti più avanzati del linguaggio, esempi di integrazione della piattaforma e casi d'uso in azienda;
  • Imparare Python è una track interattiva: i talk sono parzialmente guidati dal pubblico, che discute la trattazione dell'argomento insieme al relatore, proponendo scenari e commentando le soluzioni proposte.

Registrazione

per partecipare all'evento occorre registrarsi. La registrazione puo' essere fatta direttamente sul sito ufficiale del PyCon2. Sempre sul sito ufficiale, potrete trovare a breve l'elenco delle conferenze che verranno fatte, non appena si concluderanno le votazioni per il Call For Paper che sono in corso in questi giorni.