Java rattrapera-t-il C #? [fermé]

17

Aujourd'hui, j'ai posté une question demandant quel langage C # ou Java serait préférable pour moi d'étudier. J'ai eu d'excellentes réponses. Une chose est apparue: peut-être que Java est maintenant plutôt derrière C # avec de nouvelles fonctionnalités. J'ai vu quelques liens Web et la plupart ont souligné ce que C # avait et ce que Java n'avait pas.

Donc, ma question est la suivante: Java rattrapera-t-il à nouveau C #? Et si vous deviez deviner où cela en serait dans 5 ans. Aurait-il toutes les choses qui manquent peut-être maintenant? Et Java 7?

MandyNelson
la source
7
-1, présomptif et hypothétique. Changerait en +1 si le titre changeait en "Est-ce que Java est derrière C #, et si oui, comment pourrait-il rattraper son retard?"
Nicole
2
Java et C # rattraperont-ils Scheme? Faites-moi savoir lorsque vous obtenez des fonctions, fermetures et continuations de première classe anonymes.
dietbuddha
5
@dietbuddha: Je préfère ne pas salir mon code avec ), merci beaucoup.
Josh K
1
@JoshK vous préférez le remplir; et}, non? LISP semble utiliser beaucoup de parenthèses parce que chaque fonction les utilise, et vous y imbriquez beaucoup de fonctions.
YuriAlbuquerque

Réponses:

32

Les fonctionnalités du langage sont une très petite partie de ce qui fait fonctionner Java et C #. En fin de compte, ce sont des parties de plus grands écosystèmes J2EE et .NET.

Les deux ont leurs propres forces et devraient grossir au cours des 5 prochaines années.

Shamit Verma
la source
19
+1 pour "Les fonctionnalités du langage sont une très petite partie de ce qui fait fonctionner Java et C #"
Craige
1
Oui, les API et les bibliothèques sont à bien des égards beaucoup plus importantes.
Michael K
2
D'accord, mais la question porte sur la langue et non sur l'écosystème;)
Philippe
1
Je déteste vraiment voter +1 sur des réponses très courtes, mais vous êtes sur quelque chose ici. J'adorerais vous voir développer cette réponse.
Nicole
3
Questions dit: "quel langage C # ou Java serait le mieux pour moi d'étudier" et "où en serait-il dans 5 ans" ces deux aspects reposent davantage sur l'écosystème que sur le langage.
Shamit Verma
16

J'aurais dit oui jusqu'à ce qu'Oracle entre en scène. Ce qui est triste, car j'ai vraiment apprécié le bond en avant des fonctionnalités que Java et C # avaient au cours des six dernières années.

Jesse C. Slicer
la source
2
Pourquoi pensez-vous qu'Oracle sabotera Java?
2
Je ne pense tout simplement pas que la culture d'entreprise a la même agilité que Sun dans l'intégration des fonctionnalités.
Jesse C. Slicer
8
@Glenn, le procès Oracle vs Google me montre qu'ils "n'obtiennent" pas l'open source, et que cela signifie que les grandes entreprises sont moins susceptibles de choisir Java pour un développement futur. groklaw.net/staticpages/index.php?page=OracleGoogle
Tangurena
Oracle pourrait ne pas «visser Java» exactement, mais la JVM. À l'heure actuelle, ils ont le projet de combiner deux implémentations JVM qu'ils ont acquises JRockit de BEA et HotSpot for Sun. Pendant qu'ils y sont, ils ont complètement laissé de côté le projet Da Vinci Machine.
vartec
2
Je suis mélangé sur Oracle. La combinaison Android est une sorte de désactivation, mais ils contribuent au noyau Linux et ils sont les principaux développeurs du système de fichiers Btrfs. Oracle semble "obtenir" l'open source mieux que Microsoft, mais cela ne veut pas dire grand-chose.
jonescb
6

En tant que langage, je ne développe pas Java pour ajouter de l'innovation à un rythme significatif, principalement parce que ceux de la communauté open source qui sont à la pointe sont plus susceptibles de se concentrer sur les nouveaux langages JVM, tels que Scala, Clojure, Groovy, JRuby et JPython.

De plus, l'engagement de Java envers la compatibilité descendante signifie que l'ajout de fonctionnalités de langue est intrinsèquement plus difficile que dans les premiers jours de la langue.

Eric Wilson
la source
5

Le grand point d'interrogation ici est Oracle. Sun a vraiment ralenti les choses pour Java au cours des 50 dernières années. L'espoir de nombreux membres de la communauté Java était que Sun détruirait Java ou le vendrait à quelqu'un qui mettrait beaucoup de ressources et d'efforts. Alors qu'Oracle pourrait certainement le faire, c'est une grande entreprise avec beaucoup de groupes avec leurs propres intérêts. Je suppose, et c'est juste que, une supposition, c'est qu'Oracle laissera Java stagner et l'utilisera principalement comme un outil pour les poursuites en matière de brevets.

Peut-être qu'ils le vendront à Google pour une grosse somme d'argent et tout le monde sera content. Il est entre les mains des conseils d'administration et des avocats plutôt que des ingénieurs et des concepteurs de logiciels.

Du bon côté des choses, même sans améliorations, Java est un bon langage et a un bel écosystème autour de lui. Bien que je préfère personnellement C # et le monde .net, Java est toujours un excellent choix. À l'avenir, le temps nous le dira, mais pour l'instant, Java n'est pas du tout mauvais. (Les bibliothèques de date et d'heure sont exclues ... wow, sont-elles toujours laides et désordonnées)

Jason
la source
1
Il existe maintenant des bibliothèques tierces pour surmonter les problèmes de date / heure.
Michael K
1
Oracle utilisait Java avec PL / SQL comme langage pour les programmes qui vivaient à l'intérieur de la base de données, au moins à partir de 10g. Oracle utilise beaucoup Java. Que cela signifie qu'ils vont prendre Java dans une direction que j'aime est discutable, mais ils ne vont pas le tuer.
David Thornley
4

Il n'y a rien à rattraper, donc la question n'a aucun sens.

Le fait que Java ne reproduise pas exactement C # ne signifie pas qu'il est "inférieur" d'une certaine manière, c'est juste différent. Autant vous demander quand C # "rattrapera" Cobol.

jwenting
la source
23
Je ne suis pas d'accord. C # et Java sont similaires à bien des égards, bien plus que C # et COBOL. Je me souviens avoir lu un jour que "C # était ce que Java aurait dû être". Pour résumer, je crois que C # et Java sont en concurrence directe, et après avoir travaillé avec les deux, je dois dire que j'ai beaucoup de fonctionnalités C # en Java, mais pas l'inverse ...
Philippe
Avez-vous trouvé des situations où vous pouviez utiliser C # ou Java? C'est-à-dire des situations où le développeur pourrait faire un choix. Habituellement, un magasin aurait déjà des préférences / préjugés / préjugés et le choix serait entre les langues sur le même écosystème. Par exemple entre Java et Scala ou entre C # et F #
Shamit Verma
2
Je ne suis pas d'accord avec toutes les décisions de conception prises par C #, mais comme Java, ils ont consciemment entrepris de faire un remplacement C ++, et avec l'exemple de Java avant eux, ils ont délibérément ajouté certaines fonctionnalités critiques que Java avait omises. Donc, si vous pensez que ces fonctionnalités sont bonnes, alors Java doit "rattraper" C # Plus précisément, la possibilité de créer des objets en ligne afin que tout ce qui est orienté objet ne doive PAS être gonflé, et je pense que const. Les délégués sont une nouvelle fonctionnalité qu'ils ont intégrée, pas qu'ils ne peuvent pas être construits en tant que structure de données de bibliothèque. Je dirais qu'ils doivent tous les deux rattraper C ++!
Dov
@Philippe, ne te laisse pas prendre par son contre-exemple. Il aurait pu tout aussi bien dire "Quand C # rattrapera-t-il Java?". Son argument tient toujours à ce qu'il n'y a aucune raison objective pour laquelle Java est derrière C #; c'est une préférence personnelle.
jonescb
Personne ne parle de réplication, mais C # a quelques fonctionnalités essentielles que Java envisage juste d'implémenter MAINTENANT (comme lambdas, qui sont émulées avec une implémentation d'objet laid).
YuriAlbuquerque
4

La question de savoir si C # ou Java est en avance sur l'autre est à débattre, mais au lieu de me concentrer sur les fonctionnalités du langage de l'un ou de l'autre, je préfère me concentrer sur ce qui est impliqué dans l' évolution d' un langage. C'est un fait que je ne pense pas que quiconque argumentera: Java est plus ancien que C #.

Problèmes de modification du fonctionnement d'une langue:

  1. Si vous brisez la compatibilité ascendante, vous énervez beaucoup de développeurs
  2. Si vous faites chier vos développeurs, ils passent à une autre langue qui les prend mieux en charge. Par conséquent, aucune raison de continuer à travailler avec la langue.
  3. Java a pris des décisions de conception très tôt avec une pression pour mettre le langage sur le marché. L'espoir était de revenir en arrière et de remplir certains des blancs. Ces décisions affligent toujours la langue parce que les responsables ne veulent pas violer le premier point.
  4. Java a ouvert la voie à de nombreux nouveaux territoires et a prouvé une fois pour toutes qu'un langage de collecte des ordures peut être pris au sérieux - et suffisamment performant pour la plupart des gens.
  5. C # est arrivé plus tard et a appris beaucoup de leçons dans lesquelles Java est tombé - ils ont donc pu éviter certaines des limitations techniques de Java en raison du point 3.
  6. Les nouvelles fonctionnalités du langage doivent résoudre un problème réel de manière sensée. Toutes les fonctionnalités linguistiques n'ont pas de sens dans le contexte de la langue à laquelle vous essayez de l'ajouter. C'est pourquoi, malgré leurs similitudes, Java et C # continueront d'être des langages différents.

Alors, C # a-t-il plus de fonctionnalités de langage que Java? Je le pense. Sont-ils utiles? Je le pense. Est-ce à dire que C # est meilleur ou plus mature que Java? Je suis en désaccord avec cela. Ils sont différents, simples et simples. Java n'aura jamais toutes les fonctionnalités de C # comme C # n'aura jamais toutes les fonctionnalités de Java.

L'une des fonctionnalités de Java, la possibilité d'écrire un programme sur Windows et de le déployer sur Unix ou Mac, ne se produira jamais directement par le support de Microsoft. Pourquoi demandes-tu? Ce n'est pas parce que Microsoft est mauvais (que ce soit vrai ou non, je m'en fiche). C'est parce qu'ils ont appris une leçon que Sun n'a jamais faite: écrire une fois exécuté n'importe où banalise les systèmes d'exploitation et le matériel. Si vous vous souciez de gagner de l'argent grâce aux ventes de votre système d'exploitation, vous ne voulez pas que cela soit trivial d'échanger et de faire fonctionner une application. Si vous avez fait cela, vous ne pouvez pas tirer de profit du système d'exploitation car il y a toujours des options moins chères.

Berin Loritsch
la source
Pourquoi est-il important que Mono ne soit pas géré par MS? Mono fonctionne vraiment bien. Ne le sous-estimez pas.
Kugel
Ce n'est pas une fouille sur Mono, mais toutes les API .NET ne sont pas prises en charge directement. Bien qu'ils progressent et ont parcouru un long chemin, il existe des limites, en particulier dans les applications de bureau. Je ne sais pas à quel point Mono est proche ou s'il peut légalement implémenter Winforms ou WPF. Cependant, pour un travail strictement côté serveur, je suis presque sûr qu'il est compatible. Je ne l'ai pas examiné récemment.
Berin Loritsch
Je pense que "la possibilité d'écrire un programme sur Windows et de le déployer sur Unix ou Mac, ne se produira jamais directement par le support de Microsoft" a été réfutée maintenant
JoelFan
Au moment où j'ai écrit la réponse, ce n'était pas le cas. C # a donc un Microsoft écrit un runtime et des bibliothèques qui fonctionnent sur Mac et Unix? Mono n'est pas directement de Microsoft, même si certains développeurs Microsoft y travaillent. J'ai encore des doutes sur une application de bureau basée sur WPF fonctionnant pour Linux. Seul le côté serveur peut être OK.
Berin Loritsch
1

Java n'a pas vraiment besoin de nouvelles "fonctionnalités" pas plus que C ou C ++. C'est un langage bien conçu pour le développement orienté objet. Les ajouts qui peuvent être apportés concernent la création de bibliothèques pour effectuer un large éventail de tâches. Il en va de même pour C # - la plupart des fonctionnalités sont ajoutées pour que le langage fasse plus de choses. Personnellement, je pense que la plupart de ces fonctionnalités ne sont pas nécessaires - les pointeurs dans OO sont vraiment tellement fluff sauf si vous travaillez au niveau matériel (auquel cas il est probablement préférable d'utiliser quelque chose comme C). En outre, l'exécution dans une machine virtuelle est censée rendre l'accès direct au matériel difficile, voire impossible.

Unix a lancé la tendance de créer des modules qui font très bien une chose. Je pense que les deux # Java et C sont un peu hors de la main sur le fluage caractéristique. Il vaut mieux créer un noyau facilement extensible qu'un "langage" polyvalent géant qui ressemble plus à un framework. Pour moi , Java répond mieux à cette exigence que C #.

Michael K
la source
7
Une langue sans lambda approprié n'est pas une langue utilisable. Si cette fonctionnalité est ajoutée à Java, je serais d'accord avec le reste de vos arguments. Sans cela, Java n'est pas extensible du tout, il est à peine utilisable.
SK-logic
2
@Craige Personnellement (opinion) Je n'aime pas avoir de fonctionnalités sytactiques. Je veux que la langue soit hors de mon chemin - très minime.
Michael K
1
@Michael - Je n'arrive pas à faire le lien entre un langage ayant des caractéristiques syntaxiques et un langage qui vous gêne. Ce n'est pas parce qu'un langage contient des fonctionnalités que vous devez les utiliser. Prenez par exemple les méthodes getter et setter de C #. 90% du temps, cela vous évitera d'écrire des centaines de lignes de code redondant. Vous pouvez néanmoins écrire le vôtre si vous le souhaitez.
Craige
1
@Craige, si le langage a des fonctionnalités, vos outils doivent au moins les connaître. Et la puissance de l'écosystème Java réside principalement dans ses outils, qui sont entièrement possibles grâce à la simplicité minimaliste du langage.
SK-logic
1
@SK, je ne comprends pas comment vous pouvez dire qu'une langue avec lambda est inutilisable. C n'a pas de lambdas, et C ++ les obtient en C ++ 0x et les gens utilisent ces langages depuis des décennies. Tout simplement parce que vous préférez une programmation fonctionnelle qui n'invalide pas la programmation impérative.
jonescb
1

Il n'y a rien de mal avec la plupart des fonctionnalités que C # ajoute, mais étant donné la vitesse à laquelle ils changent le langage, ils rendent consciemment difficile, voire impossible, pour Mono de suivre. Si oui, alors je dis que nous attendons que C # rattrape Java en termes de gamme de systèmes sur lesquels il peut se déployer. Il ne suffit pas de simplement exécuter Windows.

Dov
la source
0

Je ne vais pas lancer un forum de discussion, mais je pense que Java était là bien avant C # et d'ailleurs C # ressemble plus à une réplication qu'à java.

Quant à répondre à votre question: Java et C # sont des langages différents, vous ne pouvez donc pas les comparer uniquement par leurs fonctionnalités. Ce que vous pouvez faire en Java, vous ne pouvez pas le faire en C # et vice versa.

Donc, finalement, c'est comme démarrer un sujet Windows vs Linux.

Adam Arold
la source