Coding Dojo 
Aprendendo a programar programando
Coding Dojo 
Aprendendo a programar programando
Mauricio Matsuda 
mauricio@webgoal.com.br
Agenda 
● O que é o Dojo 
● Os principais tipos 
● Benefícios e dicas 
● Dojo na Prática
Agenda 
● O que é o Dojo 
○ Práticas essenciais 
○ O que é? 
○ Como surgiu? 
● Os principais tipos 
● Benefícios e Dicas 
● Dojo na Prática
Coding Dojo 
Práticas essenciais
Coding Dojo 
Práticas 
● As práticas essenciais para fazer um Dojo foram 
baseadas em conceitos descritos pelas metodologias 
ágeis Scrum e Extreme Programming (XP) 
○ Programação em par 
○ Test Driven Development (TDD) 
○ Design incremental 
○ Reunião de Retrospectiva
Programação em par 
Definição 
● Um computador com duas pessoas programando 
● Piloto: programador que fica com o teclado e é 
responsável em codificar a lógica 
● Co-piloto: auxilia o piloto a conferir o código que está 
sendo escrito e como esse código pode afetar 
negativamente o restante da aplicação
TDD 
Definição 
Desenvolvimento Dirigido por Testes (TDD) é a capacidade de produzir 
testes automatizados para código de produção, e usar este processo 
para dirigir o design e a programação. Para cada pequena 
funcionalidade no código de produção, você primeiro desenvolve um 
teste que especifica e valida o que o código deverá fazer. Você então 
produz somente o código necessário para permitir que o teste passe. 
Então você refatora (simplifica e clarifica) os códigos de produção e 
teste. 
fonte: Agile Alliance
Classe TesteCalculadora 
função testar_soma 
testar se Calculadora.soma(1,2) igual 3 
fim 
fim 
TDD 
Exemplo
Classe TesteCalculadora 
função testar_soma 
testar se Calculadora.soma(1,2) igual 3 
fim 
fim 
TDD 
Exemplo 
Classe Calculadora 
função soma(<num1>, <num2>) 
resultado = num1 + num2 
retorna resultado 
fim 
fim
Classe TesteCalculadora 
função testar_soma 
testar se Calculadora.soma(1,2) igual 3 
fim 
fim 
TDD 
Exemplo 
Classe Calculadora 
função soma(<num1>, <num2>) 
retorna num1 + num2 
fim 
fim 
Classe Calculadora 
função soma(<num1>, <num2>) 
resultado = num1 + num2 
retorna resultado 
fim 
fim
TDD 
Ciclo 
Criar 
teste
TDD 
Ciclo 
Criar 
teste 
Fazer 
teste 
passar
TDD 
Ciclo 
Criar 
teste 
Fazer 
teste 
passar 
Refatorar
Design incremental 
Definição 
● Criar código aos poucos, para atender cada 
funcionalidade 
● O TDD ajuda bastante a guiar essa prática, pois só 
haverá código para resolver se algum teste estiver 
falhando 
● Evita ter códigos que não são utilizados
Reunião de Retrospectiva 
Definição 
● Uma reunião realizada ao fim de uma interação 
● É elencado os pontos positivos e negativos observador 
pelos participantes 
● E tem como objetivo extrair uma lista de ações de 
melhorias para as próximas interações
Coding Dojo 
O que é?
Coding Dojo ou Dojo, ambiente para treinar e aprimorar 
as práticas de programação
Coding Dojo 
Definição 
● A ideia é promover um ambiente 
○ Seguro, onde todos se sintar à vontade em 
programar 
○ Não competitivo, pois o objetivo é que todos 
pensem juntos de forma colaborativa 
○ Inclusivo, programadores experientes e iniciantes 
devem ensinar e aprender juntos
Coding Dojo 
Como surgiu?
Coding Dojo 
Histórico 
● O Psicólogo Dr. K. Anders Ericsson na década de 70 
apresentou o conceito da Prática Deliberada 
● Executar tarefas específicas repetitivamente até 
alcançar a excelência 
● Teoria das 10 mil horas para se tornar um expert
Coding Dojo 
Histórico 
● Em 2003 o Programador Dave Thomas apresentou o 
conceito Code Kata 
● Espaço onde os programadores pudesse exercitar a 
programação 
● Inspirado em outras áreas, como na música que há um 
preparo antes da apresentação em público
Coding Dojo 
Histórico 
● Em 2004 Laurent Bossavit e Emmanuel Gaillot 
fundaram o primeiro Coding Dojo 
● Embasados nas teorias de Ericsson e Thomas, a ideia 
foi criar um cenário diferente do cotidiano de um 
projeto, em um ambiente descontraído e colaborativo 
● Ficou conhecido como Dojo Paris
Agenda 
● O que é o Dojo 
● Os principais tipos 
○ Dojo Kata 
○ Dojo Randori 
○ Dojo Kake 
● Benefícios e Dicas 
● Dojo na Prática
Coding Dojo 
principais tipos
Dojo Kata
Dojo Kata 
Características 
● Formato indicado para introduzir novos 
conhecimento de programação 
● Um apresentador com o domínio do 
conhecimento 
● A plateia tem uma participação passiva
Dojo Kata
Dojo Kata 
Como fazer 
● Equipamentos 
○ Um computador com o ambiente de programação 
configurado 
○ Uma tela de projeção ou uma TV grande
Dojo Kata 
Como fazer 
● Moderador 
○ Definir a melhor data e local 
○ Divulgar o evento para o publico interessado 
○ Preparar a infra-estrutura antes do início do Dojo 
○ Organizar uma retrospectiva ao final do Dojo
Dojo Kata 
Como fazer 
● Apresentador 
○ Pode ser uma dupla programando em par e 
alternando entre os ciclos do TDD 
○ Definir um roteiro de como será apresentado 
○ Explicar para a plateia cada passo apresentado
Dojo Kata 
Como fazer 
● Plateia 
○ Não interage diretamente com o código 
desenvolvido 
○ É livre para tirar dúvidas durante a apresentação
Dojo Randori
Dojo Randori 
Características 
● Formato indicado para praticar 
conhecimentos já aprendidos 
● Todos participam ativamente na 
programação 
● Há muita troca de conhecimento entre os 
participantes
Dojo Randori
Dojo Randori 
Como fazer 
● Equipamentos 
○ Um computador com o ambiente de programação 
configurado 
○ Uma tela de projeção ou uma TV grande 
○ Uma lousa ou flip-chart
Dojo Randori 
Como fazer 
● Moderador 
○ Preparar a infra-estrutura antes do início do Dojo 
○ Definir o problema e a linguagem com os participantes 
○ Escrever na lousa a lista dos participantes 
○ Controlar o intervalo de troca da dupla 
○ Organizar uma retrospectiva ao final do Dojo
Dojo Randori 
Como fazer 
● Piloto 
○ Pessoa que está com o teclado programando 
○ Deve seguir o ciclo de TDD 
○ Explicar em voz alta cada passo executado para 
que a plateia entenda o raciocínio escolhido 
○ Ao fim do ciclo o piloto volta para a plateia
Dojo Randori 
Como fazer 
● Co-piloto 
○ Pessoa sentada em par ao lado do Piloto 
○ Ajuda o Piloto na programação, com uma análise do 
código de forma ampla 
○ Ajuda a explicar o que estão fazendo para a plateia 
○ Ao fim do ciclo assume o posto de Piloto
Dojo Randori 
Como fazer 
● Plateia 
○ Só pode falar quando os testes estiverem passando 
ou quando a dupla pedir ajuda 
○ Ao fim do ciclo o próximo da lista assume o posto de 
Co-piloto
Dojo Kake
Dojo Kake 
Características 
● Formato indicado para programadores mais 
experientes 
● Muita troca de experiências entre os 
participantes
Dojo Kake
Dojo Kake 
Como fazer 
● Equipamentos 
○ Um computador com o ambiente de programação 
configurado por dupla
Dojo Kake 
Como fazer 
● Moderador 
○ Definir o problema com os participantes 
○ Controlar o intervalo de troca da dupla 
○ Organizar uma retrospectiva ao final do Dojo
Dojo Kake 
Como fazer 
● Piloto 
○ Pessoa que está com o teclado programando 
○ Deve seguir o ciclo de TDD 
○ Na primeira rodada escolhe junto com o Co-piloto a 
linguagem que irá utilizar 
○ Ao fim do ciclo assume o Co-piloto em outra dupla
Dojo Kake 
Como fazer 
● Co-piloto 
○ Pessoa sentada em par ao lado do Piloto 
○ Ajuda o Piloto na programação, com uma análise do 
código de forma ampla 
○ Ao fim do ciclo assume o posto de Piloto sem mudar 
de dupla
Dojo Kake 
Como fazer 
● Plateia 
○ Não interage diretamente com o código 
desenvolvido 
○ É livre para observar a programação de cada dupla
Agenda 
● O que é o Dojo 
● Os principais tipos 
● Benefícios e Dicas 
○ Benefícios 
○ Dicas e experiências 
● Dojo na Prática
Coding Dojo 
Benefícios
Coding Dojo 
Benefícios 
● Aprendizado pela observação e pela ação 
● Compartilhamento de conhecimento e colaboração na 
resolução de um problema 
● Aprendizado de novas tecnologias 
● Aprimoramento das técnicas de programação
Coding Dojo 
Dicas e experiências
Coding Dojo 
Dicas 
● Evite utilizar notebook pois dificulta a 
programação em par e o teclado pode ter um 
padrão que nem todos estão acostumados 
● Certifique que a imagem projetada está 
legível para a platéia, tanto na nitidez da 
imagem quanto no tamanho das fontes dos 
códigos
Coding Dojo 
Dicas 
● É sempre bom ter pelo menos uma pessoa 
experiente no assunto abordado no Dojo 
Randori 
● Se possível intercale pessoas experientes e 
inexperientes no Dojo Randori
Coding Dojo 
Dicas 
● Seguir a risca as regras de cada tipo de 
Dojo para ter um bom resultado 
● Caso um problema não tenha sido 
finalizado, só continue no próximo Dojo se 
os participantes forem os mesmos
Coding Dojo 
Dicas 
● Aproveite ao máximo, é a oportunidade de 
todos aprenderem e evoluirem juntos
Agenda 
● O que é o Dojo 
● Os principais tipos 
● Benefícios e Dicas 
● Dojo na Prática 
○ Dojo Kata 
○ Dojo Randori
Vamos programar!
Referências 
● Biografias 
○ http://www.psy.fsu.edu/faculty/ericsson.dp.html 
○ http://en.wikipedia.org/wiki/Dave_Thomas_ 
(programmer) 
● Mais informações sobre Dojo 
○ http://www.webgoal.com.br/coding-dojo/ 
○ Edição 62, Revista Mundo J
Referências 
● Sites com sugestões de problemas 
○ http://dojopuzzles.com/problemas 
○ http://dojorio.org/problemas/ 
○ http://apoie.org/Dojo.html

Coding Dojo - Aprendendo a programar programando

  • 1.
    Coding Dojo Aprendendoa programar programando
  • 2.
    Coding Dojo Aprendendoa programar programando
  • 3.
  • 4.
    Agenda ● Oque é o Dojo ● Os principais tipos ● Benefícios e dicas ● Dojo na Prática
  • 5.
    Agenda ● Oque é o Dojo ○ Práticas essenciais ○ O que é? ○ Como surgiu? ● Os principais tipos ● Benefícios e Dicas ● Dojo na Prática
  • 6.
  • 7.
    Coding Dojo Práticas ● As práticas essenciais para fazer um Dojo foram baseadas em conceitos descritos pelas metodologias ágeis Scrum e Extreme Programming (XP) ○ Programação em par ○ Test Driven Development (TDD) ○ Design incremental ○ Reunião de Retrospectiva
  • 8.
    Programação em par Definição ● Um computador com duas pessoas programando ● Piloto: programador que fica com o teclado e é responsável em codificar a lógica ● Co-piloto: auxilia o piloto a conferir o código que está sendo escrito e como esse código pode afetar negativamente o restante da aplicação
  • 10.
    TDD Definição DesenvolvimentoDirigido por Testes (TDD) é a capacidade de produzir testes automatizados para código de produção, e usar este processo para dirigir o design e a programação. Para cada pequena funcionalidade no código de produção, você primeiro desenvolve um teste que especifica e valida o que o código deverá fazer. Você então produz somente o código necessário para permitir que o teste passe. Então você refatora (simplifica e clarifica) os códigos de produção e teste. fonte: Agile Alliance
  • 11.
    Classe TesteCalculadora funçãotestar_soma testar se Calculadora.soma(1,2) igual 3 fim fim TDD Exemplo
  • 12.
    Classe TesteCalculadora funçãotestar_soma testar se Calculadora.soma(1,2) igual 3 fim fim TDD Exemplo Classe Calculadora função soma(<num1>, <num2>) resultado = num1 + num2 retorna resultado fim fim
  • 13.
    Classe TesteCalculadora funçãotestar_soma testar se Calculadora.soma(1,2) igual 3 fim fim TDD Exemplo Classe Calculadora função soma(<num1>, <num2>) retorna num1 + num2 fim fim Classe Calculadora função soma(<num1>, <num2>) resultado = num1 + num2 retorna resultado fim fim
  • 14.
  • 15.
    TDD Ciclo Criar teste Fazer teste passar
  • 16.
    TDD Ciclo Criar teste Fazer teste passar Refatorar
  • 17.
    Design incremental Definição ● Criar código aos poucos, para atender cada funcionalidade ● O TDD ajuda bastante a guiar essa prática, pois só haverá código para resolver se algum teste estiver falhando ● Evita ter códigos que não são utilizados
  • 18.
    Reunião de Retrospectiva Definição ● Uma reunião realizada ao fim de uma interação ● É elencado os pontos positivos e negativos observador pelos participantes ● E tem como objetivo extrair uma lista de ações de melhorias para as próximas interações
  • 20.
  • 21.
    Coding Dojo ouDojo, ambiente para treinar e aprimorar as práticas de programação
  • 22.
    Coding Dojo Definição ● A ideia é promover um ambiente ○ Seguro, onde todos se sintar à vontade em programar ○ Não competitivo, pois o objetivo é que todos pensem juntos de forma colaborativa ○ Inclusivo, programadores experientes e iniciantes devem ensinar e aprender juntos
  • 23.
  • 24.
    Coding Dojo Histórico ● O Psicólogo Dr. K. Anders Ericsson na década de 70 apresentou o conceito da Prática Deliberada ● Executar tarefas específicas repetitivamente até alcançar a excelência ● Teoria das 10 mil horas para se tornar um expert
  • 25.
    Coding Dojo Histórico ● Em 2003 o Programador Dave Thomas apresentou o conceito Code Kata ● Espaço onde os programadores pudesse exercitar a programação ● Inspirado em outras áreas, como na música que há um preparo antes da apresentação em público
  • 26.
    Coding Dojo Histórico ● Em 2004 Laurent Bossavit e Emmanuel Gaillot fundaram o primeiro Coding Dojo ● Embasados nas teorias de Ericsson e Thomas, a ideia foi criar um cenário diferente do cotidiano de um projeto, em um ambiente descontraído e colaborativo ● Ficou conhecido como Dojo Paris
  • 27.
    Agenda ● Oque é o Dojo ● Os principais tipos ○ Dojo Kata ○ Dojo Randori ○ Dojo Kake ● Benefícios e Dicas ● Dojo na Prática
  • 28.
  • 29.
  • 30.
    Dojo Kata Características ● Formato indicado para introduzir novos conhecimento de programação ● Um apresentador com o domínio do conhecimento ● A plateia tem uma participação passiva
  • 31.
  • 32.
    Dojo Kata Comofazer ● Equipamentos ○ Um computador com o ambiente de programação configurado ○ Uma tela de projeção ou uma TV grande
  • 33.
    Dojo Kata Comofazer ● Moderador ○ Definir a melhor data e local ○ Divulgar o evento para o publico interessado ○ Preparar a infra-estrutura antes do início do Dojo ○ Organizar uma retrospectiva ao final do Dojo
  • 34.
    Dojo Kata Comofazer ● Apresentador ○ Pode ser uma dupla programando em par e alternando entre os ciclos do TDD ○ Definir um roteiro de como será apresentado ○ Explicar para a plateia cada passo apresentado
  • 35.
    Dojo Kata Comofazer ● Plateia ○ Não interage diretamente com o código desenvolvido ○ É livre para tirar dúvidas durante a apresentação
  • 36.
  • 37.
    Dojo Randori Características ● Formato indicado para praticar conhecimentos já aprendidos ● Todos participam ativamente na programação ● Há muita troca de conhecimento entre os participantes
  • 38.
  • 39.
    Dojo Randori Comofazer ● Equipamentos ○ Um computador com o ambiente de programação configurado ○ Uma tela de projeção ou uma TV grande ○ Uma lousa ou flip-chart
  • 40.
    Dojo Randori Comofazer ● Moderador ○ Preparar a infra-estrutura antes do início do Dojo ○ Definir o problema e a linguagem com os participantes ○ Escrever na lousa a lista dos participantes ○ Controlar o intervalo de troca da dupla ○ Organizar uma retrospectiva ao final do Dojo
  • 41.
    Dojo Randori Comofazer ● Piloto ○ Pessoa que está com o teclado programando ○ Deve seguir o ciclo de TDD ○ Explicar em voz alta cada passo executado para que a plateia entenda o raciocínio escolhido ○ Ao fim do ciclo o piloto volta para a plateia
  • 42.
    Dojo Randori Comofazer ● Co-piloto ○ Pessoa sentada em par ao lado do Piloto ○ Ajuda o Piloto na programação, com uma análise do código de forma ampla ○ Ajuda a explicar o que estão fazendo para a plateia ○ Ao fim do ciclo assume o posto de Piloto
  • 43.
    Dojo Randori Comofazer ● Plateia ○ Só pode falar quando os testes estiverem passando ou quando a dupla pedir ajuda ○ Ao fim do ciclo o próximo da lista assume o posto de Co-piloto
  • 44.
  • 45.
    Dojo Kake Características ● Formato indicado para programadores mais experientes ● Muita troca de experiências entre os participantes
  • 46.
  • 47.
    Dojo Kake Comofazer ● Equipamentos ○ Um computador com o ambiente de programação configurado por dupla
  • 48.
    Dojo Kake Comofazer ● Moderador ○ Definir o problema com os participantes ○ Controlar o intervalo de troca da dupla ○ Organizar uma retrospectiva ao final do Dojo
  • 49.
    Dojo Kake Comofazer ● Piloto ○ Pessoa que está com o teclado programando ○ Deve seguir o ciclo de TDD ○ Na primeira rodada escolhe junto com o Co-piloto a linguagem que irá utilizar ○ Ao fim do ciclo assume o Co-piloto em outra dupla
  • 50.
    Dojo Kake Comofazer ● Co-piloto ○ Pessoa sentada em par ao lado do Piloto ○ Ajuda o Piloto na programação, com uma análise do código de forma ampla ○ Ao fim do ciclo assume o posto de Piloto sem mudar de dupla
  • 51.
    Dojo Kake Comofazer ● Plateia ○ Não interage diretamente com o código desenvolvido ○ É livre para observar a programação de cada dupla
  • 52.
    Agenda ● Oque é o Dojo ● Os principais tipos ● Benefícios e Dicas ○ Benefícios ○ Dicas e experiências ● Dojo na Prática
  • 53.
  • 54.
    Coding Dojo Benefícios ● Aprendizado pela observação e pela ação ● Compartilhamento de conhecimento e colaboração na resolução de um problema ● Aprendizado de novas tecnologias ● Aprimoramento das técnicas de programação
  • 55.
    Coding Dojo Dicase experiências
  • 56.
    Coding Dojo Dicas ● Evite utilizar notebook pois dificulta a programação em par e o teclado pode ter um padrão que nem todos estão acostumados ● Certifique que a imagem projetada está legível para a platéia, tanto na nitidez da imagem quanto no tamanho das fontes dos códigos
  • 57.
    Coding Dojo Dicas ● É sempre bom ter pelo menos uma pessoa experiente no assunto abordado no Dojo Randori ● Se possível intercale pessoas experientes e inexperientes no Dojo Randori
  • 58.
    Coding Dojo Dicas ● Seguir a risca as regras de cada tipo de Dojo para ter um bom resultado ● Caso um problema não tenha sido finalizado, só continue no próximo Dojo se os participantes forem os mesmos
  • 59.
    Coding Dojo Dicas ● Aproveite ao máximo, é a oportunidade de todos aprenderem e evoluirem juntos
  • 60.
    Agenda ● Oque é o Dojo ● Os principais tipos ● Benefícios e Dicas ● Dojo na Prática ○ Dojo Kata ○ Dojo Randori
  • 61.
  • 62.
    Referências ● Biografias ○ http://www.psy.fsu.edu/faculty/ericsson.dp.html ○ http://en.wikipedia.org/wiki/Dave_Thomas_ (programmer) ● Mais informações sobre Dojo ○ http://www.webgoal.com.br/coding-dojo/ ○ Edição 62, Revista Mundo J
  • 63.
    Referências ● Sitescom sugestões de problemas ○ http://dojopuzzles.com/problemas ○ http://dojorio.org/problemas/ ○ http://apoie.org/Dojo.html