Archive for Arquitetura

Outro dia destes eu estava assistindo um episódio de The Big Bang Theory no qual um dos personagens menciona o experimento de Schrödinger. Isso me fez lembrar do livro The Pragmatic Programmer (PragProg) que eu li recentemente.

O experimento é mais ou menos o seguinte: imagine um gato dentro de uma caixa fechada com alguma substancia radioativa, onde há 50% de chances desta substancia infectar o gato. Se isso acontecer o gato morrerá, se não ele ficará bem. Então, neste momento o gato está vivo ou morto? Segundo Schrödinger, a resposta correta é ambos. As duas possibilidades acontecem em universos paralelos, em um universo o gato morre e no outro ele vive. Apenas precisamos abrir a caixa para descobrirmos em qual universo nós estamos.

No seriado, o personagem mencionou o experimento para persuadir uma garota que estava na duvida ser deveria sair com ele ou não. Bom, ela só saberá se vale a pena se ela abrir a caixa. :)

No PragProg, os autores mencionam o experimento fazendo um comparativo com evolução do código em desenvolvimento de softwares:

Think of code evolution along the same lines as a box full of Schrödinger’s cats: every decision results in a different version of the future. How many possible futures can your code support? Which ones are more likely? How hard will it be to support them when the time comes?

O livro questiona o quão flexível à mudanças é o seu software e ressalta a importância de ser ter arquiteturas que suportem mudanças sem grandes custos.

Certa vez, eu vi um projeto ter que ser praticamente todo reescrito quando chegou a hora de criar o módulo que seria usado no Palm. Muitas decisões que foram tomadas no início do projeto não levaram em conta este futuro. Em conseqüência disso, houve um re-trabalho enorme, gerou um estresse gigantesco e exigiu bastante esforço da equipe que virou noites e finais de semana para que tudo fosse entregue no prazo.

O quão flexivel à mudanças é o seu software?

Nos dias 25 e 26 de julho, estive no TDC2008, um evento organizado pela Globalcode e patrocinado pela Locaweb, UOL e JBoss, uma divisão da RedHat. O evento contou com palestras sobre Java e metodologias ágeis, e teve várias palestras ocorrendo simultaneamente durante dois dias.

Cheguei cedo no segundo dia do evento e deu tempo de pegar a abertura que não teve nada demais. Mas logo depois começou o keynote do Ed Burns sobre o seu livro Secrets of the Rock Star Programmers. O livro traz temas que foram comentados por nomes conhecidos do mundo Java, como Rod Johson, James Gosling, dentre outros.

Em seguida, eu fui para apresentação do Manoel Pimentel sobre modelagem ágil. Foi uma excelente apresentação. O Manoel abordou assuntos como UML em cores e Agile Draw, mas eu não vou falar sobre essa apresentação, porque é possível assistir a gravação em vídeo.

Depois foi a vez da apresentação arrasadora sobre Extreme Programming que o Vinicius Teles fez. Foi excelente, mas eu não preciso falar muito sobre, porque o próprio Vinícius filmou a apresentação, então em favor a vocês próprios, assistam o vídeo. Vale muito a pena. :)

No final da palestra de XP, apareceu o Juan Bernabó avisando que havia uma van esperando em frente ao prédio do evento para levar todos a um restaurante italiano comer uma macarronada ágil e foi pra lá que eu fui.

Cheguei tarde da macarronada e acabei perdendo a apresentação do André Piza sobre a adoção de SCRUM no UOL, fiquei na esperança de que alguém tivesse filmado também, mas como não vi nenhum link por aí, acho que não existe.

E então eu fui assistir a apresentação Dr. Spok e do Ricardo Jun sobre algo mais técnico, sobre Spring. Bela apresentação. Eles não entraram em muitos detalhes de implementação, mas deram uma visão geral de tudo que o Spring pode oferecer.

Em seguida veio o debate sobre metologias ágeis com vários feras de metodologias e processos de desenvolvimento no Brasil. Nomes como José Papo, Manoel Pimentel, Vinícius Teles, Juan Bernabó, André Piza e outros.

O Jorge Diz foi o moderador do debate e as vezes parecia que ele estava afim de por lenha na fogueira, principalmente quando ele próprio perguntou para um consultor CMMI: “Porque CMM significava consultoria mamando muito?!”. Foi engraçado mesmo. O Jorge Diz é uma figura!

Esse debate foi totalmente enriquecedor pros meus conceitos de ágeis. Eu pude ouvir muitas experiências e em particular como o Vinícius Teles convenceu o seu cliente do projeto Lucidos a adotar XP. Esse debate foi filmado também e vale a pena assiti-lo também.

No final do debate havia um grupo de pessoas que estavam com umas dúvidas, mas estava difícil conseguir fazer uma pergunta lá. E mesmo que se conseguisse fazer uma pergunta, as respostas geravam outras perguntas e não se conseguia mais perguntar nada. Eu nem me animei em perguntar nada. Mas o interessante foi que eu tinha acabado ler pela segunda vez o Scrum and XP from the Tenches, onde o Henrik Kniberg fala bastante sobre coisas que sanariam as dúvidas do grupo que eu mencionei e então eu os indiquei o livro. Ainda não sei se o livro os ajudou, espero que sim.

Mais uma vez eu não pude ficar pro encerramento, tive que correr para não perder o avião. Mas os amigos que ficaram disseram houve umas rodas de conversas informais sobre vários assuntos e rolando umas cervejas pra galera.

O The Developer’s Conference 2008 foi um ótimo evento. Gostei de ver que grandes empresas como UOL e Locaweb estão apostando em metodologias ágeis e patrocinando eventos sobre o assunto.

Acabei de chegar da apresentação do Bruno Pereira sobre WebServices REST no RioJUG, uma que eu havia anunciado aqui. A apresentação foi bem teórica e explicativa no início. Depois, ele apresentou o código-fonte e executou alguns testes para demonstrar o funcionamento. Durante toda a apresentação ele comparou os padrões WS-* e REST. Ele falou também um pouco das motivações que deram origem aos WebServices e qual padrão eles tendem seguir, que o é REST, claro! Pra quem quer saber mais, ele indicou a edição no. 56 da Java Magazine que tem uma matéria dele sobre o assunto.

No final, teve sorteio de brindes - como sempre, não ganhei nenhum - e o Guilherme Chapiewski, disse que o Fábio Kung estará na globo.com na semana que vem palestrando sobre JRuby e que provavelmente, ele fará uma apresentação no RioJUG também.

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.