De quel "java" parles-tu, et à quel "C++" le compares-tu ?
Même les dernières versions de Java sont loin d'être aussi expressives que l'état de l'art d'il y a 15 ans (youpi il y a enfin les lambdas, la concurrence tremble), donc peu importe la version du langage Java, cela reste un langage plutôt simple. Rien que le langage de template de C++ déja présent il y a 20 ans (mais pas toujours implémenté par les compilateurs C++ tellement il est complexe), face aux generics poussifs de Java permet de voir l'abîme de complexité qui sépare les 2 langages. Note que je dis juste que C++ est plus complexe, je ne dis en aucun cas si un des 2 langages est mieux que l'autre (ils sont différents, avec des qualités différentes), ni s'ils sont bien (là c'est l'assurance de lancer une discussion interminable, ce n'était pas le but).
Faire un itérateur ou une fonction lambda, un hash personnalisé, ça te semble à la portée de n'importe qui ?
Dans un langage qui gère automatiquement la mémoire (comme Java), si écrire un itérateur ou une fonction lambda s'avère difficile, c'est éventuellement parce le langage utilisé n'est pas très puissant, par exemple s'il est simpliste. En gros, langage simpliste implique que le programmeur doive en baver pour faire des choses non triviales. En C++, c'est différent, on doit se soucier de plus de choses comme la mémoire (où est-ce qu'on alloue, qui désalloue...), les difficultés viennent de l'aspect bas-niveau.
Écrire une bonne fonction de hash est difficile dans tous les langages.
Et les GUI, le modèle MVC, c'est si simpliste ?
C'est quoi le rapport avec les langages ? Ce sont des choses qu'on peut être amené à coder dans n'importe quel langage. Le fait que cela soit difficile, c'est parce que coder c'est difficile, cela n'a rien a voir avec le côté simpliste ou non du langage.
On voit très vite que faire du code propre (je ne parle pas d'un programme sur un bout de serviette), donc maintenable, réutilisable, n'est pas si direct que ça. Dans aucun des deux.
Ça sera difficile dans tous les langages, parce que faire de la qualité c'est difficile par principe.
Après selon le projet, le langage choisi pourra être plus ou moins adapté (et donc rendre ça un peu moins difficile), et les difficultés techniques seront de natures différentes (ex: se battre avec les cycles de références en C++ qui provoquent des fuites mémoires, se battre avec le GC qui défonce les performances en Java).
Il est possible d'écrire du code non trivial (voire très complexe) même avec un langage simpliste. Et Java est relativement simpliste ; par exemple il a fallut attendre des plombes pour avoir des lambdas, alors que tous les langages avec gestion automatique de la mémoire les avaient depuis longtemps ; avoir des classes anonymes était une solution simple à ce manque, mais en pratique avoir un concept de moins pour garder le langage simple obligeait les codeurs à écrire plus de code moche ; ce qui s'appelle être simpliste (trop simple, la simplicité n'est plus une force, mais une faiblesse). Et le fait d'avoir des lambdas aujourd'hui ne ramène pas Java au niveau de l'état de l'art, ca le rend juste moins simple. Au contraire C++ dispose de beaucoup de concepts, ce qui le rend très (voire trop) complexe.
Maintenant un codeur qui veut maîtriser Java devra au final connaître l’écosystème Java, et cela sera difficile aussi (parce que devenir compétent c'est difficile).
[^] # Re: ca depend de ta maniere d'apprendre
Posté par GuieA_7 (site web personnel) . En réponse au message Quel est le meilleur moyen d'apprendre à utiliser un langage de programmation ?. Évalué à 5.
Même les dernières versions de Java sont loin d'être aussi expressives que l'état de l'art d'il y a 15 ans (youpi il y a enfin les lambdas, la concurrence tremble), donc peu importe la version du langage Java, cela reste un langage plutôt simple. Rien que le langage de template de C++ déja présent il y a 20 ans (mais pas toujours implémenté par les compilateurs C++ tellement il est complexe), face aux generics poussifs de Java permet de voir l'abîme de complexité qui sépare les 2 langages. Note que je dis juste que C++ est plus complexe, je ne dis en aucun cas si un des 2 langages est mieux que l'autre (ils sont différents, avec des qualités différentes), ni s'ils sont bien (là c'est l'assurance de lancer une discussion interminable, ce n'était pas le but).
C'est quoi le rapport avec les langages ? Ce sont des choses qu'on peut être amené à coder dans n'importe quel langage. Le fait que cela soit difficile, c'est parce que coder c'est difficile, cela n'a rien a voir avec le côté simpliste ou non du langage.
Ça sera difficile dans tous les langages, parce que faire de la qualité c'est difficile par principe.
Après selon le projet, le langage choisi pourra être plus ou moins adapté (et donc rendre ça un peu moins difficile), et les difficultés techniques seront de natures différentes (ex: se battre avec les cycles de références en C++ qui provoquent des fuites mémoires, se battre avec le GC qui défonce les performances en Java).
Il est possible d'écrire du code non trivial (voire très complexe) même avec un langage simpliste. Et Java est relativement simpliste ; par exemple il a fallut attendre des plombes pour avoir des lambdas, alors que tous les langages avec gestion automatique de la mémoire les avaient depuis longtemps ; avoir des classes anonymes était une solution simple à ce manque, mais en pratique avoir un concept de moins pour garder le langage simple obligeait les codeurs à écrire plus de code moche ; ce qui s'appelle être simpliste (trop simple, la simplicité n'est plus une force, mais une faiblesse). Et le fait d'avoir des lambdas aujourd'hui ne ramène pas Java au niveau de l'état de l'art, ca le rend juste moins simple. Au contraire C++ dispose de beaucoup de concepts, ce qui le rend très (voire trop) complexe.
Maintenant un codeur qui veut maîtriser Java devra au final connaître l’écosystème Java, et cela sera difficile aussi (parce que devenir compétent c'est difficile).