Si vous avez un certain nombre d'années d'expérience de travail avec Java et un certain nombre d'années d'expérience de travail avec C # et .NET, j'apprécierais votre opinion sur les différences de productivité de développement logiciel entre ces deux environnements. Un de nos clients envisage de remplacer leur solution logicielle existante. Le remplacement nécessitant environ 10 à 15 années-homme, un choix pour Java ou .NET, en fonction des différences de productivité entre eux) , peut influencer de manière significative l'investissement requis et le délai de mise sur le marché.
Pourriez-vous nous fournir une indication des différences de productivité de développement logiciel entre Java et C # /. NET? Je préférerais recevoir une réponse comme suit:
Mon expérience est basée sur X ans d'expérience avec Java et X ans d'expérience avec C # /. NET. Java est X% plus productif que C # .NET ou C # /. NET est X% plus productif que Java si vous tenez compte des éléments suivants.
Mon expérience est basée sur 10 ans d'expérience de travail avec Java et 3 ans d'expérience de travail avec C # /. NET. Java est 0% plus productif que C # .NET Ceci est basé sur l'écriture d'applications basées sur les services dorsaux.
C # /. NET est peut-être 5% plus productif que Java pour l'écriture d'applications utilisateur. Mais je ne l'ai pas fait depuis près de 5 ans en Java et le nouvel éditeur d'interface utilisateur Netbeans auraient pu combler l'écart.
Vous souhaitez augmenter votre productivité? CI (idéalement la livraison continue) et des tests automatisés. La productivité gagnée par le choix de langue/plate-forme/IDE sur n'importe quelle langue/plate-forme/IDE majeure est assez faible.
J'ai travaillé sur des projets à la fois au collège et dans le monde réel ™ en utilisant Java et C # depuis 5 ans maintenant.
De loin, j'aime utiliser C # de plus en raison de sa concision et de son utilisation du sucre syntaxique. Vous trouverez rarement un code Factory.GetFactory(OfFactory.GetFactory(Factory));
en C #. C'est plus facile à lire et à suivre car la syntaxe est plus petite et plus succincte.
Avec laquelle serez-vous plus productif? Cela dépend du type de projet.
Concevez-vous une application de bureau pour Windows? Ensuite, C # est le meilleur choix en raison de sa puissance IDE Visual Studio et .NET Framework rendent la création de GUI très simple.
Franchement, je suis content de ne plus utiliser Java (cela fait plus d'un an maintenant) parce que je me souviens à quel point le code devait être horriblement verbeux. Un exemple rapide est la gestion des exceptions. Si votre code peut lever une exception vous devez tenir compte de chaque exception possible. Cela transforme rapidement le code trivial en une monstruosité de 20 lignes +.
C # n'est pas aussi pratique, si vous choisissez de laisser votre code ouvert, c'est à vous en tant que développeur de décider.
C # a également fait de nombreux ajouts au cours de l'année qui en font un plaisir à utiliser. Lambdas, délégués, fonction anonyme (à la Ruby), plein de bonnes petites choses que vous trouverez au fur et à mesure.
J'ai beaucoup travaillé avec Java (depuis 1996) et .Net (depuis 2002) et en 2010 j'ai pris décision d'aller avec Java dans mon entreprise sur la base que ce serait le environnement le plus productif global.
Notez que je définis la productivité du développement logiciel en termes de valeur commerciale créée par unité de coût/ressource, sur une base de bout en bout (c'est-à-dire que vous devez examiner la productivité de l'ensemble du cycle de vie du logiciel, y compris le déploiement et la maintenance, pas seulement le codage initial !!).
Voici les éléments clés de mon raisonnement:
object.getSomeProperty()
vs object.SomeProperty
Ou utilisent une classe interne anonyme vs un lambda ne va tout simplement pas faire une différence appréciable pour l'avantage concurrentiel de votre entreprise ....Donc, bien qu'il y ait eu beaucoup de considérations complexes, dans l'ensemble, je suis assez satisfait du choix d'aller avec Java et je referais le même choix aujourd'hui (au début de 2012).
Le seul cas où j'irais avec .Net serait probablement si je développais une application de bureau uniquement pour Windows (où l'avantage .Net est clairement énorme).
J'ai: Java 10 ans, C # 8 ans
Je vote Java pour
J'ai plus de 10 ans d'expérience avec Java (depuis la version 1.1, vraiment!)) Et 7 ans d'expérience avec .NET (C # principalement).
Vous avez une décision bien arrêtée à prendre, mais surtout vous devriez essayer de décomposer en deux scénarios:
Application de burea
Si vous développez une application de bureau, vous devez utiliser la plate-forme principale avec laquelle vous travaillerez. S'il s'agit d'une plate-forme Microsoft utilisant .NET, il n'y a pas de meilleure solution que la plate-forme développée par le navire mère lui-même. S'il s'agit d'un scénario Linux ou multiplateforme, envisagez Java ou passez à une solution Web.
Application Web
C'est une décision très difficile à prendre car chacun a sa propre force et sa propre faiblesse. En voici quelques-unes:
C #
Force: Actuellement a plus d'élan pour construire de nouvelles fonctionnalités dans le langage et la plateforme/framework. Tout vient d'un seul fournisseur et c'est certainement un avantage. Vous pouvez également utiliser certains composants très puissants comme DevExpress par exemple (Java ne se rapproche même pas d'avoir quelque chose comme ce que l'équipe DX a mis en place au fil des ans et cela représente un énorme gain de productivité).
Faiblesse: Pour les applications d'entreprise .NET n'est pas aussi mature que Java. Vous n'avez pas autant de fournisseurs qui développent des logiciels d'entreprise dans .NET que pour Java.
Java
Force: Plus mature (déjà expliqué) et a une grande communauté avec plusieurs grands projets open source qui peuvent vous aider. Plusieurs projets .NET soi-disant open source ne sont en réalité qu'une copie de projets Java.
Faiblesse: Oracle possède Java (je sais, pas le JCP) et c'est certainement un risque à considérer. Leurs intentions ne sont pas très claires et je n'aime pas personnellement où va le langage en ce moment (je connais beaucoup de Java ont des préoccupations similaires).
Application côté serveur
Il s'agit essentiellement des mêmes arguments que les applications Web, mais parce que vous n'avez pas à vous soucier trop de l'interface utilisateur Java devient plus fort dans ce cas. Mais encore une fois, si la plate-forme est principalement Windows .NET pourrait être un meilleur choix.
Considérations générales
Dans l'ensemble, à mon avis, .NET a l'avantage principalement en raison de l'intégration étroite de Visual Studio 2010 (haut la main IDE là-bas), MS SQL, Entity Framework, IIS et ainsi de suite. Tout cela représente un énorme gain de productivité et j'ai une tonne d'expérience qui le prouve. Aussi je travaille principalement avec Java développeurs qui se sont tournés vers .NET et partagent essentiellement la même opinion.
Je pense que c'est également un bon point que Microsoft est plus fort que jamais, ce qui signifie que .NET sera là pendant un certain temps. Donc, quand je regarde dans 10 à 15 ans, je me sens plus en sécurité avec .NET qu'avec Java.
Java: 5 ans (non continu)
C #: 7 ans
Je ne pense pas que vous puissiez quantifier la productivité de cette façon. Cela dépend fortement du développeur individuel et du projet. Utilisez ce que vos développeurs savent.
Modifier:
Définissons "application d'entreprise type" comme:
Les deux Java et C # peuvent le faire. Ce n'est pas tellement une question de langage, mais de framework/runtime. Encore une fois, utilisez ce que vos développeurs savent. Ils peuvent apprendre un nouveau langage et un nouveau cadre, mais il faut du temps pour le faire. Ce serait vrai pour une application de bureau. Les deux langues peuvent être utilisées avec de nombreuses boîtes à outils/bibliothèques GUI, mais elles ont toutes des approches et des philosophies différentes.
Je suis un étudiant récemment diplômé de l'université, mais j'ai une expérience commerciale avec les deux langues, ce qui donne un total d'environ 3 ans Java et 4 ans C # .Net (note .net signifie que vous pouvez utiliser C #, VB.net, CLI C++ et J # et F #).
Je dirai maintenant que ma préférence globale est C # sur Java, tandis que les deux ont une syntaxe similaire, j'aime la puissance du framework .Net sur la compatibilité entre OS de Java. Vous devez considérer attentivement ce que vous devez construire? Est-ce juste une application de bureau? Avez-vous besoin d'une connectivité avec d'autres clients, donc d'autres ordinateurs de bureau, mobiles, sites Web?
** Discussion sur IDE perdu car la question à Stackoverflow a été fermée. La fin était essentiellement Java a de nombreux IDE gratuits mais ils ne se comparent pas à mon avis) à la puissance et aux extensions de Visual Studio. Mais notez que Visual Studio coûte plus par licence.
Vous devez examiner les compétences de votre équipe de développement, car cela aura un impact initial. Ce qui est plus rapide n'est ici ni là étant donné un utilisateur expérimenté dans les deux langues/framework. Ce qui, je suppose, soulève le fait que vous ne devez pas considérer le langage, car le langage n'est que la syntaxe, mais les outils et le cadre que le langage utilise.
J'ai basculé entre Java et .NET, en commençant par Java 1.2 jusqu'à 1.6, et .NET 1 jusqu'à 4.0, sur environ 10) années d'expérience professionnelle (être programmeur C/C++ avant cela).
À un moment donné, comme .NET 2.0, je dirais que Java et C # seraient à peu près les mêmes, en particulier pour le travail principal. Les constructions de langage étaient toujours très similaires. .NET aurait a probablement gagné l'Edge dans la programmation d'interface utilisateur de bureau, en raison du concepteur WinForms dans Visual Studio, et Java aurait eu l'Edge dans le Web/Server, principalement parce que vous n'étiez pas coincé avec IIS.
Passant maintenant à .NET 3.5 et 4, je donne haut la main la productivité à .NET. C'est principalement, à mon avis, parce que .NET est un langage évoluant beaucoup plus rapidement, car MS peut prendre des décisions linguistiques relativement rapidement, au lieu de pousser les changements à travers la politique du JCP. Les grandes améliorations sont le mot clé var
, l'intégralité de Linq, les méthodes d'extension, l'opérateur de coalescence nulle ??
, dynamic
, et probablement beaucoup plus de bonnes choses qui augmentent vraiment la productivité.
Maintenant, cela dit, le langage "le plus productif" pour un projet est presque toujours celui avec lequel les développeurs sont les plus à l'aise et expérimentés. La courbe d'apprentissage est toujours le plus grand tueur de productivité.
Une chose que j'ai remarquée est que de nombreuses boutiques C # /. NET ont une attitude "non inventée ici" et interdisent toutes les bibliothèques tierces/open source tandis que de nombreuses boutiques Java sont plus disposées à utiliser des bibliothèques open source. Il semble également y avoir plus de bibliothèques disponibles pour Java. Même si vous regardez des bibliothèques tierces sympas dans .NET, par exemple NHibernate, NPOI, Spring.NET, etc. ce sont des ports des bibliothèques Java et sont donc derrière eux. Il semble certainement que bon nombre de ces innovations sont venues en premier sur Java et après un certain temps, un port .NET a été créé. Du point de vue de la bibliothèque, il semble que Java gagne en termes de nouvelles découvertes innovantes.
Pourtant, Microsoft fait certaines bibliothèques officielles, par exemple ASP MVC, LINQ, etc. Mais souvent comme avec ASP les bibliothèques tierces MVC comme Struts, Spring MVC, etc. étaient déjà sorties pour Java et Microsoft était en retard pour accéder à la vue du modèle paradigme web du contrôleur.
Bien sûr, beaucoup de ces bibliothèques vous font gagner beaucoup de temps et vous rendent plus productif. Le langage de base au langage de base C # et Java ne sont pas si différents et pour moi, il est trop proche d'appeler. Ajoutez à cela l'armée de bibliothèques tierces et l'échelle s'incline certainement vers Java. Toujours avec un magasin ouvert, une grande partie de cette inclinaison s'équilibre. C'est juste que beaucoup de boutiques .NET ont l'attitude qui n'a pas été inventée ici, alors que beaucoup de magasins Java sont tout ce qu'il faut pour faire le travail ... C'est même vrai au sein de l'entreprise que je travaille, l'équipe .NET n'obtient pas grand-chose (en raison de la gestion) alors que l'équipe Java possède de nombreuses bibliothèques/utilitaires tiers approuvés. De plus, avec .NET, beaucoup d'autres bonnes choses ne sont pas gratuites (par exemple avant NPOI si vous vouliez travailler avec des documents Microsoft Office, la plupart des solutions [sans compter la bureautique] n'étaient pas gratuites. Alors que Java avait POI depuis 2001 Je ne pense pas que NPOI soit sorti avant 2008, c'est difficile à dire d'après le site du projet npoi.
Avec la similitude de la syntaxe et des outils, les gains de productivité de C # ou Java ne sont pas d'un ordre de grandeur pour faire une différence significative dans votre projet de travail de 10 à 15 années-homme. Je regarderais plus étroitement sur des questions telles que:
Je dirais que, à mon avis, la prémisse derrière la question, que "les différences de productivité entre (C # et Java) peuvent influencer de manière significative l'investissement requis et le délai de commercialisation" n'est pas vraie. Je ne doute pas qu'il y aurait une différence, mais ce ne serait pas significatif.
Je me suis beaucoup posé cette question: quelle est la meilleure? C # ou Java?
Je vais vous donner un conseil et ce conseil est la conclusion de mes recherches: aucune d'entre elles n'est meilleure, seule la langue que vous connaissez bien et avec laquelle vous pouvez faire beaucoup d'applications fascinantes est la meilleure.
Apprenez à programmer puis à vous entraîner beaucoup en utilisant une seule langue et lorsque vous deviendrez parfait pour écrire du code avec elle, pensez à d'autres langues et croyez-moi, vous apprendrez les autres langues comme un morceau de gâteau.