Haftungsausschluss: Ich bin voreingenommen, als ich ein Buch über Polyglot-Programmierung auf der JVM (Shameless Plug !! - The Well-Grounded Java Developer) schreibe :)
Erstens sollten Sie die Änderung nur dort einführen, wo dies wirklich gerechtfertigt ist!
Ein guter Anfang ist die Betrachtung der Programmiersprachenpyramide von Ola Bini. Ola spricht über stabile, dynamische und domänenspezifische Sprachen.
Java ist eine stabile Sprache (statisch typisiert und verwaltet) und aus verschiedenen Gründen (ich kann später darauf eingehen, wenn Leute interessiert sind) keine ideale Wahl für dynamische Layer-Projekte (z. B. Rapid Web Development) oder domänenspezifische Layer-Projekte (z. B. Modellierung) die Enterprise Integration Pattern-Domäne). Wenn Sie ein Projekt haben, das in eine dieser Ebenen passt, kann dies ein guter Anfang sein.
Sie können auch eine neue Sprache auf der stabilen Ebene einführen, um Java zu ersetzen, wenn die alternative Sprache eine grundlegende Funktion bietet. Zum Beispiel behandelt Scala die Parallelität einfach sicherer und natürlicher als Java.
Wie gewünscht, noch etwas dazu. WRT Java:
- Die Neukompilierung ist mühsam
- Statische Typisierung kann unflexibel sein und zu langen Refactoring-Zeiten führen
- Die Bereitstellung ist ein schwerer Prozess
- Die Syntax von Java eignet sich nicht für die Erstellung von DSLs
An dieser Stelle fragen Sie sich möglicherweise: „Welche Art von Programmierherausforderungen passen in diese Ebenen? Welche Sprache (n) soll ich wählen? “, Denken Sie daran, dass es keine Silberkugel gibt, aber ich habe einige Kriterien, die Sie bei der Bewertung Ihrer Auswahl berücksichtigen könnten.
Domain-spezifisch
- Erstellen / Kontinuierliche Integration / Kontinuierliche Bereitstellung
- Dev-ops
- Modellierung von Unternehmensintegrationsmustern
- Modellierung von Geschäftsregeln
Dynamisch
- Schnelle Webentwicklung
- Prototyp entwickeln
- Interaktive Administrations- / Benutzerkonsolen
- Skripting
- Testgesteuerte Entwicklung / Verhaltensgesteuerte Entwicklung
Stabil
- Gleichzeitiger Code
- Anwendungsbehälter
- Kerngeschäftsfunktionalität
Beginnen Sie mit einem kleinen Modul mit geringem Risiko (denken Sie daran, dass diese JVM-Sprachen häufig wunderbar mit vorhandenem Java-Code interagieren) oder einem Projekt. Machen Sie deutlich, dass dies ein Wegwerfprototyp sein wird.
Stellen Sie sicher, dass Sie den Programmierlebenszyklus und die Werkzeugaspekte für diese Sprache untersucht haben. Sie sollten sicherstellen, dass Sie TDD können, Build-Tools und Continuous Integration ausführen, leistungsstarke IDE-Unterstützung und all diese anderen Faktoren haben. Für einige Sprachen müssen Sie nur akzeptieren, dass bestimmte Werkzeuge nicht vorhanden oder sehr einfach sind. Die Stärke des Entwicklers und die Werkzeugunterstützung können die Stärke einer Sprache überwiegen.
Stellen Sie sicher, dass es eine lebendige Community gibt, die Ihrem Team helfen kann, wenn es nicht weiterkommt. Lokale Benutzergruppen sind dafür noch besser.
Stellen Sie sicher, dass die Entwickler das erste Sprachtraining erhalten, insbesondere wenn die Sprache keine Sprache im OO-Stil ist (der Wechsel zu Clojure ist nicht trivial).
Das war's auch schon, denke ich. Ich persönlich habe Groovy, Scala und Clojure in meiner Entwicklung zusammen mit Java erfolgreich für Aufgaben wie XML-Verarbeitung, Erstellung schneller Websites und Datenverarbeitung verwendet.