Bonjour mesdames, messieurs !
Cette question semble étrange mais laissez moi m'expliquer un peu plus. Je suis curieux de savoir pourquoi une personne quelconque choisirait volontairement le java comme langage lorsqu'il n'a aucune contrainte technologique (Android par exemple).
Les principaux arguments que je vois sont souvent :
- Multiplateforme : le java est loin d'être le seul langage multiplateforme. Il existe aussi le C/C++ ou encore le C# grâce a Mono.
- Simple d'utilisation : le python est beaucoup plus simple et je le vois souvent favorisé.
Pourtant je ne compte pas le nombre de programme qui sont écrit en java. Cela veut dire qu'il possède un avantage certain que je manque. C'est pourquoi je veux lancer ici un débat. Pourquoi choisir le java ?
Je précise que je jouerais un peu l'avocat du diable pour pousser un peu l'argumentation. Pas de troll s'il vous plait et discutons dans une bonne ambiance mais sérieuse.
Mesdames, messieurs.
Merci de m'avoir lu, a vous !
-Typage fort
-Documentation (lire de la javadoc c'est juste un bonheur)
-Outils existants (Spring, Hibernate etc)
-Le langage en lui meme (c'est plus perso, mais j'aime la maniere dont tout est géré en java, que ce soit les exceptions, l'heritage, les interfaces...)
-J'ai commencé dessus, ça m'a plus, j'ai pas vraiment vu de raisons d'aller ailleurs (et pour avoir bricoler du JS et du PHP, surement pas vers une de ces technos)
Le 30 juin 2015 à 15:30:26 Darkandgel a écrit :
-Typage fort
-Documentation (lire de la javadoc c'est juste un bonheur)
-Outils existants (Spring, Hibernate etc)
-Le langage en lui meme (c'est plus perso, mais j'aime la maniere dont tout est géré en java, que ce soit les exceptions, l'heritage, les interfaces...)
-J'ai commencé dessus, ça m'a plus, j'ai pas vraiment vu de raisons d'aller ailleurs (et pour avoir bricoler du JS et du PHP, surement pas vers une de ces technos)
Je suis curieux mais avant d'aller plus loin, as tu aborder d'autre langage (C/C++, C#, Ruby, Python, Swift...) autre que le JS et le PHP ?
J'ai fait un peu de C, mais rien de bien folichon (a part la fork bomb, qui etait marrante :D )
Ruby et Python, je vois juste a quoi ça ressemble, et la syntaxe ultra compressée ne m'attire pas du tout
Le 30 juin 2015 à 15:41:10 Haptaro a écrit :
Par rapport à C ou C++ :
- rapidité d'itérations (voir les points suivants), le développement est moins lourd, c'est un fait. Moins complexe et moins "dangereux" aussi.
- meilleurs outils (javadoc, maven, Intellij, frameworks de tests comme jUnit ou Mockito, etc.), C++ ne lui arrive pas à la cheville à ce niveau
- meilleure gestion des dépendances (encore une fois Maven, mais aussi Gradle)
- meilleure doc (encore javadoc)
- superbe API standard
- portabilité entre les 3 grands OS avec un minimum de modifications
- très bonnes performances (et oui), bien que généralement moindre à celles d'un bon code C ou C++, en général en entreprise on s'en fout, si c'est pas du jeu-vidéo ou du calcul hautes perfs y a aucun intérêt à prendre du C ou C++
Je ne suis pas un grand fan du javadoc que je trouve pas extra mais je reconnais que je le java possède beaucoup d'outils de gestions pour faciliter le développement (comme disait le voisin, Spring dont beaucoup de gens raffole).
Par rapport à C# :
- VRAIE portabiltié. Mono n'est pas fiable. Par contre on peut avoir bon espoir que C# "remplace" java pour les nouveaux développement dans les années à venir grâce à l'ouverture du code de .NET
Que veux tu dire ? A part WPF et WCF, mono ne m'a jamais posé de problème niveau compatibilité.
Par rapport à Python :
- Robustesse. Python n'est pas strictement typé, c'est pas viable dans certains cas, le typage statique est une sécurité supplémentaire
- La JVM est infiniment plus performante.
J'avoue ne jamais avoir fait de test entre python vs la JVM. Mais la JVM a son défaut aussi. Elle fait rouler le CPU par pic lors du passage du GB et malheureusement (comme beaucoup de GB) son système de génération n'est pas top top (de mon avis).
Je ne suis pas un grand fan du javadoc que je trouve pas extra mais je reconnais que je le java possède beaucoup d'outils de gestions pour faciliter le développement (comme disait le voisin, Spring dont beaucoup de gens raffole).
A moi d'avoir une question
:
Qu'est ce que tu lui reproche a la javadoc ?
Pour peu qu'elle soit correctement renseignée, elle fournit toutes les infos qu'on est en droit d'attendre d'une doc
Pourtant je ne compte pas le nombre de programme qui sont écrit en java. Cela veut dire qu'il possède un avantage certain que je manque.
Non. Les langages les plus utilisés dans l'industrie, que ce soit Java, C, C++, python, etc, ne sont en général pas les "meilleurs" langages disponibles, quel que soit le sens qu'on donne au mot "meilleur".
Pour qu'un langage soit massivement utilisé, il ne faut pas simplement qu'il soit mieux conçu que d'autres langages, il y a aussi une grosse part de marketing fait dessus : «si tout le monde en parle, si tout le monde l'utilise, c'est que ça doit être bien.»
En plus de ça, il y a aussi un aspect adaptation, lorsque les chercheurs proposent de nouveaux langages avec de nouvelles features intéressantes, il y a toujours un temps de latence pour que les programmeurs se mettent à les utiliser.
- Dans les années 70, malgré l'émergence de nombreux langages plus ou moins haut niveau, les gens continuaient à écrire de l'assembleur, parce qu'ils y étaient habitués et n'avaient pas confiance en des langages compilés. Aujourd'hui, personne de sensé n'écrit de l'assembleur à la main, à moins que ce ne soit vraiment nécessaire.
- Dans les années 90, on avait déjà des langages plus évolués avec des garbage-collectors depuis un bout de temps, mais les gens continuaient de faire du Cobol et compagnie, parce qu'ils trouvaient ça "plus sûr" de gérer la mémoire à la main. Aujourd'hui, tout "vrai" langage se doit d'être doté d'un GC.
- Ces dernières années, on commence à peine à voir émerger des langages comme Swift ou F# dotés d'un bon système de type qui facilite grandement l'écriture de programmes, bien qu'on sache déjà faire tout ça depuis des dizaines années avec lisp, ML, haskell...
-J'ai commencé dessus, ça m'a plus, j'ai pas vraiment vu de raisons d'aller ailleurs (et pour avoir bricoler du JS et du PHP, surement pas vers une de ces technos)
Ça c'est aussi un des freins à l'émergence de nouveaux langages plus riches. Quand on est habitué à un langage, on est toujours satisfait de ce qu'on a. On ne peut pas savoir que telle ou telle feature essentielle nous manque, puisqu'on n'a jamais eu l'occasion d'en profiter.
On est parfaitement capable d'identifier les langages qui sont "moins biens" que le notre, on se dit «haha, comment je pourrais coder en ___, ils ont même pas *telle feature importante que j'ai dans mon langage*»
Mais par contre, si on regarde "vers le haut", on n'est pas capable d'identifier les langages meilleurs que le notre, ils disposent de features bizarres qu'on ne comprend pas, et notre première réaction est de se dire "pff c'est trop compliqué, pourquoi j'aurais besoin de cela je suis bien avec mon langage !". Mais si on fait l'effort de l'apprendre, on finira par se rendre compte que c'est vachement utile et que ça nous manquait.
Le 30 juin 2015 à 15:58:36 Darkandgel a écrit :
Je ne suis pas un grand fan du javadoc que je trouve pas extra mais je reconnais que je le java possède beaucoup d'outils de gestions pour faciliter le développement (comme disait le voisin, Spring dont beaucoup de gens raffole).
A moi d'avoir une question
:
Qu'est ce que tu lui reproche a la javadoc ?
Pour peu qu'elle soit correctement renseignée, elle fournit toutes les infos qu'on est en droit d'attendre d'une doc
Il m'est arrivé plusieurs fois d'arriver sur une page de la documentation de java, de cliquer sur un lien mort. Pas une fois ou deux mais au moins 4, 5 fois. De plus, il m'est arrivé aussi de tomber très étrangement sur un classe erroné dans sa description (1er doc a me faire le coup) et elle fut changé le lendemain(heureusement).
Pour ce qui est de la javadoc (je viens de réaliser que l'on parle du tool de génération de doc HTML et non de la doc de Java
), en faite je ne rien contre. Il existe la même chose comme Doxy qui sont similaire et marche parfaitement.
Excusez moi, il est tard pour moi (il est 10h12, je travail de nuit ca fait un moment que j'ai pas dormis) ![]()
Le 30 juin 2015 à 16:13:25 Haptaro a écrit :
Que veux tu dire ? A part WPF et WCF, mono ne m'a jamais posé de problème niveau compatibilité.
A une époque y avait pas mal de soucis de fuite mémoire, et de vrais problèmes de perf entre un code exécuté par Mono et un par .NET, je sais pas si c'était toujours le cas récemment
Y avait aussi d'autres problèmes avec mono : pas de support de la part de MS, pas de garantie sur le long terme (Microsoft aurait potentiellement pu abattre Mono à coups de brevets), etc. Ca valait pas le coup de prendre ces risques alors que Java les contournait
Elle fait rouler le CPU par pic lors du passage du GB et malheureusement
Finalement pas tant que ça, je sais pas si tu t'es déjà penché sur le fonctionnement des GC (pluriel) de la JVM avec les différentes générations sur le tas mais le problème se pose pas tant que ça, très rarement en pratique. Avec G1 depuis Java 7 c'est même mieux que jamais.
son système de génération n'est pas top top
Tu as des explications techniques concrètes bien sûr ?
A vrai dire, je me suis penché sur les GC car je trouve le domaine vraiment intéressant à voir comment fonctionne les différents type de GC et leur gestions. Mais ce que j'avais remarqué d'assez étrange c'est que lors du passage du GC (en java), il ne détruit pas les objets mort (Vs le C# qui commence par ces objets) mais va en revanche chercher a tuer ceux encore en activité qui doivent mourir et cela causait des soucis a certains programmeurs qui avait un OutOfMemoryException de la part de la JVM a cause de cet aspect. De plus, certains aspect de la JVM qui décide le passage de génération en génération cause des fuites de mémoires (si je dis pas de conneries, on peut créer assez facilement des fuites de mémoires sans en avoir conscience en Java et elles sont beaucoup plus difficile a détecter à cause des dépendances entre objet).
Je ne sais pas si je suis clair mais j'espère que oui.
Revanche si je dis des conneries ou si des changements ont eu lieu, je suis vraiment intéressé a les connaitre !!
Dans les grandes entreprises pour les "applications d'entreprises" on a pas besoin de la super performance du C++ comme chez les éditeurs de logiciels. Java est non seulement un langage mais aussi un Framework, donc Java propose une grande richesses standardisée sans avoir besoin d'ajouter je ne sais combien de libs pour être productif. Le fait qu'il soit portable permet de mettre en prod des batteries de serveurs Linux pour l'explication et d’utiliser le même langage pour les applications clientes, et de déployer les mêmes applications sur des postes Windows ou Linux ou des mobiles ou autres. Exemple de projet gigantesque developpé en Java c'est Amadeus :
Actuellement, Amadeus héberge plus de 170 compagnies aériennes dans la centrale de réservation (offre commerciale dénommée "Altéa Reservation") et distribue des produits de voyage à environ 350000 agents de voyage et un peu plus de 5000 sites web.
Le plus gros concurrent de Java c'est en fait C# avec le Framework dotnet, qui est utilisé aussi par les grandes entreprise pour leurs applications.
Java à eu un regain d'intérêt depuis quelques années avec l'énorme croissance sur les mobiles Android.
Dans le monde éducatif Java est aussi très utilisé pour l'enseignement de la programmation dans l’enseignement informatique, principalement en études supérieures dans les Fac et les écoles d'ingénieur. Les cycles d'initiation pour les écoles autres qu'ingénieur ou les premières années de cycles sont plutôt souvent fait en Python et parfois aussi C ou Pascal.
Pourquoi choisir le java? je ne sais pas, mais comme l’interpréteur java est en c / c++, je voit là une bonne raison de ne pas choisir java ![]()
Il existe une bonne 40aine de JVM différentes, et ce n'est pas automatiquement du C/C++
+ c'est un langage pédagogique pour de l'orienté objet, du typage..., sans être aussi dur qu'un C++ ou strict qu'un javascript
+ ça tourne sur linux donc adapté pour les universités & co sans gros budgets
+ plutôt rapide
+ plein d'outils basés dessus (cités plus haut)
Après il possède des défauts qui m'énerve, genre verbeux as hell et plein de petits trucs qui énerve quand on maitrises 3-4 autres langages et qu'on doit repasser en java.
@dark_drow : Sans rentrer dans le troll, j'ai plein de qualificatifs pour javascript, mais... Strict ? Tu peux developper ?
Le 30 juin 2015 à 15:15:37 123_bou a écrit :
- Multiplateforme : le java est loin d'être le seul langage multiplateforme. Il existe aussi le C/C++ ou encore le C# grâce a Mono.
Je réagis sur cette phrase, mais C et C++ ne sont pas multiplateformes, d'un car le binaire que le compilateur va générer est seulement utilisable sur une architecture spécifique, et aussi car pour un même code, il est possible qu'ils ont des comportements différents selon l'architecture.
Le 30 juin 2015 à 16:13:26 123_bou a écrit :
Le 30 juin 2015 à 15:58:36 Darkandgel a écrit :
Je ne suis pas un grand fan du javadoc que je trouve pas extra mais je reconnais que je le java possède beaucoup d'outils de gestions pour faciliter le développement (comme disait le voisin, Spring dont beaucoup de gens raffole).
A moi d'avoir une question
:
Qu'est ce que tu lui reproche a la javadoc ?
Pour peu qu'elle soit correctement renseignée, elle fournit toutes les infos qu'on est en droit d'attendre d'une doc
Il m'est arrivé plusieurs fois d'arriver sur une page de la documentation de java, de cliquer sur un lien mort. Pas une fois ou deux mais au moins 4, 5 fois. De plus, il m'est arrivé aussi de tomber très étrangement sur un classe erroné dans sa description (1er doc a me faire le coup) et elle fut changé le lendemain(heureusement).
Pour ce qui est de la javadoc (je viens de réaliser que l'on parle du tool de génération de doc HTML et non de la doc de Java
), en faite je ne rien contre. Il existe la même chose comme Doxy qui sont similaire et marche parfaitement.
Excusez moi, il est tard pour moi (il est 10h12, je travail de nuit ca fait un moment que j'ai pas dormis)
La doc officielle est en effet un peu fouillie et part du principe qu'on a affaire à des développeurs pro, ça n'a rien à voir à la doc de CodeIgniter par ex qui prend le lecteur vraiment par la main.
Sinon étant dév java sénior, j'utilise très peu la java doc du site internet (je trouve personnellement que c'est une perte de temps). Par contre tu peux facilement télécharger les sources/javadoc directement dans eclipse (surtout si tu utilises maven) c'est beaucoup plus efficace.
Le 03 juillet 2015 à 19:43:32 Haptaro a écrit :
Le 03 juillet 2015 à 19:11:40 Ace_Attorney a écrit :
Le 30 juin 2015 à 15:15:37 123_bou a écrit :
- Multiplateforme : le java est loin d'être le seul langage multiplateforme. Il existe aussi le C/C++ ou encore le C# grâce a Mono.Je réagis sur cette phrase, mais C et C++ ne sont pas multiplateformes, d'un car le binaire que le compilateur va générer est seulement utilisable sur une architecture spécifique, et aussi car pour un même code, il est possible qu'ils ont des comportements différents selon l'architecture.
Je me trompe peut-être mais je dirais plutôt que tu décris la portabilité là
Du coup, j'ai vraiment du mal à voir ce qu'il veut dire par langage multi-plateforme.
Car de base, un langage, c'est principalement une syntaxe, s'il veut pas parlé du code généré, j'ai dû mal à voir ce qu'il veut dire par multiplateforme.
Java est multiplateforme parce que tu as des JVM qui interprètent le Java bytecode sur presque toutes les plateformes et C++ est multiplateformes parce que as des compilateurs C++ qui te permettent de cibler presque toutes les plateformes à partir d'un même source. Évidement pour C++ c'est le source que tu peu porter, l'exe généré est spécifique à la plateforme cible. Le C++ à l'avantage généralement de la performance de l'exe, mais Java à l'avantage avec son Framework d'être beaucoup plus riche, donc tu peu faire un code java portable le plus souvent sans avoir besoin de libs en sus alors qu'avec C++ tu as souvent besoin d'ajouter des libs, et se pose le probleme de la portabilité de ces libs. Pour ce qui est des éditeurs de jeux vidéos ils utilisent des moteurs 3D ou des moteurs de jeux qui sont eux même multi plateformes, c'est avec cette solution qu'ils arrivent à sortir le même jeux sur plusieurs plateformes.