Toda vez que se faz um Coding Dojo, é praxe escrever um relatório sobre a atividade. Segue aqui o do último que fizemos em aula!
Ficha Técnica
- Data: 25/11/2016
- Horário: 19:30
- Linguagem: JavaScript
- Problema: O problema proposto foi a Conjectura de Collatz: para definir uma seqüência a partir de um número inteiro positivo, temos as seguintes regras:
n → n/2 (se n é par)
n → 3n + 1 (se n é ímpar)
Usando a regra acima e iniciando com o número 13, geramos a seguinte seqüência:
13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1
Podemos ver que esta seqüência (iniciando em 13 e terminando em 1) contém 10 termos. Embora ainda não tenha sido provado (este problema é conhecido como Problema de Collatz), sabemos que, com qualquer número que você começar, a seqüência resultante chega no número 1 em algum momento.
Desenvolva um programa que descubra qual o número inicial entre 1 e 1 milhão que produz a maior seqüência. - Formato: Randori
- Participantes: Alexandre Trino Martinez, Andre Koiti Torigoe, Cinthia Da Silva Inhaia, Gabriel Lopes Gomes, Henrique Prieto Rigio, Lais Lima De Oliveira, Laura Christina Cunha E Cruz, Mateus Martins Ferreira, Rafael Ferraz De Camargo Cibim, Tobias Valdivieso Ponce, Tonielton Rodrigues Da Mota, Vinicius De Oliveira Alves e Ramon Chiara.
- Código: GitHub
Narrativa
Esse foi o primeiro Dojo da turma. Por isso, o professor utilizou o começo da aula para explicar o que é um Dojo. Logo após, foi usado o site DojoPuzzles para se escolher um problema. Depois de passar por uns dois ou três, a turma escolheu o da Conjectura de Collatz.
Os primeiros testes foram implementados pelo professor como forma de apresentar o desenvolvimento orientado a testes (TDD – Test Driven Development) no JavaScript usando os frameworks Mocha e Chai.
Por experiências anteriores, foram usados turnos de 7 minutos e, após terminado o primeiro deles, os alunos foram se revezando. Como tentativa de minimizar distrações enquanto as duplas codificavam, o professor foi discutindo o código, perguntando se os alunos estavam entendendo o que estava acontecendo.
O professor “pegou bastante no pé” com relação aos baby steps (programação em pequenos incrementos de código) e em fazer os testes passarem rapidamente para ir para o próximo. Em determinado momento, um par acabou avançando demasiadamente e resolveu o problema em um passo muito grande. Essa situação foi discutida, relembrando os objetivos do Dojo e a turma voltou um pouco para retornar aos passos menores.
Com um pouco de paciência e persistência, após uns 10 ou 15 testes, o código começou a apresentar um padrão que “pedia” uma recursão. Nesse momento, alguns refactorings foram feitos para introduzir essa ideia. Com isso, o padrão ficou ainda mais claro e a solução se “desenhou” naturalmente.
Isso aconteceu bem no fim do tempo disponível. Ou seja, conseguiu-se criar uma função que retornava a sequência numérica, mas não deu tempo de se fazer uma que descobria a maior delas. Mas, isso não tem problema, pois terminar o problema não é o objetivo de um Coding Dojo. Dito isso, passou-se para a retrospectiva.
Fotos
Retrospectiva
- O que deu certo? / O que aprendemos?
- Legal / Poderíamos fazer mais vezes / Legal o desenvolvimento.
- Aprendizado sobre TDD (bibliotecas Mocha e Chai para JS) / Orientação de uma pessoa com experiência na ferramenta e em Dojo / Interessante entender um pouco sobre testes / Aprender a pensar orientado a testes, fazendo o código em baby steps.
- Gostei do estilo da aula e do exercício; coloca a gente para pensar mais rápido / Dinâmica funcionou / Bacana proporcionar a busca por novas maneiras de encontrar uma saída.
- Clareza na explicação do problema.
- O que pode melhorar? / O que dificultou o aprendizado?
- Faltou ponto positivo / Faltou cerveja / Faltou a breja, mas foi bom entender um pouco do TDD / Faltou a pizza!
- Faltou concentração da nossa parte!
- Seria bom um “narrador” do código.
- Tempo.