Après avoir discuté du cas Python vs. Java en ce qui concerne la réalisation de tiers métier, nous allons, dans cet article, comparer les qualités respectives de Python et de PHP en ayant en point de mire la réalisation de tiers de présentation web.
Avant la publication de la première version de Django en 2008, PHP restait le seul moyen de construire des applications web ou des sites dynamiques en utilisant un langage compréhensible par un humain tout en respectant un certain standard de conception. PHP et ses frameworks associés (Zend et Symfony) restent la technologie de base pour la réalisation de sites web du fait de leur antériorité (2000), de la base de sites installés, de la disponibilité des compétences et de l’intégration directe avec le server http Apache et la base de données MySQL. Autant de raisons qui font du silo technologique MySQL/Apache/PHP/Symfony un choix incontournable pour l’architecture des sites web.
Avons-nous pour autant atteint un pinacle technologique ? Rien n’est moins sûr si l’on regarde en détail le maillon faible qu’est PHP. Mais avant de revenir à notre sujet, un petit intermède.
La différence entre un bon langage et un mauvais langage…
Ce gimmick est un peu éculé et aucun langage n’est ni bon ni mauvais en soi. En revanche, un langage de programmation utilisé dans un contexte professionnel doit posséder des qualités fonctionnelles incontournables : il doit être efficace, c’est-à-dire qu’il doit permettre au développeur de résoudre ses problèmes et efficient, c’est-à-dire qu’il doit permettre de résoudre ces problèmes de façon optimale. Ce que recouvre cette dernière notion est largement dépendante du contexte d’utilisation du langage mais il est possible de faire quelques généralisations en prenant en compte le temps passé à écrire le code, à relire le code écrit par d’autres et à déboguer le code. De ce qui précède, on peut tirer des qualités d’efficience que l’on cherche chez un langage :
un langage doit être concis. A titre d’exemple, un langage qui requiert d’écrire du code générique (boilerplate code) n’est pas concis. La concision d’un langage est nécessaire à son efficience car moins il y a de code à taper, moins il y en a à relire et à déboguer.
un langage doit être cohérent. De façon générale, des choses similaires doivent y être exprimées de manière semblable. Cela permet de rendre le code lisible même pour un développeur n’ayant qu’une connaissance parcellaire du langage car il reconnaîtra les éléments de syntaxe pour ce qu’ils sont.
un langage doit être prédictible et fiable. Ce qu’un programme est censé faire doit apparaître au yeux du développeur et être en accord avec ses propres pré-supposés. Additionnellement, un programme doit résoudre des problèmes, pas en introduire de nouveaux.
un langage doit être transparent. Lorsqu’on débogue un programme, toute l’information sur l’exécution du programme (traces de pile d’appel, exceptions capturées, état des variables) doit être disponible.
A contrario, un langage qui serait verbeux, incohérent dans la morphologie des noms de ses éléments, quelquefois imprévisible à cause d’effets de bords bien connus mais non corrigés car utilisés par la communauté, rarement fiable à moins d’une bonne expérience de ses pièges et finalement peu transparent dès lors qu’il s’agit d’obtenir des informations de débogage serait considéré comme un langage ni efficace ni efficient.
Et bien, c’est exactement ce que PHP peut devenir pour un développeur qui n’a pas eu le coup de foudre avec ce langage. Sans entrer dans une querelle d’expert sur les mérites comparés de PHP et de Python et sur leurs idiomes syntaxiques respectifs, un seul argument montre la supériorité de Python sur PHP : sa courbe d’apprentissage.
Un développeur moyen maîtrisera très vite les bases de Python et encore plus vite celles de PHP. La différence se situe dans le moyen terme. Alors que l’accroissement de la maîtise des différents aspects de Python est régulier, il apparaît que pour PHP, il y ait des fluctuations et des paliers dont on explique la présence par l’incohérence de la syntaxe et de la morphologie des éléments de PHP. Connaissant l’ascendance de PHP (c’est-à-dire Perl), nous ne sommes pas surpris.
La différence entre les courbes d’apprentissage de PHP et de Python s’exprime également dans le nombre d’aspects différents de chaque langage qu’il est nécessaire de maîtriser pour entreprendre et achever une tâche complexe de développement. Il apparaît que le cœur de Python permet aux développeurs de réaliser 60% des tâches, les 40% restant étant de la responsabilité de bibliothèques spécialisées.
Python vs. PHP pour la réalisation d’applications interactives
Dans ce contexte, est-il possible et judicieux de choisir Python au lieu de PHP pour développer des composants côté-serveur dans le cadre d’un projet web ?
Sur la question de la possibilité, la réponse est oui car un silo technologique similaire existe :
PHP | Python | |
---|---|---|
serveur HTTP | Apache (mod_php) | Apache (mod_python) |
framework | Zend/Symfony | Django |
back-end de persistance | MySQL | MySQL |
On y gagne la concision de Python et toutes les autres caractéristiques qui font de Python un langage efficace et efficient. On y perd peut-être la facilité avec laquelle PHP se mêle au HTML et au SQL. Mais est-ce vraiment une perte quand 70% du temps de développement est consacré à essayer de relire et de comprendre un code écrit par d’autres (voire par soi-même quelques mois auparavant !) ?
Dans ce contexte, la syntaxe épurée de Python est un atout non négligeable puisque ne figure dans cette syntaxe que des éléments qui s’adressent directement au développeur. Pas de délimiteurs de bloc tels que la double accolade ({}), pas de caractère de fin de ligne comme le point-virgule (;), deux artifices issus du C et rendus nécessaires à l’époque héroïque pour obtenir des analyseurs syntaxiques plus compacts. En Python rien de tel et pourtant les blocs existent et le terminateur de ligne est le plus naturel du monde : une fin de ligne. En Python, l’indentation du code est rendue nécessaire par la syntaxe et c’est loin de représenter une gêne pour l’écriture du code.
Si PHP seul est plus facile que Python pour la réalisation de sites web dynamiques ne possédant que peu de fonctionnalités, la réalisation d’applications web plus ambitieuses requiert l’utilisation de frameworks complets souvent basés sur le pattern Modèle/Vue/Contrôleur et fournissant a minima un langage de définition de vues, un moteur de rendu et un ORM (Object-Relational Mapper).
Symfony 2 est certainement le framework PHP le plus utilisé pour le développement d’applications web. Django est son équivalent dans le monde Python. Si les deux frameworks ont des fonctionnalités similaires et couvrent tous les deux l’essentiel des besoins, ils diffèrent dès qu’il s’agit de performances. Django/Python permettent de traiter plus de requêtes par seconde, utilisent moins de ressources mémoire et, au final, engendrent un meilleur taux de disponibilité que Symfony/PHP.
Une meilleure performance associée à la syntaxe claire de Python et au respect des principes d’architecture par Django milite en faveur de ce dernier pour les applications web complexes et fortement sollicitées. C’est un choix que plusieurs services en ligne et non des moindres ont fait : Instagram, Pinterest ou Disqus. Des sites de presse en ligne ont également fait le choix de Django/Python dont Libération, the Guardian ou le Washington Post pour développer leur CMS (Content Management System) maison.