Seul un néophyte non averti n’a jamais entendu parler de JavaLangage de développement très populaire ! 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 !
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 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++.
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.
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")
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 :
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)
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
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
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.
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.
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 erreurs | Rapidité d’exécution après compilation |
Rapidité de compilation | Meilleures 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!’)");
}
}
}
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.
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.
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 :
Python | Java |
---|---|
Machine Learning (IA) avec TensorFlow, SciKitLearn | Applications WEB avec Spring |
IOT (implémenté par défaut sur les Raspberry) | Applications multithreads |
Scripts simples | Applications Ă long terme |
Applications Web avec Django, Flask | Applications 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.
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 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 !
Java 9, quelques méthodes utiles pour la gestion des strings
JasperReports permet de créer des variables calculées qui sont incrémentées de ligne en ligne.
Optimiser l’architecture de son SI, ce n’est pas une mince affaire… Vous connaissez peut-être déjà l’analogie qui compare les systèmes d’information à des villes. De la même manière que l’un des enjeux de l’urbanisme réside dans l’harmonie parfois précaire entre les vieux bâtiments et les tours flambant neuves, maintenir un SI est avant tout une question d’équilibre entre l’ancien et le neuf. N’étant pas spécialistes du sujet, on ne saurait pas vous dire à quoi devrait ressembler la ville parfaite. Par contre, on peut vous assurer qu’un bon SI est un SI avec une architecture maîtrisée qui répond aux besoins de l’entreprise, et qui maximise les fonctionnalités tout en réduisant les coûts.