Java, Php et Ruby sont dans un bateau
Publi� le 26 février 2006

Cet article est ma réponse au commentaire d'Aurélien. Il méritait une réponse développée.

La conclusion est celle-ci : JAVA est profilé pour le développement de logiciels (dits clients lourds) alors que PHP l'est pour le développement d'applications web (dites clients légers). La conception de logiciels et de sites web n'ont ni la même philosophie, ni la même problématique.

A mon avis, les défauts de l'un sont les qualités de l'autre :

-  JAVA est trop rigide dans sa structure et PHP sans doute trop souple [1]
-  JAVA est trop lourd mais se charge une fois [2] et PHP léger mais se charge à chaque fois mais c'est un faux débat à cause des produits de Zend et de la MVM
-  JAVA est réputé pour convenir particulièrement aux grosses applications d'entreprises. Disons que la légèreté de PHP convient aux applications web alors que le domaine de JAVA est plutôt le logiciel. PHP n'est pas adapté à la création de logiciels.
-  Les applications JAVA occupent beaucoup de mémoire [3]. PHP se contente de 8 Mo, voire 16 Mo par script.
-  JAVA produit des logiciels robustes et maintenables alors que le modèle de programmation de PHP convient là où les ressources sont fortement sollicitées.
-  Contrairement à PHP, la verbosité du code JAVA est très importante.
-  JAVA dispose d'environnements de développement (IDE) industriels (eclipse, etc.) alors que le débogage grâce à un environnement en PHP est quasiment impossible sauf à acquérir une licence de [ !Zend Studio]. [4].
-  Les navigateurs pouvant être qualifiés de client léger, JAVA ne convient à aucun site web, tout comme PHP ne convient à aucun logiciel.
-  Le modèle objet de JAVA est puissant et plaît particulièrement aux développeurs. Il paraît opaque aux autres acteurs de la conception alors que n'importe lequel d'entre eux peut rapidement avoir des notions de PHP et ne sera pas rebuté par un peu de PHP dans sa belle page XHTML.
-  Les développeurs JAVA pensent que la problématique du développement s'arrête à la création d'interfaces homme-machine alors que les développeurs PHP s'appuient sur les graphistes pour avoir des gabarits ergonomiques et conviviaux.
-  JAVA s'applique aux logiciels de gestion, lesquels ne servent qu'à accomplir les tâches dévolues à un métier alors que PHP est un support pour réaliser des vitrines de vente de produits, de la publicité, de la communication - et sert aussi à développer des applications web de gestion ...
-  Le format XML est LE SEUL format de prédilection de JAVA alors que PHP a les microformats plus souples ou des langages de templates.
-  JAVA et les méthodes de conception basées sur UML conviennent lorsqu'une application doit être maintenue très longtemps. Les développeurs PHP pensent que la pérénité n'est plus de ce monde et qu'une application up to date aujourd'hui, peut devenir obsolète le lendemain de sorte qu'il faut sans cesse suivre le mouvement.
-  Les applications JAVA sont utilisées par les grands éditeurs et intégrateurs pour de gros clients alors que les applications PHP sont populaires.
-  JAVA requiert de gros serveurs lorsque les ressources sont très sollicitées alors que PHP est taillé pour cela par défaut. C'est pourquoi on ne trouve pratiquement aucun hébergeur gratuit pour les applications JAVA alors qu'il y en a pléthore pour PHP. C'est ce qui a fait la popularité de PHP.
-  La documentation en ligne de JAVA est standard et gérée par Sun. Elle est très peu documentée (pas d'exemples [5]). Celle de PHP contient souvent des exemples et de plus, est ouverte aux commentaires, ce qui offre la possibilité d'approfondir l'usage d'une fonction.
-  JAVA promeut la séparation de l'interface, de la logique et des données (MVC), ce qui conduit les programmeurs à ajouter couche sur couche [6] donc à engendrer le risque pour un autre développeur qui reprend l'application de plus savoir à quel framework se vouer. Avec les [ !taglibs] par exemple, on peut générer une infinité de langages XML comme [ !hybernate] ou [ !spring]. PHP ne propose aucun framework mais a fait la promotion de PEAR et travaille actuellement sur la création d'un framework du type de celui de RoR.
-  Les développeurs JAVA parlent souvent de méthodologie qui dans les faits s'avère être lourde et est une charge supplémentaire à gérer (ex : tout faire en UML avant de coder) dont il faut assurer la pérénité [7].
-  JAVA est présent dans les technologies embarquées (mobile, etc.). PHP non.
-  Certaines classes JAVA (String, etc.) ont des méthodes très limitées. Ce qui oblige les développeurs à créer leur propre classe utilitaire pour ajouter des méthodes manquantes. Tandis que pour PHP, toute la gestion des chaînes est fournie en standard. C'est un risque de complexité technologique de moins.

Les clients légers basés sur un navigateur devraient se développer au détriment du logiciel de bureau ou client/serveur, d'autant plus qu'on arrive maintenant grâce à des technologies émergentes (AJAX) à simuler le comportement d'une interface logicielle.

La JVM ne nécessite pas de recompiler les programmes même lorsque ceux-ci sont anciens [8]. Pour PHP, encore moins puisque qu'il a une compatibilité ascendante.

La JVM a beaucoup évolué grâce au compilateur JIT natif qui est très récent et livré uniquement avec le JDK [9]. Les applications PHP5 sont beaucoup plus rapide que PHP4 [10].

Je suis d'accord avec çà :

PHP est une techno simple, efficace et performante qui répond à un besoin. Je ne me fait pas non plus de soucis pour java qui bien que plus complexe répond à d'autres besoins. En fait aucune techno émergeante ne peut se développer de manière importante et remplacer les technos actuelles s'il n'y a pas un nouveau besoin à combler.

Par contre pour s'améliorer php comme java ou .net feraient bien de regarder ce qui se passe à côté.

Et pour avoir aussi mis le nez dans le code de SPIP, oui le code de dotclear est propre !

Mais SPIP n'est pas vraiment basé sur de l'objet même s'il l'utilise pour ses structures internes. Ce qui n'empêche pas SPIP d'être organisé. Il suffit de voir le nom des fichiers. En général, il n'y a qu'un fichier par domaine/objet et la logique est contenue dans les fichiers .inc.

Par contre je ne m'amuserais pas à bâtir le système d'information complet d'une entreprise que je dois maintenir et faire évoluer pendant des années sur la base de PHP.

Tout dépend de ce que l'on entend par Système d'Information. De mon expérience, c'est un ensemble de données et de logiciels incohérents que l'on arrive difficilement à faire marcher ensemble et JAVA comme d'autres langages n'y peut rien à lui tout seul.

On dit que c'est une erreur de comparer JAVA à PHP. Il faudrait comparer JSP et PHP. Mais JSP (Java Server Pages), c'est JAVA à la base, donc ...

On en reparle dans le prochain billet qui est en train de mijoter.

J'ai hâte ! ;-)


[1] On peut mêler allègrement l'objet et le procédural dans PHP. Mais c'est un faux débat car on peut aussi coder mal en ayant une mauvaise structure objet, voire faire du pseudo-procédural en JAVA.

[2] à cause que le framework complet doit résider en mémoire

[3] En temps normal, 100 Mo est un minimum.

[4] Dans les faits, l'utilisation d'un débogueur professionnel n'est pas indispensable pour PHP car sa gestion d'erreurs est des plus simplistes. L'interprétation s'arrête précisément à la ligne où se produit l'erreur tandis que pour JAVA c'est autre chose. Le débogage des JSP est très lourd. Le serveur de JSP (en général Tomcat) produit une page entière d'erreurs dans laquelle il faudra identifier la source exacte de l'erreur (en général en fin de fichier). Souvent ces messages sont innefficaces car du au fait que les JSP sont automatiquement compilées par le serveur, les numéros de lignes sont incorrects et on a pas d'erreur explicite en cas de pointeur nul (variable non initialisée).

[5] De ce fait, elle est très peu adaptée aux débutants.

[6] Jusqu'à ce que le mot unifié ne veuille plus rien dire en JAVA.

[7] En fait, le taux d'obsolescence de l'architecture est souvent similaire à celui du logiciel.

[8] Cà c'est de la théorie, çà reste à voir.

[9] Ce qui veut dire que JAVA est rapide seulement si le JDK est installé. Ce qui n'est pas le cas sur les postes de travail utilisateur.

[10] On trouve plusieurs benchmarks

Forum de l'article

# 95 Java, Php et Ruby sont dans un bateau 27 février 2006, par Aurélien

Je poursuis le débat ici, la déco est sympa. Mais le contenu... j'ai 2, 3 remarques à faire.

PHP est sans aucun doute orienté développement de page web, personne ne penserait à s'en servir pour autre chose et c'est sa spécialisation qui fait sa force.

Mais dire que Java est profilé pour le développement de logiciel c'est faux. Java n'est pas juste un langage de programmation mais une plate forme de développement complète qui n'est spécialisé dans aucun domaine mais vise à traiter de manière homogène le plus large éventail de difficultés. Ce qui présente des avantages et des défauts.

Ce que tu présentes comme les qualités ou défauts de l'un ou de l'autre ne sont pas, pour la plupart, des caractéristiques propres à l'outil, PHP ou java, mais des manières de s'en servir. Tes oppositions à java sont principalement d'ordre méthodologique. La question que tu poses est : Quelle est la meilleure manière de faire un site web ? Je te ferais une réponse de consultant : ça dépend.

# 99 Java, Php et Ruby sont dans un bateau 28 février 2006, par Frédéric

En fait, PHP peut aussi servir à développer des logiciels.

Pourquoi dis-je que JAVA se destine plutôt au dev. de logiciels ? parce qu'il est lourd. Non seulement JAVA est lourd - et [ !Sun] a plutôt tenté ces derniers temps de simplifier ses structures - mais la plupart des outils plus ou moins libres qui tournent autour de JAVA sont lourds également comme l'IDE Eclipse.

En réalité, mes oppositons à JAVA sont d'ordre "idéologique" mais toi aussi même si tu ne t'en rend pas compte ;-).

Ayant fait un passage en agence web, je peux te dire que ce n'est pas le consultant qui propose des solutions, pas tout seul en tout cas. Dans la conception de l'application web interviennent le client/commercial/graphiste/intégrateur/référenceur/développeur pour le bénéfice du client. Le web ce n'est pas de l'informatique "pure". Voilà pourquoi JAVA et consorts n'est pas "suitable" au web.

# 106 Java, Php et Ruby sont dans un bateau 21 mars 2006, par Frédéric

Cet article va encore plus loin concernant les langages [1] dont la phisolophie promeut l'architecture AVANT le code :


-  si vous employez des architectes, mettez les à programmer 4 jours sur 5 afin qu'ils écrivent du code qui serve
-  si vous avez une nouvelle architecture, testez-là avec un prototype
-  si vous avez besoin d'inventer de nouveaux mots et acronymes pour expliquer votre architecture, retournez coder
-  si vous n'êtes pas capable de décrire votre architecture en 60 sec, retournez coder. si les personnes ont besoin d'un dictionnaire, contribuez gratuitement pendant un mois
-  ne formez jamais de comité
-  n'inventez pas de cas d'utilisation. si aucun ne le fait actuellement, il ne le fera pas demain non plus
-  ayez au moins 2 histoires "véritables" qui disent comment l'installation, l'utilisation et le débogage de votre application est facile

Il faut noter qu'il est plutôt partisan -D

Poster un message

[1] SOAP dans ce cas