Isenção de responsabilidade: sou tendencioso enquanto escrevo um livro sobre programação Polyglot na JVM (Shameless Plug !! - The Java-Grounded Java Developer) :)
Em primeiro lugar, você só deve introduzir a alteração onde ela for realmente justificada!
Um bom lugar para começar é considerar a pirâmide da linguagem de programação de Ola Bini. Ola fala sobre idiomas estáveis, dinâmicos e específicos de domínio.
Java é uma linguagem estável (digitada e gerenciada estaticamente) e, por várias razões (posso abordar isso mais tarde, se as pessoas estiverem interessadas) não é a escolha ideal para projetos de camada dinâmica (por exemplo, Rapid Web Development) ou projetos de camada específicos de domínio (por exemplo, modelagem o domínio Padrão de Integração Corporativa). Se você tem um projeto que se encaixa em uma dessas camadas, esse pode ser um bom lugar para começar.
Você também pode considerar a introdução de uma nova linguagem na camada estável para substituir o Java se houver um recurso fundamental que a linguagem alternativa ofereça. Por exemplo, o Scala simplesmente lida com a concorrência de maneira mais segura e natural do que o Java.
Conforme solicitado, um pouco mais sobre isso. WRT Java:
- A recompilação é trabalhosa
- A digitação estática pode ser inflexível e levar a longos tempos de refatoração
- A implantação é um processo pesado
- A sintaxe do Java não é um ajuste natural para a produção de DSLs
Nesse ponto, você pode estar se perguntando: “Que tipo de desafios de programação se encaixam nessas camadas? Qual idioma devo escolher? ”, Lembre-se de que não há uma bala de prata, mas tenho alguns critérios que você pode considerar ao avaliar suas escolhas.
Específico do domínio
- Construção / Integração Contínua / Implantação Contínua
- Dev-ops
- Modelagem de padrões de integração corporativa
- Modelagem de Regras de Negócios
Dinâmico
- Desenvolvimento rápido da Web
- Prototipagem
- Consoles administrativos / de usuário interativos
- Script
- Desenvolvimento Orientado a Testes / Desenvolvimento Orientado a Comportamentos
Estábulo
- Código concorrente
- Contêineres para aplicativos
- Funcionalidade de negócios principal
Comece com um pequeno módulo de baixo risco (lembre-se, essas linguagens da JVM geralmente interagem com o código Java existente lindamente) ou projeto. Deixe claro que este será um protótipo descartável.
Verifique se você investigou o ciclo de vida da programação e os aspectos de ferramentas para esse idioma. Você quer ter certeza de que pode TDD, executar ferramentas de construção e Integração Contínua, ter poderoso suporte a IDE e todos esses outros fatores. Para alguns idiomas, basta aceitar que determinadas ferramentas não existem ou são muito básicas. A força do desenvolvedor e o suporte de ferramentas podem superar a força de um idioma.
Verifique se há uma comunidade vibrante que possa ajudar sua equipe quando ficarem paralisadas. Grupos de usuários locais são ainda melhores para isso.
Certifique-se de que os desenvolvedores recebam o treinamento inicial de idiomas, especialmente se o idioma não for um estilo de OO (a mudança para o Clojure não é trivial).
É sobre isso, eu acho. Pessoalmente, usei Groovy, Scala e Clojure em meu desenvolvimento juntamente com Java para tarefas como processamento XML, criação de sites rápidos e processamento de dados.