Scala serait-il un bon choix au lieu de Java?


11

Nous allons démarrer un nouveau projet qui impliquera la formation de tous les développeurs .net en Java (frameworks / système ECO etc). Nous avons beaucoup de code écrit en C # et il semble que tout cela sera gaspillé car nous devons tout réécrire en Java. Le problème que je vois est que la première année environ (probablement 2 ans), nous n'aurons rien à livrer car nous passerons la plupart du temps à reproduire ce que nous avions avant mais maintenant à Java.

Étant donné que notre équipe est répartie dans différents bureaux à travers le monde et que nous avons un grand nombre de développeurs java (20 à 30) et 10 développeurs utilisant .net, nous voulons que tous les développeurs utilisent le même langage / plateforme afin que nous puissions commencer à réutiliser les composants / modules. Je peux donc comprendre le point de vue des directions.

Hier, je suis tombé sur Scala et je me demandais s'il serait préférable de l'utiliser avec le produit actuel (qui est écrit en C #) et puis au moins nous aurons un produit fonctionnel dans un an. Aussi dans un an, nous avons des modules qui peuvent être utilisés dans le monde Java pendant que nous migrons d'autres parties du produit.

Scala serait-il un meilleur choix que Java compte tenu de ce que nous essayons de réaliser?


2
Tout réécrire dans une autre langue? Et 2 ans sans rien à livrer? Cela semble être une terrible décision de gestion et comme si vous aviez besoin d'un nouvel emploi dans
six

Oui, cela a été considéré. Je ne sais pas où je dois commencer à chercher maintenant et je m'en tiens à C # :)
JD01

1
C'est comme si vous étiez
back2dos

Réponses:


15

Quelques points à considérer:

  • La scala est une excellente langue - mais il convient de noter que c'est aussi une langue assez difficile à apprendre et à utiliser correctement. Pas seulement mon opinion - même les experts Scala expérimentés le disent . Selon le niveau de compétences de votre équipe, il est probablement le mieux adapté comme outil pour vos développeurs les plus expérimentés / experts
  • Java et C # sont assez similaires à bien des égards - il ne faudra pas longtemps aux développeurs formés en un (la syntaxe est similaire, il s'agit principalement d'apprendre à connaître les particularités de chacun et de comprendre les différentes bibliothèques, qui ont souvent des fonctionnalités similaires mais sont conditionnés différemment et / ou ont des noms différents). Personnellement, je suis passé de Java à C # et je suis revenu à Java sans aucune difficulté.
  • Il convient également de noter que tous les langages JVM (Java et Scala, mais aussi JRuby et Clojure, etc.) sont très compatibles - ils partagent la même plate-forme JVM fondamentale et peuvent partager du code / des bibliothèques très facilement.

Compte tenu de tout cela, vous voudrez peut-être couvrir vos paris et opter pour une stratégie mixte Java / Scala - c'est-à-dire migrer vers la plate - forme JVM et vous concentrer initialement sur Java, mais gardez ouverte l'option d'utiliser Scala lorsque vos développeurs sont à l'aise et / ou cela correspond au problème à résoudre.

Du point de vue de la gestion, cela présente de nombreux avantages:

  • Vous pouvez toujours partager toutes les bibliothèques afin que vos investissements soient en sécurité
  • Vos développeurs moins expérimentés pourront transférer C # -> Java assez rapidement
  • Vos développeurs plus expérimentés peuvent profiter pleinement des fonctionnalités avancées de Scala
  • Tous les outils sont compatibles / peuvent être partagés (systèmes de construction, IDE, outils de déploiement, etc.)
  • Vous bénéficiez d'un accès gratuit au très large écosystème open source des bibliothèques sur la JVM (à côté de la portabilité multiplateforme, c'est sans doute la meilleure raison d'être sur la plate-forme JVM)
  • Vos développeurs peuvent utiliser le langage qui les rend les plus productifs compte tenu de leurs compétences / de la tâche à accomplir (Java dans certains cas, Scala dans d'autres, peut-être d'autres langages comme Clojure à l'avenir)

L'inconvénient est que vous avez encore deux langues principales à prendre en charge. Mais vous en avez probablement déjà bien plus que deux (scripts shell? Formats XML spécifiques au domaine? Fichiers de configuration? Moteurs de règles? HTML? Javascript?).


Merci pour l'information. J'essaie simplement de savoir quelle est la meilleure voie à suivre et vous avez donné d'excellentes informations. Pour le moment, nous avons de bons développeurs OO mais personne ne connaît la programmation fonctionnelle.
JD01

1
Heureux de vous aider! Il convient de savoir que Scala est davantage un langage basé sur plusieurs paradigmes / POO. Bien que vous puissiez certainement faire de la FP dans Scala, si vous voulez des langues plus clairement fonctionnelles, Haskell ou Clojure sont probablement plus proches de la réalité.
mikera

Quant à la réutilisation du code, si j'ai utilisé Clojure ou Scala dès le premier jour ou même comme vous l'avez dit dans une stratégie mixte, pourrais-je réutiliser le code Clojure / Scala à la fois en .net et en Java? Je me demande si c'est un bon argument de vente pour la direction. De cette façon, nous pourrions encore sortir un produit (l'ancien produit avec de nouvelles fonctionnalités) et être également sur la voie de la réécriture du code existant en Java avec la réutilisation du code des modules clojure / scala. Ai-je raison de penser ici ou cela ouvre-t-il d'autres problèmes?
JD01

1
Vous pouvez exposer la fonctionnalité Clojure / Scala en tant que service Web ou interface REST si vous le souhaitez. Cela représente un surcoût un peu plus élevé que la construction directe d'une bibliothèque (ce qui serait la meilleure option si vous vouliez appeler la fonctionnalité à partir de Java / d'un autre langage JVM), mais cela donnerait certainement la flexibilité d'appeler le code depuis le client que vous aimiez (. Net, Java, Ruby, etc.)
mikera

Merci Mike. Je pense que le chemin de réutilisation du code montrerait au moins à la direction qu'une réécriture complète n'est pas nécessaire avec l'option Scala / Clojure. Je ne veux pas que nous nous retrouvions comme Netscape :). De retour à la construction d'une bibliothèque, pourrais-je simplement ne pas l'utiliser en .net et java sans services Web?
JD01

15

J'ajouterai une 3ème option. Quelqu'un dans votre organisation a-t-il envisagé l'interopérabilité entre vos modules C # et Java? Comment exposez-vous la fonctionnalité C #? Les services Web SOAP ou RESTFul sont-ils une option?

Une réécriture de 2 ans peut être un glas pour une organisation (il suffit de demander à Netscape). Cependant, une migration progressive tandis que le code existant se joue bien entre eux a potentiellement moins d'impact sur l'entreprise.


3

La réécriture de C # vers Scala sera aussi difficile que la réécriture vers Java. Quant à la langue qui est "meilleure", ce point est théorique, chaque langue a ses propres points positifs et négatifs.

Je ne sais pas quelle est la taille de votre base de code mais 2 ans pour 30 développeurs semble énorme pour une simple réécriture. Récupérer Java lorsque vous savez que C # est facile. Cela m'a pris un jour ou deux pour me familiariser avec ça.

Mon conseil serait de laisser la direction faire son chemin et profiter du fait que vous soyez payé pour élargir vos compétences.


Une dizaine de développeurs seulement travailleront sur le nouveau produit. J'essaie juste de découvrir quels seraient les avantages et les inconvénients de Scala.
JD01

1
Je ne connais pas assez les spécificités de votre projet ou Scala pour vous donner une réponse défiante. Cependant, il me semble que l'introduction d'une troisième langue que personne ne connaît ne ferait que compliquer les choses.
Tom Squires

Il se peut que vous ayez raison. J'y pensais en termes de sortie d'un produit dans un an environ, tout en étant capable de réutiliser du code en .net et java. Vos points sont bien notés :)
JD01

1

Je pense que l'option la plus simple serait d'amener les développeurs java à apprendre le C #. Les deux langages sont très similaires à bien des égards et il ne faut pas longtemps pour qu'un développeur java prenne C #. J'ai travaillé avec de nombreux développeurs Java qui ont appris le C # et c'est généralement une transition en douceur. Le seul domaine où ils pourraient rester bloqués pendant un certain temps est le modèle de programmation WebForms. Les développeurs Java s'adaptent mieux au paradigme MVC. De cette façon, vous n'avez pas besoin d'attendre un an avant de commencer à développer de nouvelles fonctionnalités. En ce qui concerne Scala, je crains que cela n'introduise un tout nouveau problème avec les 30 développeurs essayant d'apprendre une nouvelle langue.


Il y a tellement de produits écrits en Java, donc leur faire apprendre le C # serait difficile. J'espérais avec Scala, une fois que nous aurons le nouveau produit, les développeurs java pourraient utiliser les bibliothèques telles quelles sans avoir besoin d'apprendre Scala.
JD01

2
Ne serait-il pas acceptable si vous exposiez votre code .Net existant en tant que services que les développeurs java peuvent invoquer et développer toutes les nouvelles fonctionnalités de java.
Sriram

Cela avait été suggéré dans le passé, mais il a été décidé de nous éloigner du .net.
JD01

Hou la la! Ensuite, je resterais simple et réécrirais le code en java. Je pense que Scala introduirait une complexité de plus à gérer et ce serait difficile à vendre à la direction.
Sriram
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.