segunda-feira, março 28, 2005

KISS

Simplicidade é um conceito que ganha pontos comigo a cada dia e em quase tudo que faço ultimamente me pergunto duas coisas: Isso é simples? Se não é o suficiente, eu preciso da complicação que criei? Alias, esse é o tipo de pergunta que surge na minha cabeça a cada cinco minutos enquanto estudo Ruby. Sempre tento pensar sobre os paradigmas de Java e muitos deles não fazem sentido algum em Ruby. Mas, voltemos à simplicidades: é um tanto complicado dizer que algo é simples ou não porque isso depende, e muito, do ponto de vista e conhecimentos de quem julga. A combinação Hibernate + Spring + WebWork, por exemplo, pode parecer um monstro se quem olha não tem conhecimento de nenhum dos três e, talvez, principalmente, se não conhece os padrões e idéias sobre as quais cada um destes foi construído. Abstração e independência de banco de dados, loose coupling com IoC e AOP, MVC e Command simplesmente não têm utilidade se você nunca usou e, mais do que isso, se você nunca precisou usar.

Enquanto lia o ótimo Better, Faster, Lighter Java, vi, ou melhor, revi simplicidade como um conceito fundamental no desenvolvimento de software, mas, revi também que ser simples está tão distante de ser simplista quanto possível. E é aí que mora o perigo. É muito comum confundir os dois conceitos e tentar criar coisas simplistas que ferem outros conceitos fundamentais de desenvolvimento como pouco acoplamento e extensibilidade apenas para ficar nos mais conhecidos. É comum não usar um determinado e emergente, e entenda por emergente adequado ao problema, padrão de projeto quando você decide que não vai pagar os custos em troca dos benefícios apenas porque usar o padrão lhe parece ferir demais a simplicidade. Ou seja, você tende ao simplista.

Aqui onde trabalho a arquitetura passa pelos dois frameworks abordados no Better, Faster, Lighter Java: Hibernate e Spring e ainda pelo WW. Alguns projetos são feitos em PHP e o debate surgiu daí. PHP é sem sombra de duvidas mais simples (ou seria simplista?), configurá-lo para funcionar com o Apache, diferente do Tomcat, é moleza e a curva de aprendizado, maior trunfo da linguagem, é ridícula de tão pequena. Em um fim de semana aprendi o suficiente para desenvolver um dos pequenos projetos. Acontece que para os projetos maiores PHP não é satisfatório, ou ao menos não parece ser, pois precisamos da tal abstração ao banco de dados (Hibernate), melhor separation of concerns como a provida pelo MVC (WW) e um container de IoC (Spring) que nos ajude a pensar em componentes e maior capacidade de reuso.

A meu ver, nenhum desses frameworks é extremamente complicado. Alias, por focarem bem nos problemas que se prestam a resolver, eles são até bem simples. Claro, Ã primeira vista, juntar todos e jogar na cabeça de alguém pode não ser a melhor das idéias, mas não se pode negar que os benefícios oferecidos por cada um deles pagam com folga as complicações iniciais que trazem.

valeuz...

Jablo: Talvez mais tarde

Pois é, depois de insistir um bocado quanto a usar o Jablo, descobri não era mais possível manter um blog por lá. Isso porque em boa parte do tempo o sistema está fora do ar e ler "Server Error" ou "HTTP 404" não é algo lá muito instrutivo. Eu espero muito sinceramente que o Jablo consiga resolver as broncas com hosting e, se conseguir, volto a escrever com prazer. Por enquanto, vou tentar repaginar alguns dos textos que escrevi por lá e publicar aqui.

valeuz...