De que se trata o artigo:

O artigo apresenta algumas tecnologias que podem trazer produtividade ao desenvolvimento. São comparadas e discutidas as principais ferramentas RAD do mercado, assim como diferentes linguagens para a JVM.

Em que situação o tema é útil:

O tema é útil para gestores, desenvolvedores e curiosos que pretendem projetar sistemas com qualidade e rapidez na plataforma Java. Surpreenda-se com o potencial da Máquina Virtual Java para executar diferentes linguagens e conheça, ainda, quais as tecnologias mais adequadas para ganhar produtividade em diversas situações.

Resumo DevMan:

Construir aplicações web utilizando a linguagem Java não era uma tarefa trivial há 10 anos. Isso porque as diversas tecnologias necessárias aos projetos desperdiçavam muito tempo com questões não relacionadas à lógica do negócio, como por exemplo, configurações de arquivos XML. Contudo, houve muitos esforços de grandes empresas para mudar este cenário a fim de tornar o Java mais produtivo. Neste artigo são apresentadas duas vertentes destes esforços: as ferramentas RAD e as linguagens para a JVM. Discutimos e comparamos as principais tecnologias do mercado, assim como as situações mais adequadas para utilizar cada uma.

Autores: José Alexandre Macedo e Danilo Braga de Lima

Ao longo da história, é possível notar que a necessidade de produzir algo repetidamente nos remete sempre à mesma questão de produzirmos mais, com mais agilidade e sem perdermos a qualidade no que está sendo feito. Trazendo isso para nosso mundo, percebemos este fato ocorrer no processo de desenvolvimento de software, onde cada vez mais as empresas estão buscando a inovação de suas metodologias de modo a terem maiores ganhos com menos esforço.

Neste contexto, a produtividade está aliada ao uso de metodologias e ferramentas que, de alguma forma, podem facilitar a execução das tarefas pertinentes à construção de um sistema. No entanto, o que vem ocorrendo no mercado de software é uma adoção massiva deste conceito de produtividade, e em alguns casos isto pode comprometer todo o processo, no qual o que era para se tornar mais produtivo acaba gerando grandes problemas.

A produtividade não é algo simples de ser medido. Não existem parâmetros definidos para caracterizarmos determinada tecnologia como sendo produtiva ou não. Porém, se analisarmos os recursos disponíveis nas linguagens e ferramentas consideradas produtivas pelos desenvolvedores, podemos selecionar técnicas que aparentemente ajudam a aumentá-la. Dois exemplos são: scaffolding e convenção sobre configuração. Estas técnicas possuem um fator em comum, o objetivo de focar o desenvolvimento na lógica de negócio da aplicação, ou seja, se existem códigos que precisam realmente ser implementados, são os relativos ao negócio do cliente. O restante pode (e deve) ser automatizado.

Scaffolding: é uma funcionalidade que permite criar uma aplicação desde a base de dados até a camada de apresentação. Neste processo são geradas a estrutura inicial das pastas, arquivos de configuração, as dependências necessárias e CRUDs básicos, normalmente baseados no padrão MVC.

É importante deixarmos claro que a produtividade é apenas uma das preocupações dos gestores. Dessa forma, antes de adotar novas tecnologias, eles sempre analisarão todo o contexto do projeto para verificar quais serão as implicações. Isso porque não podemos, por exemplo, sacrificar a manutenibilidade pela produtividade. Cada aplicação também possui suas prioridades, e o melhor sempre será aliar a produtividade com estas prioridades. Além disso, incluir novas ferramentas ou linguagens nos projetos aumentam os riscos a serem considerados.

Podemos dizer que muitas mudanças que estão acontecendo ao redor do Java se motivaram pelo surgimento de tecnologias mais produtivas, como a linguagem Ruby e o seu framework para web, o Rails. Isso fez com que big players do mercado como SpringSource, JBoss e Sun parassem para pensar no que estava errado e o que precisava ser melhorado. Não é novidade para nós o que estava errado. Escrever uma aplicação Java para web há alguns anos era algo complicado que exigia um conhecimento profundo de dezenas de tecnologias. Com isso, as soluções encontradas pelas empresas para trocar complexidade por produtividade variaram de ferramentas geradoras de código a novas linguagens na JVM.

Com base nisso, neste artigo apresentaremos os principais caminhos para que o desenvolvedor ganhe produtividade na plataforma Java. As possibilidades envolvem dois grandes conjuntos discutidos separadamente, as ferramentas RAD e as linguagens na JVM. Na seção das ferramentas RAD, procuramos mostrar quem são elas, quando utilizá-las, assim como uma explicação e comparação das principais opções do mercado. Já na seção das linguagens na JVM, revelamos as melhorias e importância da Máquina Virtual Java, falamos de produtividade com novas linguagens criadas para ela (Groovy e Scala), assim como através de linguagens portadas (Ruby e Python). Além disso, foi realizada uma comparação entre estas abordagens. Por fim, na seção “A Hora da Escolha”, discutimos quando determinada solução é mais adequada do que outra, buscando fornecer um apoio durante a tomada de decisão na escolha de uma nova tecnologia.

Ferramentas RAD

O conceito de RAD foi definido por James Martin no livro “Rapid Application Development” em 1991. RAD é um processo iterativo e incremental que visa um ciclo de desenvolvimento curto, projetado para dar maior agilidade e melhor qualidade nos resultados quando comparados com os alcançados pelo modelo tradicional (naquela época o modelo Waterfall).

Esta metodologia de desenvolvimento de software envolve pessoas, processos organizacionais e ferramentas que apoiam a construção de sistemas. Neste artigo nos limitaremos apenas às ferramentas, mais precisamente às que realizam a geração automatizada de código.

Por que utilizar?

Independente da metodologia utilizada para o desenvolvimento de software, esta é uma tarefa que sempre exige muitos recursos, seja dinheiro, tempo ou pessoas. Dessa forma, é sempre necessário encontrar maneiras viáveis para tornar este processo menos custoso sem perder o foco na qualidade do produto/serviço realizado.

Uma questão intrínseca ao desenvolvimento, é que ao se iniciar um projeto, muitos desenvolvedores se deparam com atividades extremamente necessárias para o mesmo, mas não diretamente relacionadas com as regras de negócio a serem implementadas – as quais devem ser sempre o foco principal. Dessa forma, é comum ao desenvolvedor consumir certa quantia de tempo somente para atividades que envolvem a definição das configurações iniciais do projeto (scaffolding), tais como: estrutura da aplicação, gerenciamento de dependências, configurações básicas do ambiente de desenvolvimento, inclusão de frameworks e algumas outras questões relativas à parte técnica do projeto. Com isso, esta etapa pode tomar um tempo valioso para o desenvolvimento, pois o desenvolvedor tem que compartilhar suas atividades com as configurações do projeto e certamente não terá o prazo suficiente para desenvolver de forma correta, seguindo boas práticas de programação.

Além disso, as ferramentas RAD podem auxiliar na reusabilidade de componentes de software, principalmente em componentes de interface gráfica. É muito comum, nas aplicações, termos um padrão definido para as telas, e dessa forma, é possível aproveitar os mesmos componentes em vários lugares da aplicação e reduzir o tempo gasto no desenvolvimento.

...
Quer ler esse conteúdo completo? Tenha acesso completo