Wäre Scala eine gute Wahl anstelle von Java?

11

Wir werden ein neues Projekt starten, bei dem alle .net-Entwickler in Java (Frameworks / ECO-System usw.) geschult werden. Wir haben viel Code in C # geschrieben und es scheint, dass all dies verschwendet wird, da wir alles in Java neu schreiben müssen. Das Problem, das ich sehe, ist, dass wir im ersten Jahr oder so (wahrscheinlich 2 Jahre) nichts zu liefern haben werden, da wir die meiste Zeit damit verbringen werden, das zu reproduzieren, was wir vorher hatten, aber jetzt in Java.

Da unser Team in verschiedenen Niederlassungen auf der ganzen Welt verteilt ist und wir eine große Anzahl von Java-Entwicklern (20 bis 30) und 10 Entwicklern haben, die .net verwenden, möchten wir, dass alle Entwickler dieselbe Sprache / Plattform verwenden, damit wir beginnen können Komponenten / Module wiederverwenden. So kann ich den Standpunkt des Managements verstehen.

Gestern bin ich auf Scala gestoßen und habe mich gefragt, ob es besser wäre, dies mit dem aktuellen Produkt (das in C # geschrieben ist) zu verwenden, und dann werden wir in einem Jahr zumindest ein funktionierendes Produkt haben. Außerdem haben wir in einem Jahr Module, die in der Java-Welt verwendet werden können, während wir andere Teile des Produkts migrieren.

Wäre Scala eine bessere Wahl als Java, wenn man bedenkt, was wir erreichen wollen?

JD01
quelle
2
Alles in eine andere Sprache umschreiben? Und 2 Jahre mit nichts zu liefern? Klingt nach einer schrecklichen Entscheidung des Managements und als ob Sie in einem halben Jahr einen neuen Job brauchen könnten;)
zvrba
Ja, das wurde berücksichtigt. Ich bin mir nicht sicher, wo ich jetzt anfangen soll zu suchen und mich an C # halten soll :)
JD01
1
Das hört sich so an, als würden Sie etwas
back2dos

Antworten:

15

Einige Punkte zu beachten:

  • Scala ist eine großartige Sprache - aber es ist erwähnenswert, dass es auch eine ziemlich herausfordernde Sprache ist, richtig zu lernen und zu verwenden. Nicht nur meine Meinung - auch erfahrene Scala-Experten sagen es . Abhängig von den Fähigkeiten Ihres Teams eignet es sich wahrscheinlich am besten als Tool für Ihre erfahrensten / erfahrensten Entwickler
  • Java und C # sind sich in vielerlei Hinsicht ziemlich ähnlich - es dauert nicht lange, bis Entwickler, die in einem geschult sind, sich bewegen (die Syntax ist ähnlich, meistens geht es nur darum, die Macken der einzelnen Bibliotheken zu lernen und die verschiedenen Bibliotheken zu verstehen). die oft ähnliche Funktionen haben, aber unterschiedlich verpackt sind und / oder unterschiedliche Namen haben). Ich persönlich habe ohne Schwierigkeiten von Java zu C # und wieder zurück zu Java gewechselt.
  • Es ist auch erwähnenswert, dass alle JVM-Sprachen (Java und Scala, aber auch JRuby und Clojure usw.) sehr kompatibel sind - sie verwenden dieselbe grundlegende JVM-Plattform und können Code / Bibliotheken sehr einfach gemeinsam nutzen.

In Anbetracht dessen möchten Sie möglicherweise Ihre Wetten absichern und sich für eine gemischte Java / Scala-Strategie entscheiden - dh auf die JVM-Plattform migrieren und sich zunächst auf Java konzentrieren. Lassen Sie jedoch die Option offen, Scala zu verwenden, wenn Ihre Entwickler sich wohl fühlen und / oder es passt zum vorliegenden Problem.

Aus Managementsicht hat dies viele Vorteile:

  • Sie können weiterhin alle Bibliotheken gemeinsam nutzen, damit Ihre Investitionen sicher sind
  • Ihre weniger erfahrenen Entwickler können C # -> Java ziemlich schnell übertragen
  • Ihre erfahreneren Entwickler können die erweiterten Funktionen von Scala voll ausnutzen
  • Alle Tools sind kompatibel / können gemeinsam genutzt werden (Build-Systeme, IDEs, Bereitstellungstools usw.)
  • Sie erhalten freien Zugriff auf das sehr breite Open-Source-Ökosystem der Bibliotheken in der JVM (neben der plattformübergreifenden Portabilität ist dies wohl der beste Grund, auf der JVM-Plattform zu sein).
  • Ihre Entwickler können die Sprache verwenden, die sie aufgrund ihrer Fähigkeiten / der jeweiligen Aufgabe am produktivsten macht (Java in einigen Fällen, Scala in anderen, möglicherweise andere Sprachen wie Clojure in der Zukunft).

Der Nachteil ist, dass Sie noch zwei Hauptsprachen unterstützen müssen. Aber Sie haben wahrscheinlich bereits viel mehr als nur zwei (Shell-Skripte? Domänenspezifische XML-Formate? Konfigurationsdateien? Regel-Engines? HTML? Javascript?), So dass Sie argumentieren könnten, dass es eigentlich keine so große Sache ist.

mikera
quelle
Danke für die Auskunft. Ich versuche nur herauszufinden, was der beste Weg ist, und Sie haben einige ausgezeichnete Informationen gegeben. Im Moment haben wir einige gute OO-Entwickler, aber niemand, der mit funktionaler Programmierung vertraut ist.
JD01
1
Froh, dass ich Helfen kann! Es ist erwähnenswert, dass Scala eher eine auf mehreren Paradigmen / OOP basierende Sprache ist. Während Sie in Scala sicherlich FP machen können, sind Haskell oder Clojure wahrscheinlich näher an der Marke, wenn Sie Sprachen wünschen, die klarer im Fokus funktionieren.
Mikera
Wenn ich Clojure oder Scala vom ersten Tag an oder sogar, wie Sie in einer gemischten Strategie sagten, für die Wiederverwendung von Code verwendet habe, könnte ich Clojure / Scala-Code sowohl in .net als auch in Java wiederverwenden? Ich frage mich, ob dies ein gutes Verkaufsargument für das Management ist. Auf diese Weise könnten wir immer noch ein Produkt herausbringen (das alte Produkt mit neuen Funktionen) und auch auf dem Weg sein, vorhandenen Code in Java neu zu schreiben, wobei der Code die Clojure / Scala-Module wiederverwendet. Bin ich hier richtig im Denken oder eröffnet dies andere Probleme?
JD01
1
Sie können die Clojure / Scala-Funktionalität als Webdienst oder REST-Schnittstelle verfügbar machen, wenn Sie möchten. Das ist etwas mehr Aufwand als nur das direkte Erstellen einer Bibliothek (was die beste Option wäre, wenn Sie die Funktionalität aus Java / einer anderen JVM-Sprache aufrufen möchten), aber es würde sicherlich die Flexibilität geben, den Code von einem beliebigen Client aus aufzurufen (. Net, Java, Ruby usw.)
Mikera
Danke Mike. Ich denke, der Pfad für die Wiederverwendung von Code würde dem Management zumindest zeigen, dass mit der Option Scala / Clojure kein vollständiges Umschreiben erforderlich ist. Ich möchte nicht, dass wir wie Netscape enden :). Könnte ich beim Erstellen einer Bibliothek diese nicht ohne Webdienste in .net und Java verwenden?
JD01
15

Ich werde eine dritte Option hinzufügen. Hat sich jemand in Ihrer Organisation mit der Interop zwischen Ihren C # - und Java-Modulen befasst? Wie stellen Sie die C # -Funktionalität bereit? Sind SOAP- oder RESTFul-Webdienste eine Option?

Ein 2-jähriges Umschreiben kann für eine Organisation ein Todesstoß sein (fragen Sie einfach Netscape). Eine schrittweise Migration, während vorhandener Code gut miteinander spielt, hat jedoch möglicherweise weniger geschäftliche Auswirkungen.

Martijn Verburg
quelle
3

Das Umschreiben von C # in Scala ist genauso schwierig wie das Umschreiben in Java. Welche Sprache "besser" ist, dieser Punkt ist strittig, jede Sprache hat ihre eigenen Plus- und Minuspunkte.

Ich weiß nicht, wie groß Ihre Codebasis ist, aber 2 Jahre für 30 Entwickler scheinen für ein einfaches Umschreiben riesig zu sein. Java zu erlernen, wenn Sie C # kennen, ist einfach. Ich brauchte ein oder zwei Tage, um mich damit vertraut zu machen.

Mein Rat wäre, das Management ihren Weg finden zu lassen und die Tatsache zu genießen, dass Sie dafür bezahlt werden, Ihre Fähigkeiten zu erweitern.

Tom Squires
quelle
Nur etwa 10 Entwickler werden an dem neuen Produkt arbeiten. Ich versuche nur herauszufinden, was die Vor- und Nachteile von Scala sind.
JD01
1
Ich weiß nicht genug über die Besonderheiten Ihres Projekts oder Ihrer Scala, um Ihnen eine eindeutige Antwort zu geben. Es scheint mir jedoch, dass die Einführung einer dritten Sprache, die niemand kennt, die Sache nur komplizieren würde.
Tom Squires
Du hast vielleicht recht. Ich habe darüber nachgedacht, ein Produkt in ungefähr einem Jahr herauszubringen und gleichzeitig Code in .net und Java wiederverwenden zu können. Ihre Punkte sind gut notiert :)
JD01
1

Ich denke, die einfachere Option wäre, die Java-Entwickler dazu zu bringen, C # zu lernen. Beide Sprachen sind sich in vielerlei Hinsicht sehr ähnlich und es dauert nicht lange, bis ein Java-Entwickler C # gelernt hat. Ich habe mit vielen Java-Entwicklern zusammengearbeitet, die C # gelernt haben, und es ist normalerweise ein reibungsloser Übergang. Der einzige Bereich, in dem sie für eine Weile stecken bleiben könnten, ist das WebForms-Programmiermodell. Java-Entwickler passen sich besser an das MVC-Paradigma an. Auf diese Weise müssen Sie nicht ein Jahr warten, bevor Sie mit der Entwicklung neuer Funktionen beginnen. In Bezug auf Scala befürchte ich, dass dies ein völlig neues Problem für alle 30 Entwickler mit sich bringen wird, die versuchen, eine neue Sprache zu lernen.

Sriram
quelle
Es gibt so viele Produkte, die in Java geschrieben sind, dass es schwierig wäre, sie dazu zu bringen, C # zu lernen. Ich hatte mit Scala gehofft, sobald wir das neue Produkt haben, könnten die Java-Entwickler Bibliotheken so wie sie sind verwenden, ohne Scala lernen zu müssen.
JD01
2
Wäre es nicht in Ordnung, wenn Sie Ihren vorhandenen .NET-Code als Dienste verfügbar machen würden, die die Java-Entwickler aufrufen und alle neuen Funktionen in Java entwickeln können?
Sriram
Das war in der Vergangenheit vorgeschlagen worden, aber es wurde entschieden, dass wir uns von .net entfernen.
JD01
Beeindruckend! Dann würde ich es einfach halten und den Code in Java neu schreiben. Ich denke, Scala würde eine weitere Komplexität für die Verwaltung einführen und es wäre für das Management schwer zu verkaufen.
Sriram