domingo, 9 de novembro de 2008

Dojo #3 - Fizz/Buzz

Data: 08/11/2008
Participantes: Diego, Rodrigo, Everton e Gustavo
Randori: Fizz/Buzz
Linguagem: JavaScript

Após o problema das eleições, o dojo volta a ser realizado no CEFET. A sessão, que estava marcada para as 15h, iniciou-se por volta de 16:30, por contratempos diversos que serão tratados na retrospectiva.

O problema foi proposto pelo Diego, que, porém, manifestou a questão do problema poder ser resolvido rapidamente, por ser bem fácil. Eu sugeri, então, que a linguagem a ser utilizada fosse o JavaScript, pois em Python, linguagem em que todos são proficientes (menos eu, mas chego lá!), a solução seria rápida demais, no que todos concordaram.

Pelo fato de a linguagem (e o problema [ver retrospectiva]) terem sido decididos na hora, foi necessário gastar algum tempo com setup, procurando uma ferramenta de testes unitários para o JavaScript, no que encontramos a JSUnit. Não consegui configurá-la de modo rápido e optamos por escrever um método assertEquals caseiro para que pudéssemos executar rapidamente os testes de unidade.

Para incrementar ainda mais a dificuldade, decidimos adotar alguns dos preceitos de Object Calisthenics: utilizar apenas um nível de endentação por método, não utilizar a palavra-chave else (e nem derivadas como elif), utilizar apenas um ponto por linha (ou seja, respeitar a Lei de Demeter: somente fale com seus vizinhos imediatos), não utilizar classes com mais de dois atributos e não utilizar acessors e nem properties.

Tudo pronto, iniciamos o dojo. De cara, uma das dificuldades foi implementar orientação a objetos em JavaScript. Alguns de nós já tínhamos visto algo de OO com JavaScript mas nunca havíamos implementado nada. Encontramos um exemplo, o Diego e o Gustavo deram algumas dicas e lá fomos nós.

A implementação foi bastante simples (até porque o problema também era) e conseguimos terminar a parte 1 do problema (Fizz para múltiplos de 3, Buzz para múltiplos de 5 e FizzBuzz para múltiplos de 3 e 5), mas não chegamos a iniciar a segunda parte (incluir em Fizz números que contém 3, em Buzz os que contém 5 e em FizzBuzz ambos).

O projeto privilegiou a OO clássica, utilizando uma "classe" FizzBuzzNumber onde cada objeto tem a responsabilidade de responder seu status (Normal, Fizz, Buzz ou ambos).

Em cerca de 1 hora e meia, terminamos o dojo.

Sobre as regras do Object Calisthenics, creio que trapaceamos a regra de não utilizar else nos valendo de uma seqüência de ifs.

Do c@r@!#0

  • Uso de uma linguagem diferente

    O uso de uma linguagem que não é do dia-a-dia de nenhum dos desenvolvedores traz interesse e desafio adicionais

  • Melhor utilização do TDD

    Ao contrário de dojos anteriores, a utilização de TDD ocorreu mais naturalmente, com poucas exceções.

  • Aprendizado de OO em JavaScript

    O dojo rendeu um aprendizado concreto para todos, que foi a utilização de JavaScript orientado a objetos

  • Ausência de "correria" para resolver o problema

    Não houve atropelamento das regras do dojo (baby steps, TDD) para que se chegasse mais rapidamente à solução.



Uma m&rd@

  • Atraso para o início do dojo

    O dojo começou com inacreditáveis uma hora e meia de atraso.

  • Inexistência de um dojo organizer

    O atraso se deveu, entre outras coisas, à ausência da definição de um dojo organizer. O Diego fez alguma coisa neste sentido, mas por iniciativa própria. É preciso que o organizer seja definido com antecedência

  • Poucos participantes

    Tivemos apenas quatro participantes. E isto logo após uma enquete a respeito de dia e horário na qual a maioria escolheu este.

  • Falta de confirmação de presença

    Quase não se viabiliza o dojo pela falta de participantes (até as 16h só havia dois presentes). Seria bom haver um confirmação prévia na lista de quem participará do próximo dojo, para eventual cancelamento em caso de insuficiência de participantes

  • Não ter utilizado uma ferramenta de testes unitários

    A utilização de uma solução caseira para testes unitários foi um fator de perda de tempo, além de ser uma reinvenção da roda.

  • Setup demorado

    As definições de última hora levaram a um setup bastante demorado

  • Linguagem definida na última hora

    Apesar do uso de JavaScript ter sido avaliado como positivo, é preciso definir a linguagem com antecedência, para que o ambiente fique pronto antecipadamente.