Coding Dojo 101

escrito por Humberto Rocha em 02/12/2016

Meu primeiro Coding Dojo aconteceu próximo ao meu primeiro contato com a linguagem Python na faculdade. Um colega de classe (Dirley) tinha acabado de voltar da Python Brasil muito animado, pois tinha visto uma palestra sobre o tema e queria colocar em prática com o pessoal da turma. Aquele dia foi muito divertido e talvez um dos mais importantes momentos que me levaram a mergulhar de cabeça na linguagem Python.

Assim como me trouxe para a linguagem e posteriormente para a comunidade, o dojo pode ser uma porta de entrada para muita gente na programação.

O que é o Coding Dojo?

Assim como nas artes marciais o dojo é um ambiente de aprendizado e este é um conceito que deve ser reforçado na cabeça dos participantes.

Além disso é um ambiente no qual é praticado o desenvolvimento orientado a testes ou TDD, a programação pareada e babysteps para resolver um desafio proposto pelo organizador.

A resolução do desafio não é obrigatória para um dojo de sucesso, o objetivo principal é e sempre será a diversão.

Este vídeo ilustra brevemente seu funcionamento:

Um dojo pode ser feito remotamente, mas o presencial é onde a mágica acontece de verdade.

Requisitos

Para organizar um dojo não é preciso de muita coisa:

  • Uma sala ou um ambiente com lugar para sentar
  • Somente 1 computador onde os participantes iram programar
  • Uma tela maior ou projetor para a platéia acompanhar a programação

Dinâmica

A dinâmica acontece seguindo este fluxo:

dinamica

O fluxo é composto de ciclos de 5 a 7 minutos, este tempo é flexível, porém para iniciantes não é recomendado que seja muito extenso para evitar que a pessoa fique travada e para estimular mais pessoas a participar (eu pessoalmente sempre uso 5 minutos).

O piloto é o único que programa e não deve ser interrompido pela platéia durante cada ciclo, onde realiza programação pareada com o copiloto, que é a única pessoa que tem permissão para falar, ajudar e dar opinião.

A platéia assiste e não fala até o final de cada ciclo. Algumas pessoas gostam de fazer pequenas pausas quando os testes passam para discutir algo com a platéia, porém quando os testes estiverem falhando não é permitido nenhuma interação da platéia com a dupla no comando.

No intervalo de cada ciclo a dupla explica sua linha de pensamento e o que está fazendo, o piloto vai para a platéia, o copiloto assume a posição de piloto e um voluntário (de preferência quem ainda não programou) assume o copiloto.

Isso se repete durante todo o dojo, até a solução do desafio ou até o tempo máximo estipulado que costuma variar de 40 minutos até 1 hora e meia, mais que isso costuma ficar muito cansativo.

Programação Pareada

A programação pareada é uma das metodologias utilizadas no dojo e ela consiste nada mais nada menos de duas pessoas trabalhando em conjunto na solução de um problema. Sempre um programando e o outro ajudando com o raciocínio, sugestões e dúvidas.

Desenvolvimento Orientado a Testes

Outra metodologia essencial é o TDD, que consiste em escrever testes antes do código para resolver o seu problema. Se todos os testes estiverem passando você não tem o que programar, portanto é preciso escrever mais um teste que valide algo que ainda não foi implementado para que o teste falhe e lhe obrigue a escrever código para fazer aquele teste passar.

Babysteps

Escrever os testes primeiro é um grande desafio para quem não possuí este costume, as pessoas já querem testar a solução do problema de cara e sair resolvendo tudo o que leva a uma experiência ruim do TDD. Você possuí dificuldade em fazer os testes passarem? Provavelmente você está testando muita coisa em um único teste.

A ideia do babysteps é andar a "passos de bebê", quebrando seu problema em pequenos passos facilitando a resolução e a compreensão para o copiloto e para a platéia.

Finalizando

Ao término de um dojo é comum finalizar com um levantamento dos prós (o que foi legal), contras (o que não foi tão legal e poderia melhorar), sugestões (tanto de tema quanto de melhorias para o dojo) e o registro dos participantes.

Outro costume importante é disponibilizar o que foi produzido publicamente para consulta dos participantes e para a comunidade como um todo.

Ferramentas

Para auxiliar na experiência do dojo existem diversas ferramentas, a seguir apresentarei algumas das que eu utilizo:

Editor de texto

Eu sou um usuário de VIM e adoro utiliza-lo. Porém, a não ser que seja um dojo de VIM não é uma ferramenta muito recomendada pois pode causar frustração nas pessoas que não o utilizam.

No dojo eu gosto de utilizar o sublime text, por ser direto ao ponto e oferecer o code highlighting sem ter que configurar nada. Mas caso não possua a licença do sublime exitem outros bons editores gratuitos como o Atom.

Biblioteca de testes

Na realização dos testes costumo utilizar a biblioteca padrão de testes do Python, a unittest em conjunto com a biblioteca nose para facilitar o processo de rodar os testes.

Para escrever testes com a unittest basta criar uma classe que extende unittest.TestCasse:

import unittest

def incremento(x):
    return x + 1

class MeuTeste(unittest.TestCase):
    def testa_incremento(self):
        self.assertEqual(incremento(3), 4)

O exemplo acima implementa um método em MeuTeste que verifica se a função incremento com o parâmetro 3 retorna o valor esperado 4.

Rodando os testes com o nose:

$ nosetests arquivo.py

Ele buscará em seu arquivo todas classes que extendem unittest.TestCase e rodar os testes automaticamente.

Semáforo

Para saber se os testes estão passando teríamos que ficar rodando o comando de teste em toda alteração no código. Com um semáforo automatizamos este processo além de rodar os testes sempre que o arquivo é salvo disponibilizando um feedback visual bem interessante.

O semáforo que eu gosto de utilizar é o dose do Danilo Bellini:

dose

Ele funciona tanto com python quanto com outras linguagens além de integrar bem com o nose, basta rodar o comando:

$ dose nosetests arquivo.py

Concluindo

No dojo o mais importante é se divertir e aprender, estas são apenas algumas dicas a partir da minha experiência. Sintam-se a vontade para adaptar, criar e subverter tudo que foi descrito aqui e poste o que funcionou e o que não deu muito certo nos comentários.

Para quem estiver curioso sobre os códigos produzidos no dojo ou quiser sugestão de temas dê uma olhada no repositório do Grupy-DF que é onde eu e a comunidade Python do Distrito Federal mantemos nosso registro dos dojos passados.

E para quem é da região do DF e ainda não conhece nossa comunidade, estão todos convidados a participar. O site com todos os contatos da comunidade é df.python.org.br.