Disclaimer: sono di parte mentre scrivo un libro sulla programmazione di Polyglot su JVM (Shameless Plug !! - The Well-Grounded Java Developer) :)
In primo luogo, dovresti introdurre il cambiamento solo dove è veramente giustificato!
Un buon punto di partenza è considerare la piramide del linguaggio di programmazione di Ola Bini. Ola parla di lingue stabili, dinamiche e specifiche del dominio.
Java è un linguaggio stabile (digitato staticamente e gestito) e per vari motivi (posso approfondirli in seguito se le persone sono interessate) non è la scelta ideale per progetti di livello dinamico (ad es. Rapid Web Development) o progetti di livello specifici del dominio (ad es. Modellazione il dominio Enterprise Integration Pattern). Se hai un progetto che si adatta a uno di quei livelli, quello può essere un buon punto di partenza.
Puoi anche prendere in considerazione l'introduzione di un nuovo linguaggio a livello stabile per sostituire Java se esiste una caratteristica fondamentale che offre il linguaggio alternativo. Ad esempio, Scala gestisce semplicemente la concorrenza in un modo più sicuro e naturale rispetto a Java.
Come richiesto, ancora un po 'su questo. WRT Java:
- La ricompilazione è laboriosa
- La digitazione statica può essere poco flessibile e portare a lunghi tempi di refactoring
- La distribuzione è un processo pesante
- La sintassi di Java non si adatta perfettamente alla produzione di DSL
A questo punto, potresti chiederti: “Che tipo di sfide di programmazione rientrano in questi livelli? Quale lingua (e) dovrei scegliere? ”, Ricordi che non esiste un proiettile d'argento, ma ho alcuni criteri che potresti prendere in considerazione quando valuti le tue scelte.
Domain-Specific
- Build / Integrazione continua / Implementazione continua
- Dev-ops
- Modellazione di modelli di integrazione aziendale
- Modellazione di regole aziendali
Dinamico
- Rapido sviluppo Web
- Prototipazione
- Console interattive di amministrazione / utente
- Scripting
- Test Driven Development / Behavior Driven Development
Stabile
- Codice concorrente
- Contenitori per applicazioni
- Funzionalità core business
Inizia con un piccolo modulo a basso rischio (ricorda, questi linguaggi JVM spesso interagiscono magnificamente con il codice Java esistente) o progetto. Metti in chiaro che questo sarà un prototipo da buttare via.
Assicurati di aver studiato il ciclo di vita della programmazione e gli aspetti relativi agli strumenti per quella lingua. Dovrai assicurarti di poter TDD, eseguire strumenti di costruzione e integrazione continua, avere un potente supporto IDE e tutti questi altri fattori. Per alcune lingue dovrai solo accettare che alcuni strumenti non ci sono o sono molto semplici. La forza dello sviluppatore e il supporto degli strumenti può superare la forza di una lingua.
Assicurati che ci sia una comunità vibrante che possa aiutare la tua squadra quando rimangono bloccati. I gruppi di utenti locali sono ancora migliori per questo.
Assicurati che gli sviluppatori ricevano la formazione linguistica iniziale, specialmente se la lingua non è un linguaggio in stile OO (passare a Clojure non è banale).
Questo è tutto, penso. Personalmente ho usato con successo Groovy, Scala e Clojure nel mio sviluppo insieme a Java per attività come l'elaborazione XML, la creazione di siti Web rapidi e l'esecuzione di alcuni dati.