Facebook EmaiInACirclel
Développement front-end, back-end

Comprendre l’engouement pour Python (1/3)

PentaGuy
PentaGuy
Blogger

Cet engouement n’est pas nouveau puisque selon l’index TIOBE des langages informatiques les plus populaires, Python se place dans le Top10 de cet index depuis 2010 même si sa popularité relative tend à baisser. Le langage Python en lui-même n’est pas une nouveauté puisque sa création et sa diffusion sont antérieures (1991) à celles de PHP et Java (1995).

Si on excepte les effets de mode, quelles sont les caractéristiques propres de Python qui le distingue de ses pairs ? Nous allons, dans cette série de trois articles, comparer qualitativement Python aux deux langages les plus utilisées chez Pentalog (Java et PHP). Nous avons volontairement écarté d’autres langages dont l’application est plus spécialisée comme C/C++ pour le développement d’applications embarquée, C# pour le développement vers le framework .NET et Objective-C pour le développement d’applications native sous iOS. Nous verrons que Python possède des qualités qui le rendent réellement compétitif à la fois pour la réalisation de tiers métier et pour la réalisation d’applications de présentation web qui sont respectivement le domaine de Java et de PHP dans nos standards technologiques. Nous conclurons cette série d’articles par des recommandations et des précautions sur l’emploi de Python qui est loin d’être une technologie magique.

Python vs. Java pour le développement des tiers métier

Le principal problème de Java est sa totale orientation objet ce qui le rend propice à être la cible de l’adage qui veut que dès que « notre seul outil est un marteau, tous les problèmes tendent à devenir des clous. ». Cependant toutes les applications ne requièrent pas une orientation objet et une rigoureuse application des principes de ce paradigme de programmation. Mais le principal problème de Java est sa sémantique. Puisque tout est objet en Java, le principal vecteur de la sémantique d’une application est le nom (la classe), pas le verbe (la méthode). Or, cela suppose une restriction de pure forme sur l’expressivité du langage qui conduit souvent les développeurs Java à exprimer à l’aide de multiples classes à la collaboration douteuse ce qui pourrait être plus clairement exprimé à l’aide de simples fonctions autonomes.

Python résout ce problème de la dualité sémantique nom/verbe en étant clairement conçu dès le départ comme un langage multi-paradigme capable de s’adapter au style des développeurs : style procédural, objet ou fonctionnel. Cette liberté vient avec le prix d’une exigence de responsabilité de la part des concepteurs d’applications qui ont, plus que jamais, besoin d’une architecture claire. Mais cette exigence existe déjà pour les projets Java.

Cela étant dit, l’esthétique n’est pas le critère principal pour le choix d’un langage de programmation. Les objections les plus fréquentes formulées par les défenseurs de Java par rapport à Python sont que :

  1. Python est un langage dynamique
  2. Python ne disposera jamais d’autant de librairies que Java
  3. Python n’est pas indépendant de la plate-forme

Un peu d’explication sur la première objection, « Python est un langage dynamique » (étant sous-entendu que Java est un langage statique). Ce caractère statique/dynamique s’applique au typage des variables. En Java, lorsque vous déclarez une variable (et vous êtes obligés de le faire), vous devez également déclarer de quel type est cette variable (un entier, un réel flottant, une chaîne de caractères, un conteneur de type liste, etc.). Et une fois que vous l’avez fait, cette variable conservera son type quoique vous fassiez. Plus encore, toute tentative de changer le type de cette variable conduira à une erreur de compilation. Avec Python, on ne déclare pas les variables. Mieux, l’interpréteur Python est suffisamment « malin » pour deviner de quel type sont les variables en cours d’utilisation. Et bien entendu, il est possible de modifier le type d’une variable en lui affectant, par exemple, une autre valeur. Si cette possibilité peut paraître peu sûre, elle est en réalité une grande force puisque Python propose en plus que toutes les variables soient des références vers des éléments anonymes, à la différence de Java dans lequel les variables sont des conteneurs de valeur. De plus, Python propose des types de données qui sont non-mutables (entiers, chaînes, conteneurs) c’est-à-dire qu’une fois affectés à une variable, il n’est plus possible d’en altérer le contenu ce qui permet d’éviter certains effets de bords.

Ainsi, plutôt que d’assurer la correction a priori des programmes par le typage statique, Python lui préfère le typage dynamique moins verbeux mais compense par l’utilisation de type non-mutables et par la généralisation des références.

La réponse à la deuxième objection est beaucoup plus directe puisque Python dispose, à l’instar de C++ avec la STL, d’une librairie standard de types et de fonctions qui couvre un large spectre des besoins de développement et qui va des algorithmes et des types abstraits aux bibliothèques de portage spécifiques aux OS.

Concernant ce dernier point et pour répondre à la troisième objection, la portabilité du code est peut-être ce qui distingue le plus Python et Java en ce sens que Java dispose de la JVM (Java Virtual Machine) et que Python ne dispose pas, par défaut, d’une telle plateforme logicielle d’abstraction. Cependant, hormis les cas où la portabilité est un objectif stratégique de l’architecture applicative, ce défaut ne semble pas vraiment entrer en ligne de compte lors du développement d’applications-métier qui sont souvent prescrites par leurs éditeurs pour un ou plusieurs systèmes d’exploitation. Mentionnons que les fans absolus de la JVM, celle-ci supporte une implémentation spécifique de Python appelée Jython qui permet d’écrire des programmes en Python interprétables en bytecode. Signalons encore qu’une implémentation existe également pour le framework .NET de Microsoft, appelée IronPython. D’un autre côté, la philosophie du couple Java/JVM résumée par « write once, run everywhere » se transforme souvent dans la réalité en « write once, debug everywhere » impliquant de fait des sessions de tests d’intégration aussi poussées que si l’aspect de portabilité avait été pris en compte dans le code du programme en lui-même.

Les points forts de Python pour la réalisation d’applications métiers sont donc son expressivité et sa concision, le support de styles de programmation variés permettant de traiter les différents problèmes qui se posent sur ce type de projet au moyen d’un code court et lisible ne présentant quasiment aucune ambiguité sémantique. Ce dernier aspect milite à lui seul pour l’adoption de Python puisque, théoriquement, la documentation technique de l’application s’en trouverait réduite.

Il se trouve que les deux principaux ERP open source sont écrits en Python : ERP5 et Odoo (ex-OpenERP) ce qui démontre la pertinence du modèle technologique.


3 Commentaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *