quinta-feira, 23 de dezembro de 2010

Para pensar

Recebi esta mensagem por e-mail, da Nádia, e achei muito bonita. Fiz uma rápida pesquisa na internet mas não achei o autor da mensagem. Em alguns sites dizia que era autor desconhecido. Então, se alguém souber quem é o autor da mensagem, peço que me informe.
VISÃO DE ADULTO... VISÃO DE CRIANÇA...

Éramos a única família no restaurante com uma criança.
Eu coloquei Daniel numa cadeira para crianças e notei que todos estavam tranquilos,  comendo e conversando.
De repente, Daniel gritou animado, dizendo: 'Olá, amigo!', batendo na mesa com suas mãozinhas gordas.
Seus olhos estavam bem abertos pela admiração e sua boca mostrava a falta de dentes.
Com muita satisfação, ele ria, se retorcendo.
Eu olhei em volta e vi a razão de seu contentamento.
Era um homem andrajoso, com um casaco jogado nos ombros, sujo, engordurado e rasgado.
Suas calças eram trapos com as costuras abertas até a metade e seus dedos apareciam através do que foram, um dia, os sapatos.
Sua camisa estava suja e seu cabelo não havia sido penteado por muito tempo.
Seu nariz tinha tantas veias que parecia um mapa.
Estávamos um pouco longe dele para sentir seu cheiro, mas asseguro que cheirava mal.
Suas mãos começaram a se mexer para saudar...
'Olá, neném. Como está você?', disse o homem a Daniel.
Minha esposa e eu nos olhamos:
'Que faremos?'.
Daniel continuou rindo e respondeu, 'Olá, olá, amigo'.
Todos no restaurante nos olharam e logo se viraram para o mendigo.
O velho sujo estava incomodando nosso lindo filho.
Trouxeram a comida e o homem começou a falar com o nosso filho como um bebê.
Ninguém acreditava que o que o homem estava fazendo era simpático.
Obviamente, ele estava bêbado.
Minha esposa e eu estávamos envergonhados.
Comemos em silêncio; menos Daniel que estava super inquieto e mostrando todo o seu repertório ao desconhecido, a quem conquistava com suas criancices.
Finalmente, terminamos de comer e nos dirigimos à porta.
Minha esposa foi pagar a conta e eu lhe disse que nos encontraríamos  no Estacionamento.
O velho se encontrava muito perto da porta de saída.
'Deus meu, ajuda-me a sair daqui antes que este louco fale com Daniel', disse orando, enquanto caminhava perto do homem.
Estufei um pouco o peito, tratando de sair sem respirar nem um pouco do ar que ele pudesse estar exalando.
Enquanto eu fazia isto, Daniel se voltou rapidamente na direção onde estava o velho e estendeu seus braços na posição de 'carrega-me'.
Antes que eu pudesse impedir, Daniel se jogou dos meus braços para os braços do homem.
Rapidamente, o velho fedorento e o menino consumaram sua relação de amor.
Daniel, num ato de total confiança, amor e submissão, recostou sua cabeça no ombro do desconhecido.
O homem fechou os olhos e pude ver lágrimas correndo por sua face.
Suas velhas e maltratadas mãos, cheias de cicatrizes, dor e trabalho duro, suave, muito suavemente, acariciavam as costas de Daniel.
Nunca dois seres haviam se amado tão profundamente em tão pouco tempo.
Eu me detive, aterrado. O velho homem, com Daniel em seus braços, por um momento abriu seus olhos e olhando diretamente nos meus, me disse com voz forte e segura:
'Cuide bem deste menino'.
De alguma maneira, com um imenso nó na garganta, eu respondi: 'Assim o farei'.
Ele afastou Daniel de seu peito, lentamente, como se sentisse uma dor.
Peguei meu filho e o velho homem me disse:
'Deus o abençoe, senhor. Você me deu um presente maravilhoso'.
Não pude dizer mais que um entrecortado 'obrigado'.
Com Daniel nos meus braços, caminhei rapidamente até o carro.
Minha esposa perguntava por que eu estava chorando e segurando Daniel tão fortemente, e por que estava dizendo:
'Deus meu, Deus meu, me perdoe'.
Eu acabava de presenciar o amor de Cristo através da inocência de um pequeno menino que não viu pecado, que não fez nenhum
juízo; um menino que viu uma alma e uns adultos que viram um montão de roupa suja.
Eu fui um cristão cego carregando um menino que não o era.
Eu senti que Deus estava me perguntando:
'Estás disposto a dividir seu filho por um momento?', quando Ele Compartilhou Seu Filho por toda a eternidade..
O velho andrajoso, inconscientemente, me recordou:
'Eu asseguro que aquele que não aceite o reino de Deus como um Menino, não entrará nele.' (Lucas 18,17).
Apenas repita esta frase e verá como Deus se move:
'Senhor Jesus Cristo, te amo e te necessito, entre em meu coração, por favor'.
Passe esta mensagem a algumas pessoas especiais.
Não porque você receberá um milagre amanhã.
Mas porque você recebe o milagre todos os dias:
O milagre de estar vivo!!!

Que todos tenham um excelente Natal!!

terça-feira, 7 de dezembro de 2010

Terceiro Code Dojo

Agora o resumo e os desdobramentos do nosso terceirot Code Dojo, que tomei a liberdade de chamar de "Terceiro Code Dojo PyD'Égua". Este aconteceu no dia 03/12/2010, e os participantes foram: Francival, Rogênio, Priscilla, Marcelo, Sebastião e eu.
E chegamos ao nosso terceiro CodeDojoPydégua! Foi muito legal. Dessa vez contamos com a ilustríssima presença da Priscilla, que veio abrilhantar nosso encontro com seu charme e comentários sensatos e pertinentes! (depois eu te peço um dinheiro emprestado, tá tia Pris?? :-) ). Na próxima a Priscilla já vai ser um dos participantes efetivos, ou seja, vai "rodar" no piloto e co-piloto!

E sentimos mais uma vez a falta do Ézyo, que não pode comparecer. Acho que está desde ontem à noite no Maricotinha, ainda apreciando o coquetel de lançamento do BlackBerry!! :-)


Já tivemos notícia de que mais pessoas querem participar. Assim, acho que da próxima vez precisaremos arranjar um lugar maior. É, o negócio está crescendo (tô falando no bom sentido!), creio que daqui a mais algumas reuniões vamos começar a cobrar ingresso!! :-)

Brincadeiras à parte, a reunião foi legal e produtiva. Mais uma vez assimilamos conhecimentos em relação ao código e ao método, e chegamos muito próximo de resolver o problema. Acho até que podemos considerar resolvido, pois o que faltou foi erro na especificação dos requisitos (
mea culpa!).

Bem vamos ao que interessa:


Problema:
- O problema escolhido dessa vez foi o FizzBuzz (parecido com aquela brincadeira do "pim" que passava no Sílvio Santos, época que eu ainda nem era nascido!), e consiste no seguinte:

- Sempre que um número for múltiplo de 3, não exibe o número e exibe "Fizz";

- Sempre que um número for múltiplo de 5, não exibe o número e exibe "Buzz";
- Sempre que um número contiver 3, não exibe o número e exibe "Fizz";
- Sempre que um número contiver 5, não exibe o número e exibe "Buzz";
- Se o número for múltiplo de 3 E 5 ao mesmo tempo, exibe "FizzBuzz";

Meu erro nos requisitos foi ter esquecido de acrescentar que quando o número contiver 3 E 5 exibiria a mensagem "FizzBuzz". Fora isso, todos os testes funcionaram, então consideraremos o problema resolvido, certo? ;-)

Código:

- O código resultante do nosso Dojo está no pastebin: http://pastebin.com/iJD8qNbD

Avaliação:

  • Pontos Positivos:
    • A presença da Priscilla! :-)
    • O problema foi de fácil entendimento, o que nos ajudou a concentrar melhor na resolução;
    • O código resultante ficou legível e fácil de entender. Também ficou bem fragmentado, com funções pequenas e bem definidas;
    • Começamos a respeitar melhor o "vermelho" (hora de calar) e o "verde" (hora de falar). Também corrigimos um erro de interpretação com relação ao uso do vermelho e verde: no vermelho, os testes ainda não passaram e o piloto e o co-piloto devem se concentrar sozinhos em fazer o testes passar, e no verde, o teste está passando e a platéia pode dar pitaco;
    • O método (Code Dojo) facilita o desenvolvimento do algoritmo e também o aprendizado;
    • A dinâmica funcionou melhor, creio que pela prática dos outros CodeDojo e também por termos assimilado melhor a técnica;
    • A sensação de que o TDD funciona e é uma boa prática a ser seguida.
  • Pontos Negativos:
    • A saída do Sebastião antes do fim (tudo bem, tá desculpado), afinal de contas a presença de todos é importante;
    • A falha (mais uma vez, mea culpa) na definição dos requisitos, o que, no final, acabou sendo encarado por todos como um exemplo do que pode acontecer na realidade;
    • Faltou um local para expor o problema e seus requisitos, pois quando estamos pensando na resolução fica melhor se visualizamos o problema e os requisitos;
    • Faltou o lanche!! :-)
    • Em um determinado momento nos faltou um pouco de conhecimento da linguagem Python (atributo do método string).
Como nós conversamos na avaliação, gostaria de pedir para o Marcelo nos enviar algum material sobre refatoração de código. Pode ser, Marcelo? ;-)

Mais uma vez tivemos mais pontos positivos que negativos. Isso é legal e já me empolga a marcar o próximo encontro: 10/12/2010 (sexta-feira), no mesmo horário e local. Precisamos confirmar se vai aparecer mais gente, porque se isso acontecer precisaremos de uma sala maior.

Fiquem à vontade para corrigir qualquer informação aqui.

Bem, acho que é isso! :-)



O Rogênio, que não brinca em serviço, brincou com o código e fez alguns melhoramentos:
    Esses dias estive brincando um pouco com o nosso último código e diminuí um módulo. (unifiquei os módulos 'efizz' e 'ebuzz' em um único módulo, o 'efioubu') e inseri mais de uma entrada nos módulos: http://pastebin.com/qPNeSHem
    O código que o Cléoson publicou está bem mais didático que o meu, que  serviu mais como uma brincadeira de testes pra mim mesmo.
 E eu, só pra dizer que fiz alguma coisa, dei um mini-pitaco no código:
     Apenas pra economizar duas linhas no código, sugiro alterar a linha 23 do teu código para:

def fizzbuzz(n, fi=3, bu=5):

     E eliminar as linhas 24 e 25.
Marcelo,
 
      Isso seria refatorar? Ainda não tive tempo de ler o material que tu enviaste.
E a resposta do Marcelo:
Qualquer alteração que simplifica o código sem alterar o
comportamento externo é refatoração.  Então: com certeza.
Bem, acho que foi isso. Após este e-mail, apenas mais um ou dois sobre colocar ou não estes resumos no blog, o que, pelo que se pode ver, foi feito. :-)
E a partir do próximo 'Code Dojo PyD'Égua', colocarei o resumo direto aqui, e as discussões acontecerão nos comentários.

Segundo Code Dojo

Nosso segundo Code Dojo aconteceu no dia 26/11/2010. Os participantes foram: Sebastião, Rogênio, Marcelo, Rogênio e Francival.
Apenas pra constar, esqueci de colocar no post "Meu primeiro Code Dojo", mas nosso primeiro Code Dojo aconteceu no dia 19/11/2010, e estavam presentes, além dos que citei acima, o Ézyo.
Abaixo o e-mail com o resumo do problema e do código gerado:
 Hoje fizemos nosso segundo Dojo, e foi bem legal. Todo mundo tava empolgado e concentrado no problema (ou na resolução dele! :-) ).

O Ézyo não pode participar, mas já é esperado para o próximo, e tivemos a presença do Marcelo, ajudando com sua experiência em desenvolvimento de software.

Vamos ao "registro":


Problema:

O problema foi sobre algarismos romanos. Explicando: dado um número decimal, deveria ser retornado seu equivalente em algarismos romanos e vice-versa. Limitamos o número máximo em 3000. Infelizmente não conseguimos resolver o problema, mas certamente valeu por mais esta experiência com a técnica (Code Dojo), e também por ver a empolgação e o empenho de todo mundo. Teve gente até dizendo que não tava na sala, mas isso a gente deixa pra lá!! :-))

Código:
Bem, o código, como havia prometido, está no pastebin. O endereço é o seguinte:
http://pastebin.com/PLsiKv7g

Agora, a avaliação do "evento":  :-)


Pontos positivos:

  • Melhor entendimento da metodologia de TDD - Desenvolvimento Orientado a Testes;
  • Entendimento e uso do BabybStep;
  • O problema escolhido foi considerado bom e adequado;
  • Foi bom também para aprender um pouquinho mais de Python;
  • A explicação inicial do Marcelo sobre TDD foi interessante para nos mostrar que estávamos no caminho correto desde o outro Dojo e também para clarear/sedimentar nosso entendimento sobre TDD;
  • A experiência do Marcelo foi de grande ajuda no "evento".
Pontos negativos:
  • O atraso no início, pois marcamos para 15:00h mas começamos somente 16:10h;
  • O piloto e o co-piloto devem explicar melhor o que estão fazendo;
  • Utilizar sempre os casos de teste ao invés de testar alguma coisa "por fora".
Como se pode perceber, foram mais pontos positivos que negativos, o que é muito bom e já me deixa empolgado pra marcar o próximo para a próxima sexta-feira, 03/12/2010, às 15:00h, no mesmo bat-local. Bora? :-)

Tô mandando cópia também pra Priscilla. Quem sabe ela não se empolga e participa do próximo, nem que seja só como platéia, né Tia Pris? ;-)
O e-mail seguinte foi meu, tentando resolver o problema e criando um monstro!
Mais uma vez não conformado em não ter resolvido o problema, de novo resolvi resolver (preciso fazer um curso pra melhorar minha redação... o_O) o problema que usamos no nosso CodeDojoPydégua. :-)

Resolvi tratar o número dígito a dígito, ou seja, trato a unidade, dezena, centena e milhar individualmente e depois retorno o resultado concatenado. Funciona até 3.999, indo um pouco além do que limite que acordamos no problema, que era de 3.000.

Bem, funciona... mas acho que criei um monstro. Na verdade, quando terminei a minha primeira versão, vi que tinha criado um monstrão, mas depois de refatorar o código (falei bonito agora, hein?? :-) ), o monstrão se tornou um monstrinho até simpático.

Coloquei o código no pastebin ( http://pastebin.com/08X8yBNt), e aguardo ansiosamente os comentários e os melhoramentos de vocês.
Não esqueçam de que nosso próximo CodeDojoPydégua está agendado para a próxima sexta-feira, mesmo bat-horário e bat-local!
O Rogênio, acho que com pena do monstrinho que eu tinha criado, resolveu adotar o pequeno:
    Graças ao monstrinho que o Cléoson mandou, consegui ter uma ideia para diminuir o código. Criei um outro dicionário para usar como índice e utilizei a string do numeral pra definir qual o numeral em romano aplicar e criei um laço para diminuir o código: http://pastebin.com/7FcmMxN9
    Aguardo comentários, melhorias e o próximo dojo.

E assim encerraram-se as discussões do Segundo Code Dojo!

Meu primeiro Code Dojo (Segunda e última parte)

Continuando o post "Meu primeiro Code Dojo (Primeira parte)", coloco abaixo o e-mail no qual respondo ao Sebastião sobre a alteração no código que ele fez. A partir daí, eu "aprendi" que existe o pastebin, e passei a colocar o código lá! :-)


Sebastião e galera,

     Legal o uso do "set". Não sabia que funcionava assim, ficou muito bom, aprendi mais uma (aliás, aprendizado é o que não tá faltando!). Gostei também da abordagem pra realizar o sorteio dos pares, o código ficou bem limpo e legível, bem melhor que o meu, coisa de profissional!! :-))

     Pra gente comparar e aprender mais um pouco, neste link tem o código de resolução pra este problema de uma outra galera. A diferença é que eles colocaram mais um detalhe no problema: pessoas da mesma família não poderiam se sortear. Na resolução deles, eles criaram uma classe (seria orientação a objeto?). E um alento pra gente: eles também não conseguiram terminar!!

    E vamos pra frente!!

P.S.: Da próxima vez, prometo colocar o código em um pastebin da vida. :-)

O Rogênio, que só é calado, deu uma corrigida no código alterado pelo Sebastião:
No código que o Sebastião enviou, é preciso alterar a linha 23 para mostrar todas as duplas sorteadas. A pequena alteração pode ser vista em http://pastebin.com/diff.php?i=rHddAWmL
 E o Sebastião concordou com a alteração respondendo o seguinte:
Isso que dá não fazer TESTE antes ... :-)

O Cléoson atentou que para uma lista de 4 mosqueteiros, range(-1, len(lista)-2) ==> range(-1,2) gera os itens -1, 0, 1.
E range(-1, len(lista)-1) ==> range (-1, 3) gera os itens -1, 0, 1, 2

Beleza!

O próximo post, que será o resumo do segundo Code Dojo, deve ficar menor, já que eu "aprendi" a usar o pastebin pra colocar os códigos! :-)

Meu primeiro Code Dojo (Primeira parte)

Conforme prometido no post abaixo (Python), aí vai o resumo do nosso primeiro Code Dojo. O texto é o mesmo que enviei no e-mail original. E pra não ficar muito grande esta postagem, vou dividí-la em duas partes. A primeira segue abaixo:
E foi grupal! :-))


Brincadeiras a parte, achei muito legal e produtivo. Então, coloco abaixo pra nosso registro o problema, o código a que chegamos e a avaliação. Estejam à vontade para contribuir:


Problema:


Amigo Secreto:


Entrar com uma lista de nomes e sair uma lista com pares.
  • Um dos nomes do par é aleatório.
  • Um usuário não pode se “auto-sortear”.
  • Uma pessoa não pode ser sorteada duas vezes.
Exemplos:
  • Entrada: Francival, Sebastião, Ézyo, Rogênio, Cléoson
  • Saída: Sebastião tirou Francival; Francival tirou Rogênio; ...
Código: (vou mandar em anexo o arquivo)


#!/usr/bin/env python
# -*- encoding:utf-8 -*-


import unittest,random


#def ListarAmigos:
#TODO


def ListarAmigos(amigo1, amigo2):
    return amigo1 == amigo2
   
def sorteio(amigos):
    amigo=amigos[0]
    amigosDisp=amigos[0:1]
    num=random.randrange(len(
amigosDisp))
    par = (amigo, amigosDisp[num])
    print par
    return par
 
class teste_amigos(unittest.TestCase):


    def teste_igual(self):
        self.assertEqual(ListarAmigos("Maria", "Joao"), False)
       
    def teste_sorteio(self):
        amigos=["dartanham","athos", "porthos", "aramis"]
        listaPar = sorteio(amigos)
        self.assertNotEqual(listaPar[0], listaPar[1])
       
#        self.assertEqual(par[0], "dartanham")
#        self.assertNotEqual(par[1], "dartanham")

   
unittest.main() 
Avaliação:


Pontos positivos:
  • Entendimento da metodologia: foi bem proveitoso no sentido de conhecer a metodologia do Code Dojo na prática.
  • Instalações: Sala, refrigeração, computador, a TV de 50 polegadas, tudo em cima e funcionando.
  • Aprendizado da linguagem Python: Sempre se aprende algo de linguagem em situações assim.
  • Foi divertido!!
Pontos negativos:
  • Problema mais simples: Por ser o nosso primeiro Code Dojo, poderia ter sido escolhido um problema mais simples. Bem, vou me defender: eu achei que este problema era simples! :-)
  • Pouco conhecimento de Code Dojo e TDD: O fato de termos pouco conhecimento de como funciona um Code Dojo, e principalmente o desenvolvimento orientado a teste, nos fez perder algum tempo tentando entender como eles funcionavam.
  • Intromissão do público no piloto e co-piloto: O pessoal que estava como público sem empolgava e dizia como o piloto deveria fazer isso ou aquilo. Normal, todos queriam ver o código pronto. Mas para os próximos, vamos tentar nos conter. :-)


Finalizando, gostaria de marcar o próximo Code Dojo para a próxima sexta-feira, 26/11/2010, no mesmo bat-horário e bat-local, ou seja, 15:00h. O problema deve ser com números decimais e romanos, mas não pesquisem antes senão não vai ter graça! Todo mundo de acordo?


Ah, e se alguém conseguir fazer o código deste problema, manda pra todo mundo!
Esse foi o primeiro e-mail. Depois, seguindo a discussão, enviei outro e-mail, com um melhoramento (pelo menos eu acho que ficou melhor :-) ) no código. O e-mail foi:

Não consegui me conter e "resolvi resolver" (o_O) o problema do nosso Code Dojo. Envio o arquivo "amigos.py" em anexo com o código.

     A minha lógica (que eu peguei emprestado do Rogênio :-) ) foi a seguinte: eu pego a lista de entrada, "embaralho" ela, e depois crio os pares em seqüência, ou seja, o elemento[0] da lista "tira" o elemento[1], o elemento[1] "tira" o elemento[2] e assim por diante até o final da lista. Quando chega no final, o último elemento "tira" o primeiro elemento da lista fechando o ciclo. Assim, acho que resolvo o problema de ter número par ou impar de participantes, e também resolvo o problema de "sorteio recíproco".
     Eu acrescentei um teste e eliminei outro: acrescentei um para ver se existem elementos repetidos lista, afinal de contas ninguém participa duas vezes do amigo secreto; e eliminei um (o teste " def teste_igual(self):" do código do e-mail anterior) que fiz de outra forma, ou seja, depois de formados os pares.
     Pra facilitar os (muito aguardados) pitacos de vocês no código, colo-o abaixo:
#!/usr/bin/env python
# -*- encoding:utf-8 -*-

import unittest,random
def nomeRepetido(lista):
    """
    Verifica se a lista tem nomes repetidos.
    """
   
    flag = True
    tamLista = len(lista)
    for i in range(tamLista - 1):
        for j in range(1, tamLista):
            if i < j:
                if lista[i] == lista[j]:
                    flag =  False
    return flag
      
def sorteio(lista):
    """
    Realiza o sorteio dos pares.
    """
   
    random.shuffle(lista) # "Embaralha" a lista recebida
    pares = {} # Cria um dicionário vazio onde serão armazenados os pares
    i = 0
    while i < len(lista):
        amigo1 = lista[i]
        if i == len(lista) - 1:
            amigo2 = lista[0]
            pares[amigo1] = amigo2
            i = i + 1
            continue
        amigo2 = lista[i+1]
        pares[amigo1] = amigo2
        i = i + 1
    return pares


class teste_amigos(unittest.
TestCase):
   
    def teste_repetido(self):
        lista = ["D'Artagnan","Athos", "Porthos", "Aramis"]
        self.assertEqual(nomeRepetido(

lista), True)
       
    def teste_sorteio(self):
        lista = ["D'Artagnan","Athos", "Porthos", "Aramis"]
        listaPar = sorteio(lista)
        for par in listaPar:
            self.assertNotEqual(par, listaPar[par])

unittest.main()
O Sebastião, que manja de programação mas é modesto pra admitir :-), respondeu o seguinte:

Muito bom o código, gostei da função shuffle, eu não conhecia. E os testes ficaram bem legais.
Estou enviando uma outra forma de implementar as funções: http://pastebin.com/yjpVhCmu

Continua no próximo post...

segunda-feira, 6 de dezembro de 2010

Python


Há alguns meses, por um ou outro motivo, coloquei na cabeça que eu deveria aprender uma linguagem de programação. Como onde eu trabalho tem muito desenvolvimento em Java, resolvi estudar essa linguagem. Acontece que enquanto eu estudava Java, conheci o Python. Na verdade, conheci novamente, já que havia feito um curso de Python anos atrás, mas ficou só nisso, não dei continuidade a esse conhecimento.

Então, deixei o Java um pouco de lado e comecei a estudar Python de novo. Dessa vez me inscrevi na lista Python-Brasil (excelente lista por sinal), e pedi a indicação de alguns livros. Dentre os livros indicados, comecei com "Python para Desenvolvedores". Baixei a versão em PDF daqui, e comecei a estudar. Mas quando chegou a uma determinada altura do livro, achei que eu não estava conseguindo entender direito, então resolvi ler outro livro e verificar se o problema era meu ou do livro. Assim, comecei a ler "Aprenda computação com Python", que pode ser baixado aqui. Já li mais da metade do livro, e estou gostando.

Paralelo a essa leitura, tentei contagiar alguns colegas do trabalho com o Python, e acho que eles "pegaram corda". Cabe dizer aqui que não sou desenvolvedor (pelo menos ainda!), e sempre trabalhei na área de redes/infra-estrutura/administração de servidores. E conversando com esse pessoal, conheci o Code Dojo. Li sobre Code Dojo aqui e aqui, e achei interessante a ideia desse método. Um dos colegas, o Francival, participou de um Code Dojo, e falou que realmente é muito interessante para treinar a linguagem e também aprimorar as técnicas de desenvolvimento.

Resumindo, resolvemos começar a realizar Code Dojo, e acho que o negócio está dando certo, pois já realizamos 3 Code Dojo e o quarto já está marcado!

No final de cada Code Dojo, envio, via e-mail, um resumo do problema, o código que conseguimos fazer e a avaliação do encontro (pontos positivos/pontos negativos). Como sei que é meio difícil a gente achar uma mensagem no meio de 1.646.634 de mensagens que tem no GMail, achei mais interessante colocar as mensagens aqui no Blog. Assim, fica mais fácil de localizar quando for necessário, e ainda pode ser que ajudemos alguém com a experiência que estamos tendo. Então, a partir de agora e até alguém sugerir um lugar melhor, vou colocar os resumos dos nossos Code Dojo's aqui.

Nos próximos posts vou colocar também o resumo dos outros 3 Code Dojos que já realizamos, pra ficar como histórico. Então, me aguardem!