Article original : https://blog.axopen.com/2020/04/python-vs-java-2020/

Python vs Java en 2020

Seul un néophyte non averti n’a jamais entendu parler de Java ou de Python, respectivement 1er et 3ème langages les plus populaires du monde à ce jour. A eux deux réunis, ils accumulent tout de même plus de 25% de côte de popularité au TIOBE index !

Connus et aimés par les développeurs, ce sont 2 langages qui ont fait leur preuves, et qui, en 2020, se vouent une sacrée bataille !

Après avoir fait pas mal de projets de développement avec Java et Python, nous vous proposons aujourd’hui de comparer ces deux grands langages sur plusieurs aspects : prise en main, performances, maintenance, etc. ! C’est parti pour le versus : Python VS JAVA !

Préambule : Un peu d’histoire

Java

Java est né à peu près en même temps que le Web. Créé en 1995 par James Gosling et d’autres confrères, il avait pour but de devenir un langage de programmation indépendant de la plateforme hardware.

Java connaît rapidement un franc succès et se hisse parmi les langages les plus populaires (3ème place) dans les années 2000, pendant que Python n’en est “qu’à” la 22ème place.

Python

Python est né plus tôt que Java. Créé en 1991 par Guido Van Rossum, il n’a connu son essor que bien plus tard, notamment après la sortie de la version 2.

Avec l’avènement du Machine Learning, Python connaît un deuxième saut de popularité qui le fait passer devant le célèbre C++.

Prise en main

Java et Python sont tous deux des langages dont la prise en main est “globalement” simple. Cependant, Python a tendance à être plus facile à appréhender et à comprendre.

Verbosité & formatage

Python est beaucoup moins verbeux que Java. Rien qu’à regarder la démonstration avec le très simple “Hello World” pour comprendre qu’avec beaucoup moins de lignes de code, Python fait beaucoup ! De plus, le formatage est obligatoire en Python. Il n’y a ni accolades, ni points virgules, ce qui augmente naturellement la facilité de lecture du code.

Voici un exemple du fameux “Hello World” :

Java :

public class HelloWorld {

    public static void main(String[] args) {
        System.out.println("Hello, World");
    }

}

Python :

print ("Hello World")

Inférence de type

Python fait la part belle à l’inférence de type, qui permet, comme dans l’exemple suivant, de “mixer” les types de variables dans un même tableau. Certes, cette fonctionnalité possède des avantages et des défauts sur lesquels nous pouvons débattre pendant longtemps…

Pour résumer, l’inférence de type :

  • permet de mixer les types de variables et simplifier l’utilisation des variables.
  • peut générer des erreurs d’exécution (résoudre l’équation : 5 + “article”).
  • nécessite d’être plus rigoureux (il n’y aura pas d’erreurs de compilation).
  • est légèrement moins performant car les types n’en ont pas besoin

Java :

public class ArrayTest {

    public static void main(String[] args) {
        String tab[] = {"Hello World", "6"};
        for (String i : tab) {
          System.out.println(i);
        }
    }

}

Python :

tab = ["Hello World", 6]
for i in tab:
    print(i)

Productivité

Python, avec sa syntaxe simple et ses variables dynamiquement typées, nécessite moins de lignes de code que Java. Qui dit moins de lignes de code, dit moins de temps passé à coder et la productivité ne peut qu’en être augmentée.

Vous voulez un autre exemple pour voir à quel point Python est rapide ? Intervertissons deux variables. X devient Y et Y devient X :

Java :

int x = 5;
int y = 6;
int temp;

temp = x;
x = y; 
y = temp;

Python :

y, x = x, y

Résultat

Python est définitivement plus simple à prendre en main et est idéal comme premier langage pour découvrir le développement informatique. Concis, productif et facile à apprendre, Python remporte cette manche !

Avantage : Python

Environnement & Performance

Les deux langages utilisent des machines virtuelles pour exécuter leur code. Cependant, concernant l’installation et l’utilisation de l’environnement, Python s’avère plus facile à utiliser.

Installation d’environnement

D’une part, l’installation de l’environnement est beaucoup plus lourde côté Java avec la pléthore de versions (OpenJDK, AdoptOpenJDK, Oracle…), JRE et JDK, etc… Il est alors plus difficile de s’y retrouver quand on est néophyte, comparé au site de Python où un seul bouton permet l’installation de l’environnement.

Compilation et exécution

Python est un langage interprété et la compilation est effectuée pendant l’exécution du programme (avec l’interpréteur classique CPython). Côté Java, le code est compilé en avance puis, durant l’exécution, la JVM (Java Virtual Machine) exécute directement le code compilé.

Ces deux systèmes ont chacun leurs avantages :

Python (Interprété)Java (Compilé)
Meilleure gestion des erreursRapidité d’exécution après compilation
Rapidité de compilationMeilleures performances
Portabilité

Notons que Python a également l’avantage de pouvoir être intégré dans d’autres langages.

Exemple de l’intégration de Python dans Java :

import org.python.util.PythonInterpreter;

public class JythonHelloWorld {
  public static void main(String[] args) {
    try(PythonInterpreter pyInterp = new PythonInterpreter()) {
      pyInterp.exec("print('Hello Python World!')");
    }
  }
}

Performances

Java est gourmand en mémoire, c’est bien connu ! Mais le fait que Python soit un langage interprété le rend plus lent que Java sur de nombreuses tâches.

Un exemple est le calcul de π par la formule de Leibniz démontre que Python via son interpréteur basique Cpython est bien plus lent que Java (243.5 ms pour Python et 76 ms pour Java).

Il existe néanmoins un interpréteur (PyPy) Python qui permet, comme Java, de pré-compiler le code et d’offrir ainsi de très bonnes performances (41 ms !). Mais, cet interpréteur n’est pas exempt de faiblesses : il fonctionne sur moins d’architectures que Cpython, il consomme un peu plus de CPU et est plus efficace sur des opérations répétées.

Résultat

Environnement : Avantage pour Python et sa simplicité de mise en place.

Performances : Avantage pour Java. Malgré qu’il soit plus lourd (et donc lent) à compiler, il est tout de même plus rapide que Python en temps d’exécution.

Domaines d’applications

Les deux langages possèdent chacun une énorme communauté qui leur ont permis de se développer tous deux dans de nombreux domaines d’applications.

Mais les deux langages ont quelques domaines de prédilection :

PythonJava
Machine Learning (IA) avec TensorFlow, SciKitLearnApplications WEB avec Spring
IOT (implémenté par défaut sur les Raspberry)Applications multithreads
Scripts simplesApplications à long terme
Applications Web avec Django, FlaskApplications Android

Java est spécialisé dans toutes les applications d’entreprises que ce soit Web, Mobile, traitement de données et certains clients lourds.

Python quant à lui est expert pour les prototypes, applications de Machine Learning et pour l’IoT (Internet of Things).

C’est donc match nul pour cette partie, les deux langages n’entrant pas totalement en concurrence.

Maintenance

Java possède un avantage indéniable sur de très nombreux langages : la rétro-compatibilité des versions.

Cela permet à ce langage d’être mis à jour en minimisant les effets de “code cassé” d’une version à l’autre et donc de développer des applications qui seront maintenables à long terme.

Python met fin au support de la version 2 en 2020 et le passage à la version 3 ne se fait pas sans déboires !

Reprenons l’exemple de notre “Hello World” :

En Python 2, on écrivait print 'Hello World' alors que maintenant les parenthèses sont obligatoires et cela devient print ('Hello World'). De prime abord, cela peut paraître simple. Pourtant, beaucoup de choses ont changé dans cette évolution et beaucoup de librairies, qui ont fait la force des programmes Python, ne sont plus compatibles ou n’ont pas été mises à jour.

C’est cette différence qui fait de Java notre grand gagnant de cette section. Un programme développé en Java 8 par exemple, pourra être compilé et exécuté par un Java plus récent (théoriquement bien sûr, il y a toujours des petites modifications à effectuer 🙂 )

Côté maintenance, avantage : Java ! Java gagne haut la main avec sa maintenabilité connue et reconnue.

Python VS Java : Pour conclure

Python et Java sont deux très beaux langages, l’un focalisé sur la vitesse de développement et sa portabilité et l’autre sur sa maintenabilité à long terme. Ils sont finalement difficilement comparables car, comme nous l’avons vu côté projets, leur utilisation est généralement différente, voir complémentaire.

Si nous devions choisir de notre côté, nous opterions généralement pour Java, qui permet de développer des applications avec une vision sur le long-terme, mais ce n’est pas non plus le choix définitif !

Et pour vous du coup, Python ou Java ?L’équipe AXOPEN