Bonsoir à tous, enfin, devrais-je dire, bon matin...
Je réfléchi durement et je me dis que le Java a beaucoup d'aspects positifs (simplicité, portabilité) et négatifs (lenteurs, non-optimisation) qui ont été répandus à cause de Minecraft.
Je voulais savoir, est-ce vrai et est-ce une bonne chose d'apprendre le Java plutôt que le C++ (ma prochaine étape après le C)
Courtoisement
Je pense qu'il faut que tu essaye de savoir ce que tu compte faire, pour ensuite utiliser le langage approprier.
Et bon matin a toi ![]()
Ce n'est absolument pas un risque de developper en Java en tant que tel. Apres tout depend du contexte... mais cette question ouverte reste la meme pour tout debut de projet logiciel en fait.
Exactement !
Sinon pour l'apprentissage je te conseille de t'intéresser aux théories au-dessus des langages, comme la Programmation Orientée Objet (POO), ensuite la différence entre les langages c'est des détails...
Par contre, une différence de taille entre C/C++ et Java : C++ est le langage traditionnel de la 3D donc il y a une tonne de bibliothèques/logiciels tout faits dans tous les domaines, alors qu'en Java il faut bien souvent développer ses propres fonctionnalités
.
Pour de la 2D en tout cas tu peux foncer sur le java, t'auras rarement des problèmes de lenteur et t'as de très bonne librairies pour ça (Slick entre autres).
Pour de la 3D c'est discutable ![]()
"et négatifs (lenteurs, non-optimisation) qui ont été répandus à cause de Minecraft. "
Minecraft est terriblement mal optimisé, et ce n'est pas la faute de Java.
On peut tout à fait faire de la 3D avec Java (avec JOGL notamment), et vu qu'une bonne part des calculs est externalisé sur le GPU de nos jours, on peut avoir quelque chose de très performant.
Après, c'est évident que la majorité des moteurs 3D est développé en C++, donc si tu veux utiliser un moteur existant reconnu (Ogre par exemple) ça peut être mieux de partir sur C++.
Bref, il n'y a pas de vrai risque à apprendre le Java. D'ailleurs selon moi un bon informaticien devrait connaître le Java et le C++. A toi de choisir dans quel ordre, sachant que lorsque tu en maîtriseras un, apprendre l'autre sera relativement simple.
Java le langage n'est pas plus lent qu'un autre (en tout cas rien d'assez significatif)
Java le framework et les librairires par contre, ça peut être le cas. La librairie de mathématique par exemple est assez lente par défaut.
En faisant attention tu n'auras aucun problème à travailler en java.
Et encore une fois, une fois que tu as une bonne maitrise d'un langage similaire a java, le passage d'un langage a un autre ne devrait pas etre un trop gros soucis.
D'apres ce que j'ai compris c'est surtout à ses débuts que java était très lent et depuis il inverse la tendance et devient plus rapide il a malheuresement son image d'avant.
Et puis pour MC ce n'est qu'un jeu il ne faut pas juger sur un mais sur plusieurs.
Apprendre le java n'est pas une perte de temps.
Arrêtez moi si je me trompe,
Java transformant son bytecode à la volé peux utiliser les meilleurs instructions (SSE & co) disponible sur le processeur. En revanche, un programme C compilé pour fonctionner sur tout les PC (x86, la base sans instructions plus évolués) tournera peut être moins vite que le java.
Perso, ce que je reproche a Java c'est comment il est utiliser en général. Bcp de couches dans les appli avec bcp de code pour lier les couches et au final ca devient moins lisible.
Meme remarque pour le C++, je suis moins virulant que Linus Torvalds a ce sujet, mais dans le fond je le comprend a 100%.
Oui.
[ Ceci était une réponse systématique à la vue du titre du thread. Il ne faut pas me tenter, surtout un vendredi.
]
Le java, ce n'est carrément pas aussi portable que ce qu'on raconte. Entre le manque de spec dans le langage même, et les JVMs implantées de façon douteuses sur les archis hors des grands classiques, méfiance !
À choisir entre C++ et Java, commence par le C++. C'est bien plus simple de passer de C++ à Java que l'inverse en tout cas. Ma (pas si) mauvaise langue ajoute : c'est mieux d'apprendre sur un langage où les choses sont bien ficelées en premier.
« En revanche, un programme C compilé pour fonctionner sur tout les PC (x86, la base sans instructions plus évolués) tournera peut être moins vite que le java. »
tu rêves. À efforts et techniques de gourous égales, le C sera au mois aussi rapide (et souvent nettement plus rapide).
"Java transformant son bytecode à la volé peux utiliser les meilleurs instructions (SSE & co) disponible sur le processeur. En revanche, un programme C compilé pour fonctionner sur tout les PC (x86, la base sans instructions plus évolués) tournera peut être moins vite que le java."
En effet, un cretin qui programme aura des perfs de merde. Quelqu'un de raisonnable reconnaitra le prbleme extraira les partie importante du code dans une bibliotheque dynamique qu'il compilera pour les architectures approprie et chargera la version qui va bien dynamiquement (c'est ce que fait mplayer).
Apres, quand on a besoin de performance, on place generalement une limite inferieur sur les architectures qui feront tourner le code. Et du coup poser une limite sur "supporte qu moins ce niveau d'instruction" est raisonnable. Finalement, avec l'arrive des machines 64 bits, les differences entre jeu d'instruction est actuellement assez faible.
Finalement, le soi disant gain de JIT compiling est tres theorique et n'a, a ma connaissance, jamais ete demontre dans des cas qui compte vraiment.
Bien, je partais du principe pas si bête que la personne posant la question n’était pas un gourou du C++ et Java. Les techniques de gouroux ou le chargement dynamique de bibliothéques compilées pour differentes arch sont peut être un peu complexe pour la question posée.
Je pense que pour commencer la POO, Java est plus indiqué. Plus stricte que le C++ qui permet de faire un peu n'importe quoi. Comme par exemple mélanger le C et le C++ ou autre joyeusetées pas jolie jolie.
Puis, le principe de l'héritage unique et des interfaces est tres interressant aussi.
Voire le C++ ensuite, une fois les principe de la POO acsquise et se faire plaisir en allant un peu plus pres de la machine.
Si tu n'es pas un guru, tu fera du code qui se traine en C++ comme en java, parceque tu va utiliser les mauvaise structures de donnees et les mauvais algo. La majorite des performances qu'il y a gagner dans les applications sont d'ordres algorithmique et pas des details de bas niveau. Une fois que l'on arrive a des problemes de bas niveau, il y a typiquement encore des gros facteurs (2,3 typiquement, 10 frequement, plus parfois) a gagner, mais typiquement les gens s'arretent avant.
Le probleme d'OP est d'apprendre, et l'apprentissage se fait dans n'importe quel langage. C++ et Java ont tous les deux une couche objets complete avec des differences syntaxique mais pas conceptuelle.
"Si tu n'es pas un guru, tu fera du code qui se traine en C++ comme en java [...]"
Tout a fait d'accord. Idem pour la lisibilité C++/java.
Néanmoins, si je devais enseigné la POO a quelqu'un, je serait surement bien content d'avoir choisi le Java plutôt que le C++ au moment venu de montrer comment faire des threads 100% objets ![]()
Si tu veux faire un jeux : C++
Sinon le java tu trouveras de très bon cours dessus et bcp de bonne pratique. Les outils qui entoure java sont très bon. Et si un jour tu va en école d'info tu as de forte chance que ce soit java ton langage principal.
Et meme vue ton jeune age je pense que java a encore une longue vie devant lui en niveau pro donc non ce n'est pas un risque ( et de toute facon comme dit précédemment les conceptes eux de toutes facon sont les meme entre les langages)
"C++ et Java ont tous les deux une couche objets complete avec des differences syntaxique mais pas conceptuelle."
Il ont quand meme quelque truc différent.
Je préfère le java mais j'ai commencé par le C++ et il me semble que le C++ a une vrai généricité pas une pseudo généricité a la java. C++ permet la surcharge des opérateurs. C++ utilise l'héritage multiple. C++ permet bcp plus de liberté a mon sens. Java tu as le gabridge collector et quand j'utilise java j'ai l impression d'utiliser un langage légerement de plus haut niveau (plus de choses de cachées)
Après la philosophie des 2 langages est la meme POO.
"tu rêves. À efforts et techniques de gourous égales, le C sera au mois aussi rapide (et souvent nettement plus rapide)."
Après il y a la vitesse de développement qui peut jouer. Et là le Java est en général inégalable par le C ou le C++ : et si un développeur C tente de réaliser un programme (plus complexe que l'implémentation d'un seul algorithme) aussi rapidement qu'un programmeur Java, il risque de ne pas avoir le temps d'utiliser toutes ses techniques de gourous et toutes les optimisations nécessaires.
Développer en C++ comme un Dieu et ne pas se faire avoir par l'infinité de petits pièges dans lesquels on risque de tomber et qui vont plomber les perfs, ça demande beaucoup de talent et beaucoup de temps. Beaucoup plus qu'en Java. A mon avis il est facile de construire de petits softs C++ supérieurs à Java en termes de perf, mais construire une cathédrale logicielle avec plusieurs dizaines de classes et qui soit plus performante en C++ qu'en Java, c'est une gageure (et les temps de développement ne seront pas les mêmes).
Bref, en pratique il n'y a jamais une supériorité écrasante de C++ sur Java, quoique ça dépend des benchs :
http://www.laboiteaprog.com/article72-5-benchmark_c++_vs_java
http://blog.dhananjaynene.com/2008/07/performance-comparison-c-java-python-ruby-jython-jruby-groovy/
http://blog.cfelde.com/202010/06/c-vs-java-performance/
http://bruscy.republika.pl/pages/przemek/java_not_really_faster_than_cpp.html