1 de setembro de 2008

Java, complexidade, opções

Sou um devotado programador Java. Gosto da linguagem - apesar de achá-la um tanto verborrágica - e principalmente do universo de bibliotecas disponíveis para a mesma: apache (sigh... foi mal. Passei o dia configurando o Apache server) jakarta commons, Spring, JPA, etc.

Mas ultimamente me pego pensando se para o tipo de trabalho que normalmente tenho de fazer, não estou me apegando a linguagem/ambiente errado.

Veja: eu, basicamente, construo interfaces web para bancos de dados.

Eu poderia tentar dourar a pílula, poderia tentar inventar um nome mais pomposo ou adicionar outras coisas que faço no processo da construção dessas interfaces, mas o fato permanece que no fundo no fundo, todo meu esforço redunda numa interface web para um banco de dados. Vá lá, na maioria das vezes eu sou o designer do banco de dados ou pelo menos tenho poder de veto em como o modelo do banco vai ser. Mas meu resultado final: uma interface web pra um banco de dados.

Servlets e JSPs, com JDBC. Certo? Simples, e funciona. Mas você escreve pra caramba. E reutiliza pouco. Então acabamos adotando alguma web framework - Struts, Spring MVC, Wicket, Stripes... A complexidade aumenta um pouco na configuração, mas se escreve menos.

E escrever SQL? Quem faz isso? Hibernate! Ou Toplink via JPA! Todo o sentido do mundo - cria-se uma abstração orientada a objetos em cima de um banco de dados relacional. Pra que escrever SQL? Só naqueles casos em que a performance precisa ser máxima! E você pode reutilizar seus modelos!!! E tudo é POJO se você utilizar dependency injection via Spring!!!

A minha produtividade não aumenta com a adoção desses add-ons todos. Pelo contrário. Eu aos poucos virei um escravo dos add-ons. E de repente passo mais tempo configurando e preparando o ambiente do que realmente resolvendo as necessidades dos meus usuários por uma página web que apresenta/edita/cria dados num banco de dados. E a quantidade de documentação que eu tenho de ler? Bíblias pra cada uma das tecnologias.

Não estou dizendo que a culpa é do java ou dos add-ons. Estou dizendo que eu acho que trabalho mais do que o necessário para poder chegar ao ponto de começar o meu trabalho de verdade. Não está funcionando pra mim.

Há um ano, mais ou menos, olhei Ruby On Rails. Gostei. Mas achei que a coisa era uma mudança de paradigma grande demais pra mim. Era fácil fazer o básico, mas fazer o complexo, dar o próximo passo, requeria de mim um investimento de tempo que eu simplesmente não tinha. E, nenhuma ofensa a ninguém, questão de gosto particular, não gostei de Ruby. E a comunidade RoR tem em seu lider um sujeito quase tão insuportável quanto o Gavin King do Hibernate... DHH (David Heinemeier Hansson), como Gavin, não é um sujeito paciente e bacana. Eu sou de opinião que podemos espressar nossas opiniões sem chamar todo mundo de idiota... Mas isso sou eu.

Comecei a olhar Python primeiro como uma scripting language pra resolver pequenos problemas administrativos. Funcionou bem e eu adorei a linguagem. Não sei explicar porque. Fez sentido e ressonou comigo.

Ai, encafifado com a minha incapacidade de produzir mais rápido em Java, comecei a explorar web frameworks em Python. Primeiro vi TurboGears. Achei OK. Mas descobri Django!

OK, Descobri talvez seja um excesso. Estou descobrindo. E estou gostando.

Pra início de conversa a aplicação de administração que é construida automaticamente com base nos objetos python que abstraem o banco de dados, é a melhor coisa em termos de geração de código que eu já vi. 90% das interfaces que eu preciso desenvolver se encaixariam no que essa interface de administração faz automaticamente, de graça, só baseado nos objetos que abstraem as tabelas do banco. Essa interface de administração é diferente do Scaffolding provido pelo Rails. Os objetivos são diferentes. As scaffoldings do Rails são um ponto de partida, enquanto a interface de administração do Django é uma sólida implementação de uma aplicação de Content Management automática pra sua aplicação web.

Mas não é só isso: o fato de que você pode com facilidade fazer o design das suas URLs com expressões regulares, que o sistema de templates é simples mas já conta com um suporte parecido com o do sitemesh ou tiles em java (basicamente uma template herda de outra e só precisa override o que interessa), e a simplicidade semi-arcana da abstração das tabelas do banco - não só pra bancos de dados novos, mas pra bancos pré-existentes...

E tudo MUITO veloz. E tudo numa linguagem só - Python.

Estou empolgado. Pela primeira vez em muito tempo estou me divertindo com desenvolvimento web, com velocidade de produção e num ambiente e línguagem que me são confortáveis. Sim, sinto falta de algumas coisas - por exemplo nada se compara a Rails Migrations - mas acho que com o amadurecimento do Django esses vácuos vão se preencher.

Tentarei postar aqui sobre minhas incursões.

Um comentário:

Anônimo disse...

Faz tempo que não posta aqui hein.
Sou desenvolvedor Java e já passei por tudo isso tb.
Dá uma olhada em Grails!