Coding Dojo na Tecsystem

Ontem foi realizado mais um coding dojo na Tecsystem, empresa onde trabalho. Foi o segundo em uma semana e a intenção é que continuem acontecendo todas as quartas-feiras.
A ideia inicial era fazer um fork, um grupo de estudos sobre qualquer assunto relacionado a desenvolvimento de sistemas, mas o que acabou se concretizando mesmo foram os dojos.
No primeiro, que aconteceu no dia 11 de janeiro, eu fiz uma breve introdução ao TDD para aqueles que não estavam bem familiarizados com a técnica e com o funcionamento de um dojo: programação em par, o revezamento, o ciclo de testes, etc., e partimos direto para os testes.

O mais interessante, porém, não são os problemas propostos, mas a possibilidade de adquirir conhecimento, como novas linguagens, ferramentas e técnicas, e a interação que acontece quando todos pensam juntos para desenvolver uma solução. Além disto, desenvolver software num novo ambiente, mesmo que seja um problema simples, não deixa de ser uma ótima experiência. Acredito que seja isto que está despertando o interesse da equipe. Para mim, por exemplo, vai ser uma boa oportunidade de aprender algo sobre Python, Java e muito mais.
Se tudo der certo, na próxima quarta tem mais.
Em breve, mais novidades.

Veja mais no blog do Martinusso.

Prova do Google Developer Day 2011

A exemplo do Erick Sasse, resolvi fazer também a prova do Google Developer Day 2011. A prova faz parte do processo de inscrição no evento e serve para selecionar os inscritos, caso haja mais inscrições que vagas disponíveis. Ela é opcional, mas os que a fizerem terão preferência se não houver vagas suficientes. Mesmo não pretendendo participar do evento, a prova me pareceu um desafio interessante. A prova é composta basicamente de cinco questões que envolvem manipulação de strings. Nela, são apresentados dois textos escritos num idioma fictício, o Googlon. Cada usuário recebe um conjunto de palavras diferentes. Portanto, as respostas são únicas para cada inscrição.

TDD

Com base nos dados fornecidos na própria prova, foi possível ter uma base para certificar-se das respostas. E o TDD se encaixou perfeitamente neste problema em especial, pois permitiu implementar os cálculos e conferir os resultados com os exemplos do texto antes de elaborar as respostas específicas. Por exemplo:

  • Contar o número de preposições no texto B: “existem 69 preposições no texto A” (1º teste);
  • Contar o número de verbos no texto B: “no texto A existem 82 verbos, dos quais 62 estão em primeira pessoa” (2º e 3º testes);
  • Obter a lista de vocabulário do texto B: foi dada a lista de vocabulário do texto A (4º teste);
  • Obter a quantidade de “números bonitos” no texto B: “No texto A existem 115 números bonitos distintos” (5º teste).

Para entender melhor, veja a prova aqui.
O código fonte da solução pode ser acessado neste repositório.

Em resumo, para cada questão, foi criado um teste específico para responder somente o que foi pedido. Aliás, não faz sentido utilizar TDD se não for assim: não codificar mais do que o necessário para fazer os testes passarem. Depois disto, vem as refatorações. Poderiam ter sido feitos muitos outros testes mas, como o foco era responder às questões, tudo foi feito pensando nisso.

Apesar de ter usado TDD, a experiência ensina que nem tudo é o melhor sempre. Pode-se até fazer testes unitários sem necessariamente desenvolver a solução com TDD. Uma coisa é mais que certa: testes são necessários e nunca são suficientes. Lembro-me de um professor que dizia: “Não existem sistemas corretos. Existem sistemas mal testados”. Em outra oportunidade, vou aprofundar a discussão sobre o assunto.

Até a próxima!

[Atualização: 22 de agosto de 2011]

Muitas pessoas tem chegado a este post através de pesquisas como “respostas da provinha google developer day” ou “resposta google developer day brasil 2011”. Como disse acima, as respostas não são as mesmas para todo mundo, mas o código fonte pode ser facilmente adaptado para responder qualquer variação do teste. Vale a pena tentar fazer mas o código está aí para quem quiser consultar.