Escolhendo a próxima linguagem da JVM

Em seu artigo da série Java.next, intitulado “Choosing your next JVM language”, Neal Ford – arquiteto de software na ThoughtWorks – comenta sobre a JVM como plataforma para outras linguagens e apresenta comparações entre Groovy, Scala e Clojure.

Neal diz que entramos em um mundo poliglota de linguagens de programação e que os números estão aumentando. Há mais de 200 linguagens que rodam sobre a JVM. Muitas dessas linguagens são multiparadigmas, como Groovy e Scala (ambas orientadas a objeto e funcionais).

Há situações onde um paradigma fornece uma solução melhor do que outro, e a mistura de paradigmas possibilitam formas elegantes e facilitadas de resolver determinados problemas. Entretanto, em um mundo de múltiplos paradigmas, é preciso ter disciplina, pois a utilização de múltiplos paradigmas significa ter diferentes abstrações, filosofias e princípios no mesmo código. Em grandes projetos corre-se o risco de ter duplicações grotescas de código em paradigmas diferentes.

Ao desenvolver uma API, todo o time deve entender e concordar com o estilo a ser adotado.

O paradigma funcional é o destaque do artigo. É afirmado que “a chave para a eficácia do paradigma funcional está na habilidade de expressar ideias em um alto nível de abstração”.

No restante do artigo, Neal aborda características do paradigma funcional e faz um breve comparativo das linguagens Groovy, Scala e Clojure.

“Functional programming languages give you the ability to work at a higher level of abstraction using more-powerful building blocks, such as map() in preference to loops. When you’re freed from focusing on low-level code details, you can focus more clearly on more-relevant problems.”

É interessante observar as sugestões de uso de cada tipo de linguagem e paradigma para as diferentes camadas de uma aplicação, como por exemplo, qual a melhor abordagem para o desenvolvimento do core ou de uma DSL.

O artigo completo pode ser conferido no developerWorks.

Leave a Reply

Your email address will not be published. Required fields are marked *