{

Java vs PHP

Ho quasi sempre sviluppato in Java per lavoro e lo sviluppo in php è relativamente recente; mentre lo studio del php e le prime piccole cose sono state sviluppate molti anni fa, un lavoro sistematico mi prende ormai da più di un anno. Credo quindi di poter dire la mia su questi due linguaggi.

Nel tentativo di arrivare subito al dunque, se qualcuno mi dovesse chiedere un consiglio su quale dei due adottare, la risposta sarebbe: java per progetti di una certa rilevanza, php per siti e progetti relativamente piccoli (anche perché l'hosting in php è decisamente più economico).

Se però a chiedermelo dovesse essere un neofita che vuole imparare a programmare indicherei senza dubbio java. La sintassi è relativamente semplice, ma in generale il mondo che ruota intorno a java è più complesso. Ciononostante programmando in php si ha la tendenza a generare confusione, per esempio inserendo troppo spesso nella stessa pagina la logica di business, le query al database e come i dati vengono presentati.
Anche Drupal, CMS molto rinomato scritto in php, scrive direttamente HTML come output di alcune funzioni. Ha una buona logica di separazione consentendo di creare temi grazie a template, ma non per tutto.
La separazione tra logica, dato e visualizzazione è secondo me fondamentale per la manutenibilità di un progetto. Se questo requisito non viene soddisfatto mettere mano ad un progetto per modifiche anche piccole può diventare un inferno.

Dal punto di vista strettamente formale i due linguaggi sono menzionati sotto il cappello di linguaggi interpretati, ma con una sostanziale differenza: Java è interpretato staticamente, mentre php è interpretato dinamicamente.
Java infatti per essere interpretato deve prima essere compilato (comando javac) e poi può essere eseguito.
Come prima fondamentale conseguenza ci sono casi in cui riscontri un errore in php solo quando ci vai a sbattere il muso.

L'interpretazione statica di Java è possibile perché il linguaggio è fortemente tipato, non è possibile cioè definire una variabile senza prima aver dichiarato di che tipo si tratta.
In php le dichiarazioni delle variabili sono molto libere ed è possibile modificare il tipo di una variabile in qualsiasi momento riassegnandola.

Esempio:
(java)
String s = "mia stringa";
s = 2; //errore di compilazione

(php)
$s = "mia stringa";
$s = 2;//l'interprete non va una piega

Per questo motivo in php, non essendo fortemente tipato, esiste il simbolo di confronto === che, oltre a confrontare i valori, confronta anche il tipo.

Sempre come conseguenza della struttura dinamica di php le funzioni quasi mai hanno un solo tipo di ritorno.
Per esempio la funzione mysql_connect restituisce false in caso la connessione non sia andata a buon fine, altrimenti restituisce void (niente).

Dal punto di vista delle performance, aspetto sul quale java viene spesso criticato per la (presunta) richiesta eccessiva di risorse, ci sono benchmark in rete secondo cui può valere il contrario.
Non sto qui a difendere l'uno o l'altro, mi viene solo da dire che ormai la RAM non credo sia più un problema per nessuno e comunque non esiste linguaggio di programmazione che possa migliorare un cattivo programmatore.
Se da un lato facebook ha dovuto creare un framework per ottenere codice C dal php per risolvere i suoi problemi di performance, è anche vero che non abbiamo riscontri opposti per carico di lavoro che ci possano dire come si sarebbe comportato java nelle stesse condizioni.

Per quanto riguarda la creazione dei costrutti base non ho riscontrato eccessive differenze se non le la possibilità di creare facilmente array associativi in php, che in java sono implementazioni di java.util.Map. Nello specifico php si comporta come fossero array per cui, per esempio, ciclare sulle chiavi è immediato, mentre in java devi prima estrarre il Set delle chiavi e poi ciclare sui suoi valori. Come vedete è ben poca roba.

Infine java è un linguaggio Object Oriented, mentre la struttura ad oggetti di php è, secondo me, un po' forzata, forse perché introdotta solo successivamente.

Non volendo la mia essere una trattazione esaustiva e completa mi fermo qui, sappiate semplicemente che non mi faccio problemi a programmare con nessuno dei due, anzi :)

Realizzato con Drupal, un sistema open source per la gestione dei contenuti