Rolou ontem no RioJUG, a palestra do Fábio Kung, como eu havia avisado aqui. Tratou-se da mesma palestra dada por ele no Falando em Java deste ano: A nova versão do GUJ.com.br que usará JRuby on Rails.

Ele falou das desvantagens do Rails e como superá-las com o JRuby e algumas bibliotecas Java, onde os gems com códigos nativos em C, não podem ser usados.

Foi a segunda vez que eu assisti essa palestra e serviu pra reforçar o meu objetivo de cair dentro de Ruby este ano :)

Foi na apresentação do Guilherme Silveira no Falando em Java 2008 que eu ouvi falar a primeira vez sobre Janelas Quebradas. Depois disso, percebi que este assunto não é nada novo na engenharia de softwares e que ele é abordado num livro que eu acabei de comprar e está na fila pra ser lido: The Pragmatic Programmer: From Journeyman to Master. Trata-se de uma teoria baseada num experimento que criminologistas americanos fizeram:

Um automóvel foi deixado em um bairro de classe alta na Califórnia. Na primeira semana, o carro não foi danificado. Os pesquisadores então quebraram uma das janelas. Poucas horas depois, o carro foi completamente destroçado e roubado por grupos vândalos.

Eu já pude acompanhar este fenômeno duas vezes. Na primeira vez foi um ciclo bem parecido com o experimento original, mas não foi proposital: Eu era criança e morava num prédio onde o irmão de um morador deixou seu carro estacionado. O carro estava bem sujo e meio amassado em algumas partes. Em pouco tempo, este carro virou o assento padrão de todas as crianças do prédio, depois já estava sem as janelas e então mais tarde, dois indivíduos - que não eram crianças - roubaram a bateria do carro. O caso foi sério, no final deu uma grande confusão e os caras que roubaram a bateria acabaram levando a culpa de tudo. Posso apostar que se o carro estivesse em, não vou nem dizer perfeitas, mas em condições normais, assim como todos os carros que estavam na garagem do prédio, isso não teria acontecido.

Na segunda vez que eu vi este fenômeno, ele não chegou a causar muitos estragos. E o que nos poupou de estragos maiores foi o fato das pessoas terem enxergado que tínhamos uma “Janela Quebrada”. Eu falei aqui no blog sobre o Mau Copiador, o cara que senta pra desenvolver o sistema sem saber o que está fazendo e vai copiando o código dos sites, dos outros sistemas da empresa, de todo mundo e de qualquer maneira. Pois é, ele era uma janela quebrada e estava lá na empresa para fazer com que todo um sistema, ou até a empresa inteira fosse por água abaixo, ou melhor, por janela abaixo (com trocadilho).

Acontece que esse cara não era mau em se auto promover para as pessoas que não viam o código que ele gerava e com isso ele acabou ganhando a tarefa de treinar os estagiários que entraram no projeto. E aí não foram só janelas quebradas, foram portas, mesas, cadeiras e tudo mais que viam pela frente até que os gerentes foram alertados e medidas foram tomadas.

Não posso dizer que não houve estragos, eu perdi algumas boas horas corrigindo “cópias mal feitas em larga escala” no sistema, mas nada que um bom Refactoring - e eu gosto de refactoring - não resolvesse.

O Guilherme Silveira apontou o cuidado para não deixar janelas quebradas no sistema como um dos hábitos que os arquitetos de softwares altamente eficazes devem ter.

Eu estava escrevendo um comentário para o artigo “Domain-Driven Design é Simples: Basta Chamar DAOs de Repositórios” do Phillip Calçado, mas acabei escrevendo muito e achei melhor comentar por aqui.

Na empresa onde trabalho, uma empresa de três letrinhas, tentamos implantar DDD em um projeto, mas é difícil fazer isso já que quem tem contato com o cliente não somos nós, os desenvolvedores. O que chega para nós já é a “solução de todos os problemas” que o analista de sistemas criou enquanto conversava com o cliente. Na verdade, a nossa linguagem ubíqua não é feita entre o cliente e nós, mas sim entre nós e o analista.

Eu não acho certo dizer que o sistema está usando DDD também, e achei muito interessante o artigo do Phillip, porque eu estava pensando exatemte nisso outro dia deste. Inclusive, na apresentação de DDD que o Sérgio Lopes fez no Falando em Java 2008, foi a primeira coisa que ele demonstrou: a criação de uma línguagem que fosse clara para o cliente e para o desenvolvedor.

Domingo passado, estive lá no Falando em Java 2008. O evento teve diversas apresentações com destaques, na minha opinião, para as seguintes:

1) A apresentação do Guilherme Silveira sobre hábitos de arquitetos eficazes abriu muito a minha mente para determinadas coisas e, com isso, gerou algumas idéias para escrever aqui no blog, aguardem :)

2) O Sérgio Lopes foi muito bem sucedido com a sua abordagem teatral na apresentação sobre Domain-Driven Design. Ele simplesmente encenou a implementação de um sistema com “DDD”, onde o desenvolvedor cria uma linguagem ubíqua com o cliente e ambos conseguem falar a mesma língua - mesmo o cliente sendo literalmente um cachorro! Alguém tem uma foto disso? - durante o desenvolvimento do sistema.

3) A apresentação do Fábio Kung sobre JRuby on Rails foi bem esclarecedora em relação às limitações do Rails e como isso pode ser resolvido usando o JRuby. Sério, apesar de saber da existência de algumas linguagens cuja a JVM consegue rodar, eu ainda não tinha parado pra pensar no Java como uma plataforma que pode executar várias linguagens diferentes, como o .NET.

4) Emmanuel Bernard, líder de projetos Hibernate e autor do livro Hibernate Search in Action, falou sobre JPA 2.0 e, após o brunch, voltou em cena para falar sobre Hibernate Search. Duas ótimas palestras, diretas e objetivas, com muitos códigos e exemplos. Mas mesmo assim vi muita gente caindo no sono. Uma apresentação logo após o almoço, não dá. Eu me mantive acordado sem muito esforço, porque havia tomando 3 copos de café bem quente para não congelar. ;-)

No final do dia teve o sorteio mais nerd que se tem notícia. O próprio Emmanuel Bernard disse que nunca tinha visto um sorteio mais nerd. O Fábio Kung plugou seu MacBook - e por falar em MacBook, 99% dos presentes estavam com seus MacBooks e iPhones - no projetor e escreveu um simples método em Ruby para sortear os números, o método ficou mais ou menos assim:


def sorteio
(1..5).each {|x| puts x; sleep 1}
rand(300)
end

Houve sorteios de cupons de descontos em compras de livros, de um livro sobre Ruby on Rails e de um Nintendo Wii. É claro que a essa altura do campeonato eu estava achando que o Wii já era meu. Por já ter pago R$ 1500,00 em um e não ter recebido - sim, tomei calote no Mercado Livre de um vendedor altamente qualificado com mais de 1000 pontos positivos - achei que os céus fariam justiça e que o meu número, o nº 32, seria sorteado mas não foi :(

Por isso que agora eu sou ateu! :P

No próximo domingo, dia 18/05, estarei no Falando em Java 2008. Trata-se de um evento organizado pela Caelum para a comunidade Java.

Eu poderia falar mais sobre o evento aqui, mas o Guilherme Chapiewski já fez isso no blog dele.