Descargo de responsabilidad: soy parcial ya que estoy escribiendo un libro sobre programación Polyglot en el JVM (Shameless Plug !! - The Well-Grounded Java Developer) :)
En primer lugar, ¡solo debes introducir el cambio donde esté realmente garantizado!
Un buen lugar para comenzar es considerar la pirámide del lenguaje de programación de Ola Bini. Ola habla de lenguajes específicos de dominio, estables y dinámicos.
Java es un lenguaje estable (estáticamente tipado y administrado) y por varias razones (puedo entrar en esto más adelante si la gente está interesada) no es una opción ideal para proyectos de capa dinámica (por ejemplo, Desarrollo web rápido) o proyectos de capa específicos de dominio (por ejemplo, modelado el dominio del Patrón de integración empresarial). Si tiene un proyecto que encaja en una de esas capas, entonces ese puede ser un buen lugar para comenzar.
También puede considerar la introducción de un nuevo lenguaje en la capa estable para reemplazar Java si hay una característica fundamental que ofrece el lenguaje alternativo. Por ejemplo, Scala simplemente maneja la concurrencia de una manera más segura y natural que Java.
Según lo solicitado, un poco más sobre esto. WRT Java:
- La compilación es laboriosa
- La escritura estática puede ser inflexible y conducir a largos tiempos de refactorización
- La implementación es un proceso pesado
- La sintaxis de Java no es un ajuste natural para producir DSL
En este punto, puede que se pregunte: “¿Qué tipo de desafíos de programación encajan dentro de estas capas? ¿Qué idioma (s) debo elegir? ”, Recuerde que no hay una bala de plata, pero tengo algunos criterios que podría considerar al evaluar sus elecciones.
Dominio específico
- Compilación / Integración continua / Implementación continua
- Dev-ops
- Modelado de patrones de integración empresarial
- Modelado de reglas comerciales
Dinámica
- Desarrollo web rápido
- Prototipos
- Consolas interactivas administrativas / de usuario
- Scripting
- Desarrollo guiado por pruebas / Desarrollo guiado por el comportamiento
Estable
- Código concurrente
- Contenedores de aplicaciones
- Funcionalidad comercial central
Comience con un pequeño módulo de bajo riesgo (recuerde, estos lenguajes JVM a menudo interactúan maravillosamente con el código Java existente) o proyecto. Deje en claro que este será un prototipo descartable.
Asegúrese de haber investigado el ciclo de vida de la programación y los aspectos de herramientas para ese lenguaje. Deberá asegurarse de que puede TDD, ejecutar herramientas de compilación e integración continua, tener un poderoso soporte IDE y todos esos otros factores. Para algunos idiomas, solo tendrá que aceptar que ciertas herramientas no están allí o son muy básicas. La fuerza del desarrollador y el soporte de herramientas pueden superar la fuerza de un lenguaje.
Asegúrese de que haya una comunidad vibrante que pueda ayudar a su equipo cuando se estanquen. Los grupos de usuarios locales son aún mejores para esto.
Asegúrese de que los desarrolladores obtengan la capacitación inicial en idiomas, especialmente si el idioma no es un estilo de OO (el cambio a Clojure no es trivial).
Eso es todo, creo. Personalmente, he utilizado con éxito Groovy, Scala y Clojure en mi desarrollo junto con Java para tareas como el procesamiento de XML, la creación de sitios web rápidos y el procesamiento de algunos datos.