SlideShare une entreprise Scribd logo
1  sur  27
Télécharger pour lire hors ligne
Título do Trabalho: Coding-Dojo: Uma forma rápida, eficiente e
divertida de aprender e ensinar
Autor 1: SERGE NORMANDO REHEM
Autor 2: MÁRCIO LIMA ALBUQUERQUE
Tema: Gestão Pública e Responsabilidade Social e Ambiental
Total de páginas: 22
Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar
ConSerpro 2010
Congresso Serpro de Tecnologia e Gestão
Aplicadas a Serviços Públicos
Título do Trabalho: Coding-Dojo: Uma forma rápida, eficiente e
divertida de aprender e ensinar
Tema: Gestão Pública e Responsabilidade Social e Ambiental
2010
2
Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar
RESUMO DO TRABALHO
Título do Trabalho: Coding-Dojo: Uma forma rápida, eficiente e
divertida de aprender e ensinar
Tema: Gestão Pública e Responsabilidade Social e Ambiental
1. Nome dos autores
Autor 1: Serge Normando Rehem
Autor 2: Márcio Lima Albuquerque
2. Lista de palavras chaves para classificação bibliográfica
aprendizado. ensino. treinamento. coding-dojo. dojo. xp. extreme programming.
manifesto ágil. agile. tdd. retrospectiva.
3. Resumo
Programadores não treinam. Ao adentrarem formalmente no mercado de trabalho parece
que perdem aquela prática adquirida em tempos de faculdade ou curso técnico, quando
passavam horas juntos com outros colegas, resolvendo listas de exercício ou trabalhos
finais das disciplinas relacionadas à programação. A pressão por prazos e resultados os
faz "praticar" direto em código de produção, na base da tentativa e erro. Daí a quantidade
absurda de "código esquisito" que vai encontrando (e produzindo!) no decorrer da vida
profissional. Se além de talento, claro, artistas e esportistas praticam diariamente para
alcançar níveis de excelência, por que os profissionais de informática não o fazem? Foi
com base nessa indagação que um grupo de programadores franceses resolveu criar
uma oportunidade para que eles pudessem se reunir e aprender. As sessões foram
batizadas de Coding-Dojo, inspirados no local (pronuncia-se Dojô) utilizado pelos
praticantes de artes marciais - desde os iniciantes até os mestres - para a repetição
sucessiva de movimentos. Um espaço convidativo, não hostil, destinado à troca de
experiencias, tendo como base um desafio de programação. Reuniões curtas (2 horas, no
máximo), utilizando práticas da Extreme Programming (XP) como Desenvolvimento
3
Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar
Orientado a Testes (TDD - Test Driven Development), Refatoração, Programação em
Pares, Baby Steps, Código Coletivo e Design Incremental. Os participantes exercitam
suas habilidades de trabalho em equipes, comportamento em público, programação, uso
de processos ágeis, ferramentas e técnicas de desenvolvimento. Ao final, uma
retrospectiva envolvendo todos, destacando o que favoreceu e o que dificultou o
aprendizado. E a constatação de consequências inevitáveis: códigos mais bem escritos,
testados, documentados e preparados para evoluir. Software de qualidade, cliente
satisfeito. Os Dojos estão rapidamente se espalhando pelo mundo, em empresas,
faculdades e comunidades virtuais, sendo até mesmo utilizados em processos de
recrutamento e seleção. Também podem ser facilmente aplicados a contextos diferentes
da programação. Em complemento aos treinamentos tradicionais (onde, muitas vezes, um
fala, os outros escutam, repetem exercícios "copiando e colando", dias depois se
esquecem), uma das regionais do Serpro vem frequentemente realizando Coding-Dojos,
transformando as oportunidades de aprendizado em ocasiões práticas, eficientes,
empolgantes e divertidas. Este trabalho visa apresentar as técnicas e compartilhar as
experiencias vivenciadas, que a cada sessão provocam a vontade de envolver mais
pessoas, disseminar a ideia e partir para novos desafios. Pensar e agir diferente, ampliar
horizontes, aprender, ensinar e trabalhar com alegria.
4
Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar
CURRÍCULOS DOS AUTORES
Autor 1: Serge Normando Rehem
SERGE NORMANDO REHEM é PMP, especialista em Sistemas Distribuídos pela UFBA
e possui MBA em Administração pela Unifacs. Analista do Serpro há 12 anos, atualmente
lidera a equipe técnica do Framework Demoiselle, na projeção da Coordenação
Estratégica de Tecnologia (Cetec) na regional Salvador. É líder do grupo de usuários
JavaBahia, colunista da revista Java Magazine e autor do blog bazedral.blogspot.com,
sobre trabalho colaborativo.
Autor 2: Márcio Lima Albuquerque
MÁRCIO LIMA ALBUQUERQUE é mestrando em Sistemas e Computação pela Unifacs e
professor de Processos Ágeis na Pós-graduação da Ruy Barbosa. Está no SERPRO há 5
anos e atualmente lidera o setor de Pool de Pessoas da DESDR. É um dos líderes do
PHPBA, disseminador de desenvolvimento PHP com técnicas ágeis e líder técnico do
projeto RekZit, ferramenta livre para gestão de requisitos.
5
Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar
SUMÁRIO
INTRODUÇÃO..................................................................................7
1. A Pedra Fundamental .................................................................7
1.1. De Onde Veio a Motivação......................................................9
1.2. Os Valores do Manifesto Ágil................................................10
2. Aprendendo a Aprender...........................................................11
2.1. A Espiral do Conhecimento.................................................................12
2.1.2. Um Exemplo Bem Que Ajudaria.......................................................14
2.2. A Organização que Aprende...............................................................15
3. O Fantástico Mundo da Programação de Computador.........17
4. Coding-Dojo – A Arte de Treinar Programação.....................19
4.1. Princípios do Coding-Dojo...................................................................20
4.2 Modalidades de Coding-Dojo................................................................22
4.3. Dojo na Prática, Experiencias no Serpro............................................22
CONCLUSÃO..................................................................................25
BIBLIOGRAFIA...............................................................................26
6
Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar
INTRODUÇÃO
Começo este trabalho pedindo licença para usar a primeira pessoa do singular1
,
propositalmente contrariando as regras acadêmicas. Buscarei citar as referencias, mas
me darei ao direito de falar diretamente para o leitor, compartilhando minhas ideias e
percepções sem muita formalidade nem rigor estético. Usarei negrito para enfatizar
conceitos e ideias. Esta abordagem tem o objetivo de facilitar tanto a minha escrita quanto
sua compreensão. É um trabalho sobre aprender e ensinar, por isso procuro usar
linguagem e forma que favoreçam a assimilação do conteúdo tratado.
A vontade de escrever esse trabalho surgiu da prática. Embora eu já tivesse lido sobre
Coding-Dojo, sair da inércia e começar a promover e a participar de sessões provocou em
mim - e em vários outros participantes - uma mudança ainda meio que inexplicável de
comportamentos e atitudes. Senti vontade compartilhar esse sentimento, mas ainda não
sabia bem como. Comecei pelo óbvio, disponibilizando os registros de cada reunião em
um site na internet, mais especificamente um grupo de usuários de participação aberta,
que vem agregando novos membros a cada dia.
Se você leu o resumo, pode estar pensando: "mas por que um trabalho sobre técnicas de
aprendizado em programação está num tema relacionado à Gestão Pública e não em
outro mais técnico”? A razão é que não queremos focar nas questões de engenharia de
software, mas sim nas consequências positivas da aplicação de técnicas diferentes
de aprendizado, favorecendo um ambiente de criatividade e inovação. Isso não é o
desejo de todo o bom gestor?
A partir de agora pretendo leva-lo junto comigo nessa história. Topa? Então vamos nessa.
1. A Pedra Fundamental
Desde que tive a ideia de escrever este trabalho, eu queria evitar ao máximo começar
direto falando do Coding-Dojo. Precisaria ir “mais acima”, buscar as “causas raízes”, as
motivações principais que desencadearam esse movimento. Percorri o caminho inverso.
Primeiro observei que na essência do Dojo, como veremos mais adiante, estão várias
práticas da eXtreme Programming (BECK & ANDRES, 2004), que queriam ser
1 É um trabalho de 2 autores, então quando disser EU, entenda que falo em nome de ambos. Quando disser NÓS,
também inclui VOCÊ, leitor.
7
Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar
fortalecidas pelos criadores originais do Coding-Dojo. O XP é uma das chamadas
Metodologias Ágeis (REIS, 2008), derivada do Manifesto Ágil2
, cujos detalhes veremos
logo adiante.
Descobri, então, que o signatários originais do Manifesto, 17 nomes proeminentes da
Engenharia de Software, se encontraram em 2001 para compartilhar seus conhecimentos
e experiencias sobre essas metodologias ágeis, todas com alguma inspiração no artigo
The New New Product Game (NONAKA & TAKEUCHI, 1986). Seus autores, professores
universitários japoneses, descrevem um estilo de trabalho para desenvolvimento de novos
produtos que se parece com um jogo de Rugby, mais especificamente numa formação
ordenada conhecida como Scrum. Foi daí que Jeff Sutherland e Ken Schwaber definiram
o framework Scrum (SCHWABER & SUTHERLAND, 2009) e começaram a evangelizá-lo
para o desenvolvimento de software. Na definição da Wikipedia3
, “o Scrum é uma
metodologia de desenvolvimento iterativo e incremental para gerenciamento de projetos e
desenvolvimento ágil ... pode ser utilizado ... como uma abordagem geral de
gerenciamento de projetos/programas”. Em paralelo, Kent Beck deu início à outra
vertente que ficou conhecida como “Extreme Programming (ANDRES & BECK, 2004)”, é
uma metodologia ágil para equipes pequenas e médias que desenvolvem software
baseado em requisitos vagos e que se modificam rapidamente, enfatizando a importância
do feedback constante, a abordagem incremental e o encorajamento da comunicação
entre as pessoas.
Presente em todos esses trabalhos derivados, a filosofia de Respeito pelas Pessoas e
Melhoria Contínua, pilares da Toyota Way (LIKER, 2004) e, portanto, do sistema de
produção da Toyota. A base desse sistema é o Lean Manufacturing (BADURDEEN,
2007), um conjunto de conceitos e procedimentos que visam simplificar o modo como
uma organização produz valor para seus clientes enquanto todos os desperdícios
são eliminados. O Pensamento Lean (JONES & WOMACK, 2003) extrapolou a
manufatura e é também uma forte fonte de inspiração para todo esse movimento. O artigo
on-line de AKITA (2010) sobre Gestão 2.0 me ajudou a montar esta rápida "retrospectiva
reversa", então fica a indicação.
Encontrada essa vertente Agile, eu precisava agora buscar conceitos relacionados a
2 http://pt.wikipedia.org/wiki/Manifesto_Ágil
3 http://pt.wikipedia.org/wiki/Scrum
8
Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar
aprendizagem e conhecimento. Seguindo dica de um colega, simpatizante e estudioso do
tema, uma grata surpresa: A obra Criação de Conhecimento na Empresa: Como as
Empesas Japonesas Geram a Dinâmica da Inovação, dos mesmos NONAKA e
TAKEUCHI (2008), é referencia obrigatória. Nela, os autores associam o desempenho
das empresas de seu país à capacidade de gerar novos conhecimentos e usá-los no
desenvolvimento de produtos e tecnologias de grande êxito e alto grau de
inovação. Aí as coisas começaram a fazer ainda mais sentido, não foi uma mera
coincidência. Está tudo realmente interligado.
No restante desta seção vamos explorar um pouco esses fundamentos relacionados a
metodologias ágeis e processos de aprendizagem.
1.1. De Onde Veio a Motivação
Final de 2008, início de 2009, eu já vinha lendo aqui e ali sobre “a tal” das metodologias
ágeis de desenvolvimento de software. Percebia que era um movimento crescente, cada
vez mais gente falando e usando, mas não compreendia bem do que se tratava. Os
“agilistas” pareciam para mim um bando de preguiçosos que não queriam seguir
processos nem fazer documentação. Acham que podem ouvir o cliente e partir direto para
a programação da solução. Pura desinformação e preconceito.
Resolvi que precisava aprender sobre o assunto, até para poder criticar, mas com
embasamento. Eu não queria ficar procurando informações aleatoriamente, ia perder
muito tempo. Seria bom ter contato direto com quem já conhece e pratica. “Preciso
participar de um evento que fale disso ai”. Como “Maomé não vai à montanha”, ignorei o
fato que na minha cidade não tinha nada abordando o tema, conversei com alguns
amigos experientes (eu vinha acompanhando seus blogs e os “vendo” palestrar por aí), de
outros estados, e resolvemos realizar um evento4
com cursos e palestras sobre Agile. Eu
ajudei a organizar, aumentei meu networking, aprendi e favoreci o aprendizado de
bastante gente (foram cerca de 180 participantes), movimentei o mercado (profissionais e
a academia) e me diverti. E comecei a praticar imediatamente, aproveitando que estava
mudando de função no Serpro, com uma equipe nova, num desafio que me permitia
experimentar novidades. Isso já tem mais de um ano e meio.
4 O Maré de Agilidade virou um maior sucesso e já percorreu 6 estados. Realizado pela e para a comunidade, vem
disseminando valores, princípios e práticas ágeis pelo Brasil. www.maredeagilidade.com.br.
9
Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar
1.2. Os Valores do Manifesto Ágil
Em 2001 um grupo renomado de consultores, analistas e programadores resolveu se
reunir em Utah, EUA, para pensar novas formas de desenvolver software, meio que
insatisfeitos com panorama predominante na ocasião: uma ênfase muito grande em
processos, documentação excessiva, contratos, burocracia. O código estava perdendo
importância, ficando em segundo plano, como se fosse uma mera atividade de traduzir
diagramas em uma linguagem de programação. Justamente aquilo que efetivamente faz
uma aplicação funcionar, o único artefato que realmente pode vir a atender a necessidade
de cliente, através de um produto de software funcionando. Era preciso resgatar alguns
valores, princípios e práticas essenciais. O resultado do encontro é o conhecido Manifesto
Ágil publicado em http://agilemanifesto.org. A Figura 1 tem os Valores5
exibidos na página
inicial.
Figura 1. O Manifesto Ágil.
5 Coloquei a inicial em maiúsculo para enfatizar sua importância no contexto deste trabalho. A palavra tem muitos
significados, utilizar aqui uma das definições da Wikipedia: “Os valores humanos são os fundamentos éticos e
espirituais que constituem a consciência humana. São os valores que tornam a vida algo digno de ser vivido,
definem princípios e propósitos valiosos e objetiva fins grandiosos.”. Fonte:
http://pt.wikipedia.org/wiki/Valor_(filosofia)
10
Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar
Peço que leia atentamente o que está sendo dito. Agora respire fundo, pare um pouco e
reflita sobre a profundidade do que está escrito. Agora releia trocando a palavra
“software” por “produto”, de qualquer natureza. Consegue perceber a universalidade do
manifesto?
No site há também um link para 12 princípios, muitos deles com foco direto em software.
Destaco 3 (os grifos são meus):
• Construir projetos ao redor de indivíduos motivados. Dando a eles o ambiente e
suporte necessário, e confiar que farão seu trabalho.
• O Método mais eficiente e eficaz de transmitir informações para, e por dentro de
um time de desenvolvimento, é através de uma conversa cara a cara.
• Em intervalos regulares, o time reflete em como ficar mais efetivo, então, se
ajustam e otimizam seu comportamento de acordo.
Olhando valores e princípios podemos observar o quanto eles estão buscando dar a
devida importância às pessoas, a comunicação direta, o feedback, a colaboração a
confiança, a melhoria contínua. Questões que deveriam estar presentes na essência de
qualquer equipe excelente.
2. Aprendendo a Aprender
Treinamento. Essa é “top of mind”. Quando falamos de aprendizado, normalmente a
imagem que nos vem à cabeça é a de um professor de pé, com um giz branco na mão
escrevendo num quadro negro (não sei porque esse nome, pois comumente são verdes),
“transferindo” o conhecimento para seus aprendizes. Tem sido assim desde as nossas
mais tenras lembranças da escola. “Ah, mas agora não é mais desse jeito, o mundo
mudou”, você pode estar pensando. Será?
Quadro negro e giz foram trocados por pincéis atômicos, flip-charts e quadros brancos,
surgiram as transparências (aquelas mesmo, impressas num papel transparente e
projetadas na parede por aquele aparelho que acendia uma luz.... como era o nome
mesmo?) e agora os slides (já reparou que ainda continuamos o vício de chama-los de
transparências?) das apresentações PowerPoint (prefiro o BrOffice, é gratuito e o código-
fonte está disponível sob licença livre) e data shows, tudo computadorizado. Mas ainda é
o velho e bom mestre, repassando toda a sua sabedoria para os ansiosos aprendizes.
11
Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar
Somos muitos condicionados a copiar, a repetir, a decorar, mas efetivamente será
que aprendemos a raciocinar?
Como tudo na vida, este modelo tem vantagens e desvantagens. Na escola, cumpre seu
papel, até porque – na sua maioria - os exames de ensino médio e vestibulares são
condizentes com ele. Mas na empresa, quantas e quantas vezes percebemos tempo e
dinheiro jogado fora com “treinamentos que não servem para nada”? As razões para
a falta de efetividade são diversas, vou relacionar algumas: “O professor não tinha
didática”, “O material fornecido era de baixa qualidade”, “A carga horária foi insuficiente”,
“O coffee-break estava fraco”, “Eu até aprendi, mas não tenho oportunidade imediata de
aplicar, então quando eu realmente precisar vou ter que ser treinado de novo”.
Palestras, workshops, seminários, congressos, encontros, …, todos apenas repetem o
mesmo modelo, disfarçado de outros nomes, com outros formatos. Com as mesmas
vantagens e desvantagens.
Será então que essas são as únicas formas de aprender e ensinar? Mas, o que realmente
significa “aprendizagem”? Vamos agora a um pouco de teoria.
2.1. A Espiral do Conhecimento
Derivada do latim apprendere, a palavra aprender significa agarrar, apoderar-se de
alguma coisa. Aprendizagem é, pois, aquisição de um certo saber com ajuda do outro ou
por si só (Silva, 1986). Pela Wikipedia6
, “O processo de aprendizagem pode ser definido
de forma sintética como o modo como os seres adquirem novos conhecimentos,
desenvolvem competências e mudam o comportamento”.
Voltando então ao treinamento tradicional, que citei no item anterior, quantos deles
efetivamente implicaram em uma mudança comportamental? Ah.. por falar nisso você já
deve ter participado daqueles “treinamentos comportamentais”, focados em melhorar a
gestão de pessoas, relacionamento das equipes, abordando palavras bonitas como
coaching e feedback. Tem aquelas dinâmicas legais, né?! Mas o dia-a-dia nos consome e
depois de um tempo “tudo volta a ser como dantes no quartel de abrantes”. Não é culpa
de ninguém em específico, na minha humilde opinião. O problema é que aqueles
conhecimentos para efetivamente serem incorporados no cotidiano precisam ser
praticados, vivenciados. É aí que a “porca torce o rabo”.
6 http://pt.wikipedia.org/wiki/Aprendizagem
12
Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar
Trabalhos sobre Gestão do Conhecimento não faltam por aí. Uma “googleada” rápida e
você pode encontrar centenas de artigos e livros. NONAKA & TAKEUCHI (2008)
defendem que a base para o aprendizado organizacional é a transformação do
conhecimento tácito em explicito através da interação social. Não entendeu? Se
preocupa não, a gente consegue.
Vamos começar conceitando. Conhecimento tácito é aquele não escrito, subjetivo, que
está na cabeça das pessoas. Depende dos valores, crenças e habilidades pessoais, das
experiências vividas por cada indivíduo. Por isso é difícil ser formalizado, transferido ou
explicado a outros. Conhecimento explícito, por sua vez, é objetivo, podendo ser
repassado pela linguagem falada, escrita e corporal através de aulas, palestras, livros,
artigos, gráficos, tabelas, documentos, diagramas, vídeos e tantas outras formas.
Segundo NONAKA & TAKEUCHI (2008), os conhecimentos tácito e explicito são
unidades estruturais básicas que se complementam e a interação entre eles é a principal
dinâmica da criação do conhecimento na organização de negócios. Como assim,
“interação entre eles”? Para explicar, os autores criaram uma espiral do conhecimento,
exibida na Figura 2.
Figura 2. Espiral do Conhecimento.
Cada quadrante corresponde a um dos quatro processos elencados, definidos abaixo:
• Socialização é o compartilhamento do conhecimento tácito entre pessoas, por
meio da observação, imitação ou prática. Experiencias e modelos mentais são
compartilhados via trabalho em equipe. Ocorre diálogo frequente e comunicação
face à face (“hum... acho que já li algo sobre isso nesse texto”).
• Externalização é a conversão do conhecimento tácito em explícito. Em outras
palavras, o conhecimento deixa de estar apenas na mente dos indivíduos e passa
13
Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar
a ser externado através de textos, diagramas, modelos, metáforas, conceitos,
hipóteses, imagens, vídeos e tantos outros. O código-fonte gerado por um
programador, por exemplo, se encaixa nesta categoria.
• Combinação é o reagrupamento, classificação ou sistematização de
conhecimentos já explicitados. Esta reconfiguração pode levar a novos
conhecimentos. É mais ou menos o que estou fazendo nesta sessão, agregando
informações publicadas por outros autores, tentando esclarecer os conceitos
fundamentais necessários para uma melhor compreensão do que vem a seguir.
• Internalização (ou Interiorização) é o processo de incorporação do conhecimento
explícito em tácito. É o aprendizado pela prática, é fazer com que o conhecimento
seja agregado às rotinas diárias. Todas os demais processos podem contribuir
para a internalização. Leitura, auto-estudos, dinâmicas de grupo, podem auxiliar,
mas nada como a experiencia.
No centro da espiral, a aprendizagem ocorre entre indivíduos da mesma equipe. Quanto
mais afastado deste ponto, significa que o aprendizado ultrapassa as fronteiras
hierárquicas do setor, departamento, superintendência e até mesmo da organização.
2.1.2. Um Exemplo Bem Que Ajudaria
Para ilustrar, vou usar o exemplo do meu pai7
. Ele conta que, ainda criança, sempre que
saía de carro com meu avô, observava atentamente seus movimentos e atitudes no
trânsito. E se imaginava fazendo o mesmo. Sem nunca ter sido formalmente treinado ou
pelo menos lido um manual de direção, meu pai estava iniciando seu aprendizado sem
jamais ter assumido o volante. Chegou o dia, com 14 anos, que meu avô cedeu o lugar de
motorista e lhe deu a primeira oportunidade de praticar. Meu pai conseguiu movimentar o
carro “de primeira”, sem deixar o carro morrer nem uma única vez
A partir de então, meu avô assumiu o papel de mestre e – junto com as “aulas práticas”
passou também a explicar gradativamente os conceitos de direção, leis de trânsito e
mecânica, externalizando e socializando seus conhecimentos e habilidades. Nas
primeiras vezes, nervosismos a cada meia-embreagem, redução de velocidade, mudança
de faixa. Meu pai precisava se preocupar com cada movimento do seu corpo, do carro,
dos outros automóveis, dos pedestres e do ambiente. Informação demais. Aos poucos,
7 Neste caso, o “meu” é de apenas um dos autores, pois esclareço que não somos irmãos
14
Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar
todo este aprendizado vai sendo internalizado, conhecimentos e habilidades são
assimilados e adquiridos. Dirigir passa a se tornar algo banal, automático, até
inconsciente (enquanto motoristas, quantas vezes chegamos em algum lugar e nem
sequer lembramos do caminho percorrido?). Não preciso dizer que tirar a carteira de
motorista ao completar 18 anos foi a maior moleza.
Aulas teóricas sobre funcionamento do carro, leis de transito, mecânica, nada disso
efetivamente nos ensina a dirigir. Os instrutores de auto-escola estudam, sistematizam
(combinação), escrevem os módulos de treinamento (externalização), transmitem seus
conhecimentos e experiências em aulas práticas (socialização), tudo isso visando que
aqueles conhecimentos explícitos sobre direção de veículos possam ser transformados
em tácito (internalização), e os novos motoristas possam tirar sua carteira de habilitação,
adquirindo a permissão legal para dirigir.
Busquei esse exemplo banal para tentar explicar os conceitos de uma forma didática.
Vale ressaltar que os quatro processos podem ocorrer simultaneamente, mesmo tendo a
predominância de algum(ns). Neste próprio trabalho está havendo externalização (estou
“pondo pra fora” um bocado de coisas que venho aprendendo), combinação (agregando e
correlacionando conceitos) e socialização (estou compartilhando experiencias, abrindo
meu coração!). Já quanto à internalização, essa depende muito de você.
2.2. A Organização que Aprende
Nas “organizações que aprendem as pessoas expandem continuamente sua capacidade
de criar resultados que elas realmente desejam, onde maneiras novas e expansivas de
pensar são encorajadas, onde a aspiração coletiva é livre, e onde as pessoas estão
constantemente aprendendo a aprender coletivamente” (SENGE, 1999, p. 21).
“Gestão do Conhecimento” já foi termo da moda, tema de muitos seminários, congressos,
artigos e livros. O próprio Serpro é referencia nacional nesta área. Tem livro publicado e
disponível na Internet (SOUZA et al, 2001), escrito por diversos autores, na sua maioria
funcionários da empresa, no verdadeiro espírito e prática de construção coletiva.
Pode parecer impressão minha, mas em geral, efetivamente poucas organizações
(brasileiras, principalmente) realmente deram passos firmes na direção de estimular e
favorecer o aprendizado coletivo. O máximo que conseguiram, e isso sem dúvida foi
importante, mas não o bastante, foi criar suas intranets e portais corporativos, realizando
uma melhor organização, disponibilização e busca das informações organizacionais. A
15
Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar
grande questão é que nenhuma mudança organizacional significativa pode ocorrer
sem que haja uma profunda mudança na forma de pensar e interagir das pessoas. A
tradicional ideia do treinamento formal não tem se mostrado suficiente para promover
essas mudanças, por isso e preciso encontrar novos e diferentes caminhos. A cultura
empresarial pode ser, ao mesmo tempo, “mocinho e bandido”.
Veja esses três parágrafos consecutivos da seção sobre Educação Corporativa (SOUZA
et al, 2001, p. 43 e 44), transcritos na íntegra (grifos meus), por se encaixarem
perfeitamente na abordagem que estou adotando:
“Esse novo contexto empresarial redefine o perfil do trabalhador da era do
conhecimento. *Precisa-se de profissionais que aprendam de forma não
convencional e que saibam trabalhar cooperativamente para gerar
soluções inovadoras*. É necessária uma nova abordagem na formação,
agora necessariamente continuada, para que as pessoas permaneçam
produtivas, em condições de acompanhar as mudanças e otimizando seu
tempo. Além disso, a tecnologia vem permitindo desenvolver experiências
para treinar mais pessoas com maior economia.
As empresas começam a perceber a necessidade de transferir o foco
dos esforços de treinamento e educação de eventos em sala de aula,
cujo objetivo é desenvolver qualificações isoladas, para a criação de
uma cultura de aprendizagem contínua, em que os empregados
aprendem uns com os outros e compartilham inovações e melhores práticas
visando solucionar problemas organizacionais reais. O foco do treinamento
vai além do empregado isoladamente para o desenvolvimento da
capacidade de aprendizado da organização, criando situações que permitam
a discussão de problemas comuns e soluções por meio da aprendizagem
coletiva.
Os ambientes de aprendizagem passam a ser reestruturados de forma
a tornarem-se proativos, centralizados, determinados e estratégicos e o
resultado esperado é o “aprender fazendo”, desenvolvendo a capacidade
de aprender e dar continuidade a esse processo na volta ao trabalho."
Preciso dizer mais? Estamos quase prontos para, finalmente, falar sobre o Coding-Dojo.
Antes disso, alguns conceitos básicos sobre Programação, explicados numa linguagem
16
Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar
simples e direta. Uma seção dispensável se você já sabe do que se trata, mas útil se você
não é da área de TI.
3. O Fantástico Mundo da Programação de Computador
Quando comecei a faculdade de informática não tinha muita noção do que iria encontrar,
só tinha um sentimento que seria legal “trabalhar com computador”. Fiquei pasmo quando
o professor de lógica de programação revelou que essas máquinas maravilhosas só
“conhecem” ZEROS e UNS. Isso mesmo, os números 0 e 1. Seus circuitos, placas,
transístores, capacitores, memórias, discos rígidos, apenas tem a capacidade de
interpretara ausência (0) e presença (1) de corrente elétrica. A sequencia de zeros e uns
formam instruções específicas (como listar os arquivos de uma pasta, mostrar uma
imagem na tela, enviar um texto para impressão). Como fazem isso numa velocidade
impressionante, temos a sensação que os computadores são superinteligentes por
realizar tanta coisa. A cada clique o mouse temos a impressão que tudo acontece como
num passe de mágica, sem nos dar conta que eles só realizam aquilo que foram
ensinados a fazer.
Quando compramos um computador, ele já vem com com conjunto de programas
instalado. O sistema operacional, que nos ajuda a organizar arquivos, e os aplicativos
utilitários, como o processador de textos que usei para escrever este trabalho. Esses
programas são instruções escritas por um conjunto de programadores e são executadas
vez que solicitamos. Agora imagine escrever programas complexos e cheios de
funcionalidades apenas com sequencias de zeros e uns. Até pode ser possível, mas
inviável né?
Por isso os programadores tem à disposição as linguagens de programação. Instruções
de alto nível, mais próximas dos humanos do que das máquinas. Os programas-fonte
são um conjunto de comandos (armazenados em um arquivo texto) convertidos para a
linguagem da máquina (o programa executável) através de um processo chamado
compilação. Por exemplo, a Calculadora que todo computador tem, precisa de instruções
que saibam somar, dividir, multiplicar e subtrair dois números. Usando a linguagem
Groovy8
, por exemplo, as instruções seriam:
def somar(a, b) { a + b }
8 http://groovy.codehaus.org/
17
Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar
def dividir(a, b) { a / b }
def multiplicar(a, b) { a * b }
def subtrair(a, b) { a – b }
A instrução abaixo, então, imprimiria na tela o resultado da soma de 6 e 8.
println “O resultado da soma de 6 e 8 é “ + soma(6, 8)
Os programas normalmente não são tão simples quanto este exemplo, então as
linguagens precisam fornecer estruturas de decisão (realizar uma instrução apenas se
um determinado conjunto de condições for satisfeitas) e laços de repetição (executar um
conjunto de comandos um determinado número de vezes ou até que uma condição de
parada seja encontrada). Para facilitar a vida do programador, existem vários softwares
que ajudam a escrever programas. Conhecidas como IDE (do inglês Integrated
Development Environment), esses ambientes de desenvolvimento integrado fornecem
editores de texto inteligentes, que “conhecem” todas as palavras reservadas (o conjunto
de comandos suportados por determinada linguagem) e por isso as exibem numa
coloração diferente e auxiliam em problemas de sintaxe. Permitem também que os
programas sejam compilados e executados na própria ferramenta, simplificam o processo
de depuração (executar o programa passo a passo para tentar descobrir ou solucionar
defeitos), disponibilizam um sistema de ajuda (os manuais ou helps da linguagem
acessíveis imediatamente) e por aí vai.
Os programas não existem por si só. Eles visam atender necessidades diversas do
mundo real, como gerenciar o processo de matrículas de alunos, o empréstimo de livros
na biblioteca, o pagamento de funcionários de uma empresa, o controle de locação de
veículos, o gerenciamento das rotas dos aviões num sistema de tráfego aéreo, os
cálculos e projeções estatísticas baseadas nas informações de censo demográfico.
Normalmente o caminho entre as necessidades e o programa de computador não é tão
imediato, afinal em sistema tão complexos não dá simplesmente para “ouvir o cliente e
sair programando feito doido”. Existe ciência nisso tudo.
A Engenharia de Software (PRESSMAN, 2006) busca tratar de processos,
metodologias, técnicas e ferramentas que abordam todo o ciclo de desenvolvimento
dessas soluções, indo desde as etapas iniciais de Elicitação de Requisitos (a tradução
das necessidades dos clientes em requisitos computacionais funcionais – as funções que
18
Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar
os sistemas devem ter - e não funcionais – performance, usabilidade, escalabilidade),
passando por Análise/Projeto (o desenho da arquitetura da solução),
Implementação/Testes (a codificação na linguagem de programação escolhida e os
respectivos testes), Homologação (a validação formal feita pelo usuário) e Implantação
(a incorporação do sistema nas rotinas operacionais da organização demandante). Depois
que o sistema está no “ar” entra em fase de Manutenção, precisando ser alterado a cada
necessidade de Correção (defeitos), Adaptação (adequação, por exemplo, a alguma
nova legislação) ou Evolução (incorporação de novas funcionalidades).
Pensava que era tudo mais simples? Agora você tem uma breve noção desse fascinante
mundo da programação e da computação. Tem ideia de quanto trabalho e inteligencia
existem nos bastidores dos softwares que usa em seu dia-a-dia, em casa, no trabalho, no
banco, no consultório médico, no aeroporto. A informática está presente – direta ou
indiretamente – em mais coisas da nossa vida do que imaginamos. Se deu conta de
quanto o programador é importante na sua vida e você não sabia?
Agora que você já sabe um pouco sobre Metodologias Ágeis, Aprendizagem e
Programação, finalmente está preparado para conhecer o Coding-Dojo.
4. Coding-Dojo – A Arte de Treinar Programação
O termo talento, numa das definições da Wikipedia9
, é usado para “designar habilidades
inatas das pessoas, ou capacidade natural para realizar determinadas atividades”.
Enfatiza também que “Estudiosos atuais afirmam que mesmo as habilidades
consideradas inatas podem ser desenvolvidas caso haja motivação e com a aplicação de
técnicas apropriadas. Assim, qualquer pessoa está, por exemplo, potencialmente apta a
aprender música, desde que tenha vontade e use as técnicas apropriadas ao estudo de
música”.
Estudos recentes (HUECK, 2010) demonstram que não existem habilidades inatas. Tudo
depende de nós! Chegaram a um número inclusive: 10 mil horas. Essa é a quantidade de
horas que precisa para se tornar um especialista. Acham que Ronaldo “Fenômeno” já
nasceu sabendo futebol? Vejam a infância e adolescência dele: quantas horas acham que
ele passou jogando? Provavelmente, sua mãe deve ter suado para tirá-lo do campinho do
bairro.
9 http://pt.wikipedia.org/wiki/Talento_(aptidão)
19
Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar
E Mozart? Quantas horas acham que passava por dia quando criança em frente a um
piano. Ele não é um prodígio à tôa: eram quase 6 horas por dia. Ele realmente compôs
sinfonias aos 12 anos, mas sua primeira obra-prima, considerada como tal por vários
críticos, foi escrita quanto ele já tinha 21 anos de idade, e mais ou menos 10 mil horas de
prática (HUECK, 2010). Quantas horas por dia, programadores gastam praticando
sua arte, sua função?
Diferentes dos artistas ou desportistas, que potencializam seus talentos através de
exaustivas e repetitivas rotinas de treinamento, os programadores saem da faculdade ou
cursos técnicos direto para e empresa, escrevendo seus programas reais “de caneta”,
direto para a produção. É como se um ator saísse da escola de teatro direto para uma
produção da Broadway em Nova Iorque, ou um aprendiz de judô fosse disputar seu
primeiro torneio em plenas Olimpíadas, ou um músico amador tivesse sua estreia num
show solo em pleno Carneggie Hall. Todos poderiam até ser bem sucedidos, mas
podemos imaginar que estatisticamente isto seria exceção.
Um grupo de programadores franceses, praticantes da eXtreme Programming, em
meados de 2003, constatou que – assim como a maioria dos seus colegas de profissão -
eles não tinham o hábito de treinar programação. Para se tornarem melhores em suas
funções, resolveram então se reunir periodicamente para aprenderem uns com os outros,
trabalhando juntos na resolução de um desafio de programação. A essa técnica, deram o
nome de Coding-Dojo. A inspiração do nome veio das artes marciais, também praticadas
por alguns deles. Dojo (pronuncia-se Dojô) é o nome do espaço onde aprendizes e
mestres se juntam para praticar os movimentos da luta, através de repetições sucessivas.
Eles criaram o site CodingDojo.org10
e em dezembro de 2004 fundaram o grupo Paris
Dojo11
. A idéia logo se difundiu pelo mundo com vários grupos de Dojo formados ao redor
do planeta. Aqui no Brasil não foi diferente: Dojo Bahia, Dojo Floripa, Dojo Recife, Dojo
Rio, e Dojo SP, são alguns dos grupos que surgiram.
4.1. Princípios do Coding-Dojo
Como comentado anteriormente, o Coding-Dojo tem como princípios básicos alguns dos
princípios do XP: programação em pares, desenvolvimento orientado a testes (test-driven
development - TDD), pequenos passos (baby steps) e refatoração.
10 http://codingdojo.org
11 http://codingdojo.org/cgi-bin/wiki.pl?ParisDojo
20
Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar
A principal ideia da programação em par é ensinar sobre código coletivo, colaboração e
disseminação de conhecimento. A programação em par tem como prática duas pessoas
trabalhando no mesmo código, uma como piloto e outra como copiloto. Elas fazem
revezamento de período em período (por exemplo, 30 minutos). Na outra semana, uma
dessas pessoas saem deste módulo e vão para outro trabalhar com outra pessoa,
enquanto a que permaneceu em seu módulo tem um novo colaborador. E continua assim.
Em algum momento, todos terão passado por todos os módulos, criando a cultura de
colaboração, código coletivo (todos mexeram em tudo) e disseminação do conhecimento
(todos sabem de tudo) (TELES, 2004).
O TDD é uma das práticas do XP mais difíceis de implementar numa empresa. Testes,
normalmente é a etapa que logo descartamos quando estamos atrasados (TELES, 2004).
Por isso, exigir que escrevamos os testes antes mesmo de iniciar a implementação é uma
quebra de paradigma forte para o programador. Segundo a Wikipedia12
, a ideia consiste
em escrever um teste pequeno, que garanta que parte do software rode da maneira
esperada. Ou seja, escrevemos um teste que falha para, depois, implementarmos o
código que faça o teste passar. Isso garante que o código já está testado quando
chegarmos a implementação final. Garante também que possamos refatorar todo o
sistema sem nos preocuparmos, pois os testes apontarão os possíveis problemas e
quebras do sistemas.
Já a refatoração do código nos levam às boas práticas. Refatorar sempre é um dos
mantras do XP (TELES, 2004; KNIBERG, 2007). Refatoramos para melhorar o código
para que este responda melhor aos requisitos não-funcionais do sistema. Isto nos leva
obrigatoriamente às melhores práticas de programação e uso de padrões. E tudo isto feito
cada passo de uma vez. Refatoramos sempre e refatoramos pouco, o necessário.
E finalmente, chegamos aos baby steps: tudo é feito com passos pequenos. Não fazemos
testes enormes; fazemos testes pequenos para testar partes pequenas do software. Não
refatoramos o código todo; refatoramos porções pequenas de cada vez, pois caso quebre
a funcionalidade, podemos estudar o que erramos e consertar, ou mesmo voltar ao código
anterior mais facilmente. Com passos pequenos, chegamos a solução final, um passo de
cada vez, mas tudo bem estudado, testado, executado.
12 http://en.wikipedia.org/wiki/Test-driven_development
21
Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar
4.2. Modalidades de Coding-Dojo
Com uso dessas práticas, atualmente, existem duas modalidades de Dojo que os grupos
praticam: o Prepared Kata e o Randori. No primeiro, uma dupla de programadores
estudam uma possível solução para um problema, se preparam anteriormente e, no dia
da apresentação, vão se revezando (como na programação em par) e vão desenrolando a
implementação que praticaram antes. Tudo isso usando TDD, refatoração e baby steps.
No Randori, a solução será feita por todos os presentes. De tempo em tempo (5 a 10
minutos), existe um rodízio de pessoas: o piloto da programação em par, vai para a
plateia, uma pessoa da plateia torna-se copiloto e o copiloto torna-se o novo piloto. Com
isso, todos, em algum momento, tem contato direto com código, tendo livre acesso e
poder sobre este naquele momento. No caso do Randori em específico, algumas regras
se fazem necessárias: todos da plateia podem dar sugestões apenas quando todos os
testes estiverem passando. Enquando os testes não passarem, piloto e copiloto devem
tentar remediar o erro por conta própria (caso o erro seja sintaxe, pode-se ajudar).
O Randori ainda apresenta uma particularidade: a Retrospectiva, uma etapa do XP muito
importante para evolução do processo. Aqui, no Dojo, tem o mesmo intuito: evolução do
processo de aprendizagem. As pessoas registram e comentam sobre o que deu certo no
processo e sobre o que pode melhorar. Com isso, mantemos o que sucesso das práticas
que deram certo e tentamos modificar as práticas do que pode ser melhorado. Ou seja, é
um processo que evolui com o tempo, melhora continuamente.
Sugere-se o uso do Randori com poucas pessoas (entre 15 e 20) e o Kata com um
número maior de pessoas.
4.3. Dojo na Prática, Experiencias no Serpro
Logo na introdução deste trabalho, eu – um dos autores - disse que resolvi sair da inércia
e começar a realizar e praticar sessões de Dojo. Mesmo tendo participado de uma em
novembro de 2009, até então eu só tinha ficado na intenção. Aí tive contato com o
excelente post “Apelo: parem de "ensinar" Comp. I nas faculdades!”13
de Vinícius Teles,
praticamente e disseminador de XP, autor do primeiro livro escrito sobre Extreme
Programming em língua portuguesa. A leitura é altamente recomendada, veja esse
parágrafo:
13 http://blog.improveit.com.br/articles/2010/05/28/apelo-parem-de-ensinar-comp-i-nas-faculdades
22
Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar
“Em muitos cursos de computação os calouros têm alguma matéria do tipo 'Comp.
I' com duas aulas por semana, cada uma com duas horas de duração. Imagine se
não houvesse aula, mas apenas Dojo. Então, teríamos duas sessões de Dojo por
semana, durante um semestre inteiro. Se isso fosse adotado, tenho absoluta
certeza de que os calouros chegariam no final do semestre sabendo programar
mais e melhor que 90% daqueles que se formam em computação. E não só isso,
eles saberiam programar mais e melhor que a maioria dos professores
universitários que "ensinam" programação!”
Era a motivação que faltava. Em junho deste ano coloquei no meu twitter que ao voltar de
férias (precisava recarregar as energias) organizaria um primeiro Dojo. Alguns colegas
seguidores que trabalham direta e indiretamente comigo foram bem receptivos à ideia.
Assim que retornei, colocamos em prática. Pesquisei um pouco mais sobre o assunto,
busquei dicas com uma pessoa experiente, defini o desafio e “partimos para o ataque”. O
resultado foi excelente. Tiramos fotos, registramos a retrospectiva e disponibilizamos tudo
livremente na internet, no grupo de usuários Dojo14
de participação aberta (48 membros
até a escrita deste trabalho) que havíamos acabados de fundar.
Ao todo, o grupo já realizou 6 sessões “oficiais”, a cada 15 dias, com público médio de 13
pessoas (mínimo de 9, máximo 15, tendo sempre a participação de “novatos”), usando
linguagens (até agora Java, PHP, JavaScript, Groovy e Python) e ambientes (Eclipse,
NetBeans, editor de texto simples) diferentes. Ao todo, 41 pessoas participaram, sendo 8
convidados de fora do Serpro (quatro, vindo de duas faculdades, mais quatro, de uma
empresa particular). Tivemos até coding-dojos específicos, direcionados para líderes de
equipe (afinal eles são formadores de opinião e servem de modelo para seus liderados) e
equipes de Testes de software. O “fenômeno” está se espalhando, tem Dojos sendo
realizados em faculdades e outras empresas, exatamente como imaginávamos. Existem
grupos de usúarios praticantes de Dojo por todo o Brasil e em vários outros países. Tem
inclusive empresas realizando recrutamento e seleção utilizando a técnica (imaginou
selecionar estagiários sem fazer uma prova, apenas observando seu comportamento,
habilidades e atitudes durante uma sessão de Dojo?)
Nas retrospectivas, mais de 140 registros (81 pontos positivos, 65 pontos de melhoria)
foram efetuados. A título de amostragem, destacamos alguns dos mais interessantes sem
importar a ordem de aparição:
14 http://groups.google.com.br/group/dojo-bahia
23
Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar
:-)
• Participação de todos na solução, buscando
nivelar conhecimento
• TDD antevê problemas que não
enxergamos. Foi bom para aprendermos a
metodologia.
• Interação entre piloto e copiloto foi legal
• Improviso!
• Ajuda no aprendizado de programadores
menos experientes
• Ajudou a iniciar o aprendizado de uma
linguagem nova.
• Cooperação entre desenvolvedores
• Aprende-se com os acertos e erros dos que
programam antes.
• Aprendizado;
• Trabalho em equipe;
• Motivação para solucionar o problema;
• Aprendizagem rápida, divertida e dinâmica
:-(
• Não avançamos muito porque fizemos muita
refatoração
• Chegar no horário. Disciplina
• Evitar desvios de foco,conversas paralelas
• Inibição inicial (mas depois houve
descontração da turma)
• Pouca familiaridade com classes de teste
(TDD)
• Confusão entre classes de código
(resolução do problema) e classes de teste.
• Problema poderia ser simplificado;
• A plateia estava muito ansiosa, por isso
houve muitos palpites fora de hora
• Colaboração entre desenvolvedores apenas
após o teste passar. Muitos davam palpites
com o teste falhando.
• Pouco tempo para o problema ser resolvido
• Piloto e copiloto devem comunicar mais o
que estão fazendo
Quadro 1. Consolidado da Retrospectiva das Sessões de Coding-Dojo Serpro
O mais interessante deste processo inteiro é notar no dia-a-dia a mudança de atitude dos
praticantes do Dojo. Naturalmente tornam-se mais proativos, buscam trabalhar mais em
pares, se relacionam melhor em equipe, diminuem o sentimento de posse sobre o “seu”
trabalho, ficam mais abertos a emitir e ouvir opiniões, tornam-se mais colaborativos.
Sentem “sede” de ampliar seus conhecimentos, buscam estudar mais sobre as técnicas
que rapidamente experimentaram nos Dojos, tentam se tornar pessoas e profissionais
melhores. Aumentam o foco no produto, no cliente. Começam a questionar seus líderes e
colegas sobre porque não tem investido em fortalecer as práticas de testes, e também
porque não usam mais a técnica de Dojo em situações cotidianas. Tendem a eliminar
desperdícios. Ficam mais empolgados em utilizar verdadeiramente as Metodologias
Ágeis. Nos corredores, comentam sobre como foi o Dojo anterior, querem saber quando e
como será o próximo, pensam em novos desafios e situações a experimentar.
Observe o quanto um investimento de 4 horas por mês pode fazer tanta diferença. Como
24
Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar
já dissemos antes, é o almejado processo de aprendizagem organizacional: “o modo
como os seres adquirem novos conhecimentos, desenvolvem competências e
mudam o comportamento”
CONCLUSÃO
Este trabalho buscou conceituar e demonstrar, através do compartilhamento de
experiencias reais, o quanto formas diferentes de aprendizado podem ser aplicadas com
alto grau de sucesso nas organizações. O Coding-Dojo é apenas um exemplo disso. Seu
fundamento e suas técnicas podem ser adaptados para os mais diferentes tipos de
situação, como na construção conjunta de Cronogramas, Requisitos e Modelos de Análise
e Projeto.
Já temos pessoas mudando sua visão do que deveria ser o aprendizado de novas
técnicas e tecnologias. Já estão questionando mais, se tornando mais pro-ativas, “saindo
da caixa”. Achamos que encontramos uma maneira muito interessante de ser
internalizada na empresa. Uma forma lúdica de aprender, ensinar e se relacionar com os
colegas.
Podemos parecer pretensiosos (notou o uso do plural? Agora já estamos incluindo
VOCÊ), mas estamos plenamente convencidos que é possível “pensar e agir diferente”.
Estimular a criatividade, o trabalho colaborativo, a comunicação, o feedback. Tornar
nosso ambiente de trabalho mais humano, divertido, prazeroso. Fortalecer as relações
interpessoais. Melhorar a qualidade dos nossos trabalhos, a nossa satisfação com os
resultados, os serviços prestados pelo cliente. Favorecer a cultura da inovação, sair da
“mesmisse”, se reinventar.
25
Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar
BIBLIOGRAFIA
AKITA, Fábio. O que é Gestão 2.0. Abril Info ON-LINE, 2009. Disponível em:
<http://info.abril.com.br/noticias/rede/gestao20/gestao/o-que-e-gestao-2-0/>. Acesso em:
27 ago. 2010.
ANDRES, Cynthia; BECK, Kent. Extreme Programming Explained: Embrace Change.
Addison-Wesley, 2a edição. 2004
BADURDEEN, Aza. Lean Manufacting Basics, 2007. Disponivel em:
<http://www.leanmanufacturingconcepts.com/LeanManufacturingBook.htm>. Acesso em:
21 ago. 2010.
HUECK, Karin. O Segredo do Sucesso, 2010. Em Superinteressante, edição 280,
julho/2010.
JONES, Daniel T; WOMACK, James P. Lean Thinking: Banish Waste and Create Wealth
in Your Corporation. Free Press, 2003.
KNIBERG, Henrik. Scrum e XP direto das trincheiras. C4Media, 2007.
LIKER, Jeffrey. The Toyota Way - 14 Management Principles: From The World's Greatest
Manufacturer. McGraw-Hill, 2004.
NONAKA, Ikujiro; TAKEUCHI, Hirotaka. The New New Product Game. Harvard Business
Review. 1986.
NONAKA, Ikujiro; TAKEUCHI, Hirotaka. Criação de Conhecimento na Empresa: Como as
Empesas Japonesas Geram a Dinâmica da Inovação. Campus, 2008.
PRESSMAN, Roger S. Engenharia de Software. McGraw-Hill, 2006.
REIS, Daniel F. Conceitos básicos sobre Metodologias Ágeis para Desenvolvimento de
Software (Metodologias Clássicas x Extreme Programming), 2008. Disponível em:
<http://www.devmedia.com.br/articles/viewcomp.asp?comp=10596>. Acesso em: 25 ago.
2010.
SENGE, P. A Quinta disciplina: arte e prática da organização de aprendizagem. 7a ed.
São Paulo: Best Seller, 2000.
SCHWABER, Ken; SUTHERLAND, Jeff. O Guia do Scrum, 2009. Disponivel em:
26
Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar
<http://www.scrum.org/scrumguides/>. Acesso em: 23 ago. 2010.
SOUZA, Alcyr M. et. al. Gestão do Conhecimento: Uma experiência para o sucesso
empresarial . Paraná: Ed. Universitária Champagnat , 2001. Disponível em:
<http://www1.serpro.gov.br/publicacoes/gco_site/>. Acesso em: 27 ago. 2010.
TELES, Vinicius. Extreme Programming – Aprenda como Encantar seus Usuários
Desenvolvendo Software com Agilidade e Alta Qualidade. Novatec Editora, 2004.
27

Contenu connexe

Tendances (8)

Relatór reflexcrític.sandramarques
Relatór reflexcrític.sandramarquesRelatór reflexcrític.sandramarques
Relatór reflexcrític.sandramarques
 
Atividades I E D Livro
Atividades I E D LivroAtividades I E D Livro
Atividades I E D Livro
 
Ap
ApAp
Ap
 
Apresentacao de Area de Projecto
Apresentacao de Area de ProjectoApresentacao de Area de Projecto
Apresentacao de Area de Projecto
 
Analise de aplicativos e jogos Lingualeo, Duolingo e Allods online
Analise de aplicativos e jogos Lingualeo, Duolingo e Allods onlineAnalise de aplicativos e jogos Lingualeo, Duolingo e Allods online
Analise de aplicativos e jogos Lingualeo, Duolingo e Allods online
 
Caderno atividades módulo Elaboração de Projetos
Caderno atividades módulo Elaboração de ProjetosCaderno atividades módulo Elaboração de Projetos
Caderno atividades módulo Elaboração de Projetos
 
ApresentaçãO Da FormaçãO
ApresentaçãO Da FormaçãOApresentaçãO Da FormaçãO
ApresentaçãO Da FormaçãO
 
Podcasting, Video and Screencasting, and Live Streaming (Chapte 8) texto do a...
Podcasting, Video and Screencasting, and Live Streaming (Chapte 8) texto do a...Podcasting, Video and Screencasting, and Live Streaming (Chapte 8) texto do a...
Podcasting, Video and Screencasting, and Live Streaming (Chapte 8) texto do a...
 

Similaire à Coding-Dojo: Uma forma rápida, eficiente e divertida de ensinar e aprender

Apresentação ied 2014
Apresentação ied 2014Apresentação ied 2014
Apresentação ied 2014
Elainemat
 
Apresentação ied 2014
Apresentação ied 2014Apresentação ied 2014
Apresentação ied 2014
mardasrour
 
Apresentação ied 2014
Apresentação ied 2014Apresentação ied 2014
Apresentação ied 2014
julivibruno
 
Apresentação unidade 4
Apresentação unidade 4Apresentação unidade 4
Apresentação unidade 4
loyolasofhia
 
MANUAL_DO_MS_PROJECT_2013_E_MELHORES_PRA.pdf
MANUAL_DO_MS_PROJECT_2013_E_MELHORES_PRA.pdfMANUAL_DO_MS_PROJECT_2013_E_MELHORES_PRA.pdf
MANUAL_DO_MS_PROJECT_2013_E_MELHORES_PRA.pdf
JenilsonPires1
 

Similaire à Coding-Dojo: Uma forma rápida, eficiente e divertida de ensinar e aprender (20)

Coding Dojo Aplicado ao Ambiente Organizacional
Coding Dojo Aplicado ao Ambiente OrganizacionalCoding Dojo Aplicado ao Ambiente Organizacional
Coding Dojo Aplicado ao Ambiente Organizacional
 
Coding Dojo - Unreal Engine
Coding Dojo - Unreal EngineCoding Dojo - Unreal Engine
Coding Dojo - Unreal Engine
 
Apresentação ied 2014
Apresentação ied 2014Apresentação ied 2014
Apresentação ied 2014
 
Apresentação ied 2014
Apresentação ied 2014Apresentação ied 2014
Apresentação ied 2014
 
Apresentação ied 2014
Apresentação ied 2014Apresentação ied 2014
Apresentação ied 2014
 
Portifólio grupo 1º SEM. 2016 (Atividade Proposta)
Portifólio grupo 1º SEM. 2016 (Atividade Proposta)Portifólio grupo 1º SEM. 2016 (Atividade Proposta)
Portifólio grupo 1º SEM. 2016 (Atividade Proposta)
 
Apresentação unidade 4
Apresentação unidade 4Apresentação unidade 4
Apresentação unidade 4
 
Pesquisa em Métodos Ágeis para o Desenvolvimento de Software
Pesquisa em Métodos Ágeis para o Desenvolvimento de SoftwarePesquisa em Métodos Ágeis para o Desenvolvimento de Software
Pesquisa em Métodos Ágeis para o Desenvolvimento de Software
 
Metodos ageis
Metodos ageisMetodos ageis
Metodos ageis
 
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
 
Porque escolhemos Laravel: um ponto de vista além do técnico
Porque escolhemos Laravel: um ponto de vista além do técnicoPorque escolhemos Laravel: um ponto de vista além do técnico
Porque escolhemos Laravel: um ponto de vista além do técnico
 
Coding Dojo - Aplicando Princípios Ágeis
Coding Dojo - Aplicando Princípios ÁgeisCoding Dojo - Aplicando Princípios Ágeis
Coding Dojo - Aplicando Princípios Ágeis
 
SBESEdu2019_Fabio-BDD.pdf
SBESEdu2019_Fabio-BDD.pdfSBESEdu2019_Fabio-BDD.pdf
SBESEdu2019_Fabio-BDD.pdf
 
ideias de programação
ideias de programaçãoideias de programação
ideias de programação
 
Oficina Pólo Prática
Oficina Pólo PráticaOficina Pólo Prática
Oficina Pólo Prática
 
O que é ser um bom programador?
O que é ser um bom programador?O que é ser um bom programador?
O que é ser um bom programador?
 
RELATÓRIO DO PROJETO INTEGRADO DE APRENDIZAGEM
RELATÓRIO DO PROJETO INTEGRADO DE APRENDIZAGEMRELATÓRIO DO PROJETO INTEGRADO DE APRENDIZAGEM
RELATÓRIO DO PROJETO INTEGRADO DE APRENDIZAGEM
 
Tecnologias no cotidiano
Tecnologias no cotidianoTecnologias no cotidiano
Tecnologias no cotidiano
 
Tecnologias no cotidiano
Tecnologias no cotidianoTecnologias no cotidiano
Tecnologias no cotidiano
 
MANUAL_DO_MS_PROJECT_2013_E_MELHORES_PRA.pdf
MANUAL_DO_MS_PROJECT_2013_E_MELHORES_PRA.pdfMANUAL_DO_MS_PROJECT_2013_E_MELHORES_PRA.pdf
MANUAL_DO_MS_PROJECT_2013_E_MELHORES_PRA.pdf
 

Plus de Serge Rehem

Como Fazer Seu Lançamento Digital em 30 Dias Sem Criar um Produto Primeiro
Como Fazer Seu Lançamento Digital em 30 Dias Sem Criar um Produto PrimeiroComo Fazer Seu Lançamento Digital em 30 Dias Sem Criar um Produto Primeiro
Como Fazer Seu Lançamento Digital em 30 Dias Sem Criar um Produto Primeiro
Serge Rehem
 

Plus de Serge Rehem (20)

Envie Certificados em PDF com Certiflink
Envie Certificados em PDF com CertiflinkEnvie Certificados em PDF com Certiflink
Envie Certificados em PDF com Certiflink
 
Product-led Growth - Produtos que se vendem sozinho (será?)
Product-led Growth - Produtos que se vendem sozinho (será?)Product-led Growth - Produtos que se vendem sozinho (será?)
Product-led Growth - Produtos que se vendem sozinho (será?)
 
Product-led Growth: Produtos que se vendem sozinhos
Product-led Growth: Produtos que se vendem sozinhosProduct-led Growth: Produtos que se vendem sozinhos
Product-led Growth: Produtos que se vendem sozinhos
 
Palestra Storytelling: Como contar boas histórias que prendem atenção, emocio...
Palestra Storytelling: Como contar boas histórias que prendem atenção, emocio...Palestra Storytelling: Como contar boas histórias que prendem atenção, emocio...
Palestra Storytelling: Como contar boas histórias que prendem atenção, emocio...
 
Palestra: Lançamento Semente - Como ser pago para vender pela primeira vez na...
Palestra: Lançamento Semente - Como ser pago para vender pela primeira vez na...Palestra: Lançamento Semente - Como ser pago para vender pela primeira vez na...
Palestra: Lançamento Semente - Como ser pago para vender pela primeira vez na...
 
Vamos falar sobre feedback?
Vamos falar sobre feedback?Vamos falar sobre feedback?
Vamos falar sobre feedback?
 
Bitcoin Direto ao Ponto, Na Prática e Sem Complicações Técnicas
Bitcoin Direto ao Ponto, Na Prática e Sem Complicações TécnicasBitcoin Direto ao Ponto, Na Prática e Sem Complicações Técnicas
Bitcoin Direto ao Ponto, Na Prática e Sem Complicações Técnicas
 
Empreendedorismo, Startups e Lançamentos Digitais
Empreendedorismo, Startups e Lançamentos DigitaisEmpreendedorismo, Startups e Lançamentos Digitais
Empreendedorismo, Startups e Lançamentos Digitais
 
MVP Canvas: Protótipos Organizados, Negócios Acelerados
MVP Canvas: Protótipos Organizados, Negócios AceleradosMVP Canvas: Protótipos Organizados, Negócios Acelerados
MVP Canvas: Protótipos Organizados, Negócios Acelerados
 
Micro-Lançamentos em 7 Passos
Micro-Lançamentos em 7 PassosMicro-Lançamentos em 7 Passos
Micro-Lançamentos em 7 Passos
 
Empreendedorismo, Startups e Lançamentos Digitais
Empreendedorismo, Startups e Lançamentos DigitaisEmpreendedorismo, Startups e Lançamentos Digitais
Empreendedorismo, Startups e Lançamentos Digitais
 
Vendas SPIN: Perguntas que vendem CARO!
Vendas SPIN: Perguntas que vendem CARO!Vendas SPIN: Perguntas que vendem CARO!
Vendas SPIN: Perguntas que vendem CARO!
 
O que uma Matryoshka me ensinou sobre Marketing Digital
O que uma Matryoshka me ensinou sobre Marketing Digital O que uma Matryoshka me ensinou sobre Marketing Digital
O que uma Matryoshka me ensinou sobre Marketing Digital
 
Ganhar ou Perder Tempo: Descubra Como Usar as Tecnologias a Seu Favor
Ganhar ou Perder Tempo: Descubra Como Usar as Tecnologias a Seu FavorGanhar ou Perder Tempo: Descubra Como Usar as Tecnologias a Seu Favor
Ganhar ou Perder Tempo: Descubra Como Usar as Tecnologias a Seu Favor
 
O Que Uma Matryoshka Me Ensinou Sobre Agilidade e Marketing Digital
O Que Uma Matryoshka Me Ensinou Sobre Agilidade e Marketing DigitalO Que Uma Matryoshka Me Ensinou Sobre Agilidade e Marketing Digital
O Que Uma Matryoshka Me Ensinou Sobre Agilidade e Marketing Digital
 
Como o Marketing Digital Pode Turbinar Sua Carreira em TI
Como o Marketing Digital Pode Turbinar Sua Carreira em TIComo o Marketing Digital Pode Turbinar Sua Carreira em TI
Como o Marketing Digital Pode Turbinar Sua Carreira em TI
 
Saia da Inércia!
Saia da Inércia!Saia da Inércia!
Saia da Inércia!
 
O Empreendedor Corporativo: Como Não Atrofiar Seu Cérebro Após 18 Anos de Emp...
O Empreendedor Corporativo: Como Não Atrofiar Seu Cérebro Após 18 Anos de Emp...O Empreendedor Corporativo: Como Não Atrofiar Seu Cérebro Após 18 Anos de Emp...
O Empreendedor Corporativo: Como Não Atrofiar Seu Cérebro Após 18 Anos de Emp...
 
Como Fazer Seu Lançamento Digital em 30 Dias Sem Criar um Produto Primeiro
Como Fazer Seu Lançamento Digital em 30 Dias Sem Criar um Produto PrimeiroComo Fazer Seu Lançamento Digital em 30 Dias Sem Criar um Produto Primeiro
Como Fazer Seu Lançamento Digital em 30 Dias Sem Criar um Produto Primeiro
 
Manifesto Ágil
Manifesto ÁgilManifesto Ágil
Manifesto Ágil
 

Dernier

Dernier (9)

ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 

Coding-Dojo: Uma forma rápida, eficiente e divertida de ensinar e aprender

  • 1. Título do Trabalho: Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar Autor 1: SERGE NORMANDO REHEM Autor 2: MÁRCIO LIMA ALBUQUERQUE Tema: Gestão Pública e Responsabilidade Social e Ambiental Total de páginas: 22
  • 2. Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar ConSerpro 2010 Congresso Serpro de Tecnologia e Gestão Aplicadas a Serviços Públicos Título do Trabalho: Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar Tema: Gestão Pública e Responsabilidade Social e Ambiental 2010 2
  • 3. Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar RESUMO DO TRABALHO Título do Trabalho: Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar Tema: Gestão Pública e Responsabilidade Social e Ambiental 1. Nome dos autores Autor 1: Serge Normando Rehem Autor 2: Márcio Lima Albuquerque 2. Lista de palavras chaves para classificação bibliográfica aprendizado. ensino. treinamento. coding-dojo. dojo. xp. extreme programming. manifesto ágil. agile. tdd. retrospectiva. 3. Resumo Programadores não treinam. Ao adentrarem formalmente no mercado de trabalho parece que perdem aquela prática adquirida em tempos de faculdade ou curso técnico, quando passavam horas juntos com outros colegas, resolvendo listas de exercício ou trabalhos finais das disciplinas relacionadas à programação. A pressão por prazos e resultados os faz "praticar" direto em código de produção, na base da tentativa e erro. Daí a quantidade absurda de "código esquisito" que vai encontrando (e produzindo!) no decorrer da vida profissional. Se além de talento, claro, artistas e esportistas praticam diariamente para alcançar níveis de excelência, por que os profissionais de informática não o fazem? Foi com base nessa indagação que um grupo de programadores franceses resolveu criar uma oportunidade para que eles pudessem se reunir e aprender. As sessões foram batizadas de Coding-Dojo, inspirados no local (pronuncia-se Dojô) utilizado pelos praticantes de artes marciais - desde os iniciantes até os mestres - para a repetição sucessiva de movimentos. Um espaço convidativo, não hostil, destinado à troca de experiencias, tendo como base um desafio de programação. Reuniões curtas (2 horas, no máximo), utilizando práticas da Extreme Programming (XP) como Desenvolvimento 3
  • 4. Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar Orientado a Testes (TDD - Test Driven Development), Refatoração, Programação em Pares, Baby Steps, Código Coletivo e Design Incremental. Os participantes exercitam suas habilidades de trabalho em equipes, comportamento em público, programação, uso de processos ágeis, ferramentas e técnicas de desenvolvimento. Ao final, uma retrospectiva envolvendo todos, destacando o que favoreceu e o que dificultou o aprendizado. E a constatação de consequências inevitáveis: códigos mais bem escritos, testados, documentados e preparados para evoluir. Software de qualidade, cliente satisfeito. Os Dojos estão rapidamente se espalhando pelo mundo, em empresas, faculdades e comunidades virtuais, sendo até mesmo utilizados em processos de recrutamento e seleção. Também podem ser facilmente aplicados a contextos diferentes da programação. Em complemento aos treinamentos tradicionais (onde, muitas vezes, um fala, os outros escutam, repetem exercícios "copiando e colando", dias depois se esquecem), uma das regionais do Serpro vem frequentemente realizando Coding-Dojos, transformando as oportunidades de aprendizado em ocasiões práticas, eficientes, empolgantes e divertidas. Este trabalho visa apresentar as técnicas e compartilhar as experiencias vivenciadas, que a cada sessão provocam a vontade de envolver mais pessoas, disseminar a ideia e partir para novos desafios. Pensar e agir diferente, ampliar horizontes, aprender, ensinar e trabalhar com alegria. 4
  • 5. Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar CURRÍCULOS DOS AUTORES Autor 1: Serge Normando Rehem SERGE NORMANDO REHEM é PMP, especialista em Sistemas Distribuídos pela UFBA e possui MBA em Administração pela Unifacs. Analista do Serpro há 12 anos, atualmente lidera a equipe técnica do Framework Demoiselle, na projeção da Coordenação Estratégica de Tecnologia (Cetec) na regional Salvador. É líder do grupo de usuários JavaBahia, colunista da revista Java Magazine e autor do blog bazedral.blogspot.com, sobre trabalho colaborativo. Autor 2: Márcio Lima Albuquerque MÁRCIO LIMA ALBUQUERQUE é mestrando em Sistemas e Computação pela Unifacs e professor de Processos Ágeis na Pós-graduação da Ruy Barbosa. Está no SERPRO há 5 anos e atualmente lidera o setor de Pool de Pessoas da DESDR. É um dos líderes do PHPBA, disseminador de desenvolvimento PHP com técnicas ágeis e líder técnico do projeto RekZit, ferramenta livre para gestão de requisitos. 5
  • 6. Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar SUMÁRIO INTRODUÇÃO..................................................................................7 1. A Pedra Fundamental .................................................................7 1.1. De Onde Veio a Motivação......................................................9 1.2. Os Valores do Manifesto Ágil................................................10 2. Aprendendo a Aprender...........................................................11 2.1. A Espiral do Conhecimento.................................................................12 2.1.2. Um Exemplo Bem Que Ajudaria.......................................................14 2.2. A Organização que Aprende...............................................................15 3. O Fantástico Mundo da Programação de Computador.........17 4. Coding-Dojo – A Arte de Treinar Programação.....................19 4.1. Princípios do Coding-Dojo...................................................................20 4.2 Modalidades de Coding-Dojo................................................................22 4.3. Dojo na Prática, Experiencias no Serpro............................................22 CONCLUSÃO..................................................................................25 BIBLIOGRAFIA...............................................................................26 6
  • 7. Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar INTRODUÇÃO Começo este trabalho pedindo licença para usar a primeira pessoa do singular1 , propositalmente contrariando as regras acadêmicas. Buscarei citar as referencias, mas me darei ao direito de falar diretamente para o leitor, compartilhando minhas ideias e percepções sem muita formalidade nem rigor estético. Usarei negrito para enfatizar conceitos e ideias. Esta abordagem tem o objetivo de facilitar tanto a minha escrita quanto sua compreensão. É um trabalho sobre aprender e ensinar, por isso procuro usar linguagem e forma que favoreçam a assimilação do conteúdo tratado. A vontade de escrever esse trabalho surgiu da prática. Embora eu já tivesse lido sobre Coding-Dojo, sair da inércia e começar a promover e a participar de sessões provocou em mim - e em vários outros participantes - uma mudança ainda meio que inexplicável de comportamentos e atitudes. Senti vontade compartilhar esse sentimento, mas ainda não sabia bem como. Comecei pelo óbvio, disponibilizando os registros de cada reunião em um site na internet, mais especificamente um grupo de usuários de participação aberta, que vem agregando novos membros a cada dia. Se você leu o resumo, pode estar pensando: "mas por que um trabalho sobre técnicas de aprendizado em programação está num tema relacionado à Gestão Pública e não em outro mais técnico”? A razão é que não queremos focar nas questões de engenharia de software, mas sim nas consequências positivas da aplicação de técnicas diferentes de aprendizado, favorecendo um ambiente de criatividade e inovação. Isso não é o desejo de todo o bom gestor? A partir de agora pretendo leva-lo junto comigo nessa história. Topa? Então vamos nessa. 1. A Pedra Fundamental Desde que tive a ideia de escrever este trabalho, eu queria evitar ao máximo começar direto falando do Coding-Dojo. Precisaria ir “mais acima”, buscar as “causas raízes”, as motivações principais que desencadearam esse movimento. Percorri o caminho inverso. Primeiro observei que na essência do Dojo, como veremos mais adiante, estão várias práticas da eXtreme Programming (BECK & ANDRES, 2004), que queriam ser 1 É um trabalho de 2 autores, então quando disser EU, entenda que falo em nome de ambos. Quando disser NÓS, também inclui VOCÊ, leitor. 7
  • 8. Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar fortalecidas pelos criadores originais do Coding-Dojo. O XP é uma das chamadas Metodologias Ágeis (REIS, 2008), derivada do Manifesto Ágil2 , cujos detalhes veremos logo adiante. Descobri, então, que o signatários originais do Manifesto, 17 nomes proeminentes da Engenharia de Software, se encontraram em 2001 para compartilhar seus conhecimentos e experiencias sobre essas metodologias ágeis, todas com alguma inspiração no artigo The New New Product Game (NONAKA & TAKEUCHI, 1986). Seus autores, professores universitários japoneses, descrevem um estilo de trabalho para desenvolvimento de novos produtos que se parece com um jogo de Rugby, mais especificamente numa formação ordenada conhecida como Scrum. Foi daí que Jeff Sutherland e Ken Schwaber definiram o framework Scrum (SCHWABER & SUTHERLAND, 2009) e começaram a evangelizá-lo para o desenvolvimento de software. Na definição da Wikipedia3 , “o Scrum é uma metodologia de desenvolvimento iterativo e incremental para gerenciamento de projetos e desenvolvimento ágil ... pode ser utilizado ... como uma abordagem geral de gerenciamento de projetos/programas”. Em paralelo, Kent Beck deu início à outra vertente que ficou conhecida como “Extreme Programming (ANDRES & BECK, 2004)”, é uma metodologia ágil para equipes pequenas e médias que desenvolvem software baseado em requisitos vagos e que se modificam rapidamente, enfatizando a importância do feedback constante, a abordagem incremental e o encorajamento da comunicação entre as pessoas. Presente em todos esses trabalhos derivados, a filosofia de Respeito pelas Pessoas e Melhoria Contínua, pilares da Toyota Way (LIKER, 2004) e, portanto, do sistema de produção da Toyota. A base desse sistema é o Lean Manufacturing (BADURDEEN, 2007), um conjunto de conceitos e procedimentos que visam simplificar o modo como uma organização produz valor para seus clientes enquanto todos os desperdícios são eliminados. O Pensamento Lean (JONES & WOMACK, 2003) extrapolou a manufatura e é também uma forte fonte de inspiração para todo esse movimento. O artigo on-line de AKITA (2010) sobre Gestão 2.0 me ajudou a montar esta rápida "retrospectiva reversa", então fica a indicação. Encontrada essa vertente Agile, eu precisava agora buscar conceitos relacionados a 2 http://pt.wikipedia.org/wiki/Manifesto_Ágil 3 http://pt.wikipedia.org/wiki/Scrum 8
  • 9. Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar aprendizagem e conhecimento. Seguindo dica de um colega, simpatizante e estudioso do tema, uma grata surpresa: A obra Criação de Conhecimento na Empresa: Como as Empesas Japonesas Geram a Dinâmica da Inovação, dos mesmos NONAKA e TAKEUCHI (2008), é referencia obrigatória. Nela, os autores associam o desempenho das empresas de seu país à capacidade de gerar novos conhecimentos e usá-los no desenvolvimento de produtos e tecnologias de grande êxito e alto grau de inovação. Aí as coisas começaram a fazer ainda mais sentido, não foi uma mera coincidência. Está tudo realmente interligado. No restante desta seção vamos explorar um pouco esses fundamentos relacionados a metodologias ágeis e processos de aprendizagem. 1.1. De Onde Veio a Motivação Final de 2008, início de 2009, eu já vinha lendo aqui e ali sobre “a tal” das metodologias ágeis de desenvolvimento de software. Percebia que era um movimento crescente, cada vez mais gente falando e usando, mas não compreendia bem do que se tratava. Os “agilistas” pareciam para mim um bando de preguiçosos que não queriam seguir processos nem fazer documentação. Acham que podem ouvir o cliente e partir direto para a programação da solução. Pura desinformação e preconceito. Resolvi que precisava aprender sobre o assunto, até para poder criticar, mas com embasamento. Eu não queria ficar procurando informações aleatoriamente, ia perder muito tempo. Seria bom ter contato direto com quem já conhece e pratica. “Preciso participar de um evento que fale disso ai”. Como “Maomé não vai à montanha”, ignorei o fato que na minha cidade não tinha nada abordando o tema, conversei com alguns amigos experientes (eu vinha acompanhando seus blogs e os “vendo” palestrar por aí), de outros estados, e resolvemos realizar um evento4 com cursos e palestras sobre Agile. Eu ajudei a organizar, aumentei meu networking, aprendi e favoreci o aprendizado de bastante gente (foram cerca de 180 participantes), movimentei o mercado (profissionais e a academia) e me diverti. E comecei a praticar imediatamente, aproveitando que estava mudando de função no Serpro, com uma equipe nova, num desafio que me permitia experimentar novidades. Isso já tem mais de um ano e meio. 4 O Maré de Agilidade virou um maior sucesso e já percorreu 6 estados. Realizado pela e para a comunidade, vem disseminando valores, princípios e práticas ágeis pelo Brasil. www.maredeagilidade.com.br. 9
  • 10. Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar 1.2. Os Valores do Manifesto Ágil Em 2001 um grupo renomado de consultores, analistas e programadores resolveu se reunir em Utah, EUA, para pensar novas formas de desenvolver software, meio que insatisfeitos com panorama predominante na ocasião: uma ênfase muito grande em processos, documentação excessiva, contratos, burocracia. O código estava perdendo importância, ficando em segundo plano, como se fosse uma mera atividade de traduzir diagramas em uma linguagem de programação. Justamente aquilo que efetivamente faz uma aplicação funcionar, o único artefato que realmente pode vir a atender a necessidade de cliente, através de um produto de software funcionando. Era preciso resgatar alguns valores, princípios e práticas essenciais. O resultado do encontro é o conhecido Manifesto Ágil publicado em http://agilemanifesto.org. A Figura 1 tem os Valores5 exibidos na página inicial. Figura 1. O Manifesto Ágil. 5 Coloquei a inicial em maiúsculo para enfatizar sua importância no contexto deste trabalho. A palavra tem muitos significados, utilizar aqui uma das definições da Wikipedia: “Os valores humanos são os fundamentos éticos e espirituais que constituem a consciência humana. São os valores que tornam a vida algo digno de ser vivido, definem princípios e propósitos valiosos e objetiva fins grandiosos.”. Fonte: http://pt.wikipedia.org/wiki/Valor_(filosofia) 10
  • 11. Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar Peço que leia atentamente o que está sendo dito. Agora respire fundo, pare um pouco e reflita sobre a profundidade do que está escrito. Agora releia trocando a palavra “software” por “produto”, de qualquer natureza. Consegue perceber a universalidade do manifesto? No site há também um link para 12 princípios, muitos deles com foco direto em software. Destaco 3 (os grifos são meus): • Construir projetos ao redor de indivíduos motivados. Dando a eles o ambiente e suporte necessário, e confiar que farão seu trabalho. • O Método mais eficiente e eficaz de transmitir informações para, e por dentro de um time de desenvolvimento, é através de uma conversa cara a cara. • Em intervalos regulares, o time reflete em como ficar mais efetivo, então, se ajustam e otimizam seu comportamento de acordo. Olhando valores e princípios podemos observar o quanto eles estão buscando dar a devida importância às pessoas, a comunicação direta, o feedback, a colaboração a confiança, a melhoria contínua. Questões que deveriam estar presentes na essência de qualquer equipe excelente. 2. Aprendendo a Aprender Treinamento. Essa é “top of mind”. Quando falamos de aprendizado, normalmente a imagem que nos vem à cabeça é a de um professor de pé, com um giz branco na mão escrevendo num quadro negro (não sei porque esse nome, pois comumente são verdes), “transferindo” o conhecimento para seus aprendizes. Tem sido assim desde as nossas mais tenras lembranças da escola. “Ah, mas agora não é mais desse jeito, o mundo mudou”, você pode estar pensando. Será? Quadro negro e giz foram trocados por pincéis atômicos, flip-charts e quadros brancos, surgiram as transparências (aquelas mesmo, impressas num papel transparente e projetadas na parede por aquele aparelho que acendia uma luz.... como era o nome mesmo?) e agora os slides (já reparou que ainda continuamos o vício de chama-los de transparências?) das apresentações PowerPoint (prefiro o BrOffice, é gratuito e o código- fonte está disponível sob licença livre) e data shows, tudo computadorizado. Mas ainda é o velho e bom mestre, repassando toda a sua sabedoria para os ansiosos aprendizes. 11
  • 12. Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar Somos muitos condicionados a copiar, a repetir, a decorar, mas efetivamente será que aprendemos a raciocinar? Como tudo na vida, este modelo tem vantagens e desvantagens. Na escola, cumpre seu papel, até porque – na sua maioria - os exames de ensino médio e vestibulares são condizentes com ele. Mas na empresa, quantas e quantas vezes percebemos tempo e dinheiro jogado fora com “treinamentos que não servem para nada”? As razões para a falta de efetividade são diversas, vou relacionar algumas: “O professor não tinha didática”, “O material fornecido era de baixa qualidade”, “A carga horária foi insuficiente”, “O coffee-break estava fraco”, “Eu até aprendi, mas não tenho oportunidade imediata de aplicar, então quando eu realmente precisar vou ter que ser treinado de novo”. Palestras, workshops, seminários, congressos, encontros, …, todos apenas repetem o mesmo modelo, disfarçado de outros nomes, com outros formatos. Com as mesmas vantagens e desvantagens. Será então que essas são as únicas formas de aprender e ensinar? Mas, o que realmente significa “aprendizagem”? Vamos agora a um pouco de teoria. 2.1. A Espiral do Conhecimento Derivada do latim apprendere, a palavra aprender significa agarrar, apoderar-se de alguma coisa. Aprendizagem é, pois, aquisição de um certo saber com ajuda do outro ou por si só (Silva, 1986). Pela Wikipedia6 , “O processo de aprendizagem pode ser definido de forma sintética como o modo como os seres adquirem novos conhecimentos, desenvolvem competências e mudam o comportamento”. Voltando então ao treinamento tradicional, que citei no item anterior, quantos deles efetivamente implicaram em uma mudança comportamental? Ah.. por falar nisso você já deve ter participado daqueles “treinamentos comportamentais”, focados em melhorar a gestão de pessoas, relacionamento das equipes, abordando palavras bonitas como coaching e feedback. Tem aquelas dinâmicas legais, né?! Mas o dia-a-dia nos consome e depois de um tempo “tudo volta a ser como dantes no quartel de abrantes”. Não é culpa de ninguém em específico, na minha humilde opinião. O problema é que aqueles conhecimentos para efetivamente serem incorporados no cotidiano precisam ser praticados, vivenciados. É aí que a “porca torce o rabo”. 6 http://pt.wikipedia.org/wiki/Aprendizagem 12
  • 13. Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar Trabalhos sobre Gestão do Conhecimento não faltam por aí. Uma “googleada” rápida e você pode encontrar centenas de artigos e livros. NONAKA & TAKEUCHI (2008) defendem que a base para o aprendizado organizacional é a transformação do conhecimento tácito em explicito através da interação social. Não entendeu? Se preocupa não, a gente consegue. Vamos começar conceitando. Conhecimento tácito é aquele não escrito, subjetivo, que está na cabeça das pessoas. Depende dos valores, crenças e habilidades pessoais, das experiências vividas por cada indivíduo. Por isso é difícil ser formalizado, transferido ou explicado a outros. Conhecimento explícito, por sua vez, é objetivo, podendo ser repassado pela linguagem falada, escrita e corporal através de aulas, palestras, livros, artigos, gráficos, tabelas, documentos, diagramas, vídeos e tantas outras formas. Segundo NONAKA & TAKEUCHI (2008), os conhecimentos tácito e explicito são unidades estruturais básicas que se complementam e a interação entre eles é a principal dinâmica da criação do conhecimento na organização de negócios. Como assim, “interação entre eles”? Para explicar, os autores criaram uma espiral do conhecimento, exibida na Figura 2. Figura 2. Espiral do Conhecimento. Cada quadrante corresponde a um dos quatro processos elencados, definidos abaixo: • Socialização é o compartilhamento do conhecimento tácito entre pessoas, por meio da observação, imitação ou prática. Experiencias e modelos mentais são compartilhados via trabalho em equipe. Ocorre diálogo frequente e comunicação face à face (“hum... acho que já li algo sobre isso nesse texto”). • Externalização é a conversão do conhecimento tácito em explícito. Em outras palavras, o conhecimento deixa de estar apenas na mente dos indivíduos e passa 13
  • 14. Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar a ser externado através de textos, diagramas, modelos, metáforas, conceitos, hipóteses, imagens, vídeos e tantos outros. O código-fonte gerado por um programador, por exemplo, se encaixa nesta categoria. • Combinação é o reagrupamento, classificação ou sistematização de conhecimentos já explicitados. Esta reconfiguração pode levar a novos conhecimentos. É mais ou menos o que estou fazendo nesta sessão, agregando informações publicadas por outros autores, tentando esclarecer os conceitos fundamentais necessários para uma melhor compreensão do que vem a seguir. • Internalização (ou Interiorização) é o processo de incorporação do conhecimento explícito em tácito. É o aprendizado pela prática, é fazer com que o conhecimento seja agregado às rotinas diárias. Todas os demais processos podem contribuir para a internalização. Leitura, auto-estudos, dinâmicas de grupo, podem auxiliar, mas nada como a experiencia. No centro da espiral, a aprendizagem ocorre entre indivíduos da mesma equipe. Quanto mais afastado deste ponto, significa que o aprendizado ultrapassa as fronteiras hierárquicas do setor, departamento, superintendência e até mesmo da organização. 2.1.2. Um Exemplo Bem Que Ajudaria Para ilustrar, vou usar o exemplo do meu pai7 . Ele conta que, ainda criança, sempre que saía de carro com meu avô, observava atentamente seus movimentos e atitudes no trânsito. E se imaginava fazendo o mesmo. Sem nunca ter sido formalmente treinado ou pelo menos lido um manual de direção, meu pai estava iniciando seu aprendizado sem jamais ter assumido o volante. Chegou o dia, com 14 anos, que meu avô cedeu o lugar de motorista e lhe deu a primeira oportunidade de praticar. Meu pai conseguiu movimentar o carro “de primeira”, sem deixar o carro morrer nem uma única vez A partir de então, meu avô assumiu o papel de mestre e – junto com as “aulas práticas” passou também a explicar gradativamente os conceitos de direção, leis de trânsito e mecânica, externalizando e socializando seus conhecimentos e habilidades. Nas primeiras vezes, nervosismos a cada meia-embreagem, redução de velocidade, mudança de faixa. Meu pai precisava se preocupar com cada movimento do seu corpo, do carro, dos outros automóveis, dos pedestres e do ambiente. Informação demais. Aos poucos, 7 Neste caso, o “meu” é de apenas um dos autores, pois esclareço que não somos irmãos 14
  • 15. Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar todo este aprendizado vai sendo internalizado, conhecimentos e habilidades são assimilados e adquiridos. Dirigir passa a se tornar algo banal, automático, até inconsciente (enquanto motoristas, quantas vezes chegamos em algum lugar e nem sequer lembramos do caminho percorrido?). Não preciso dizer que tirar a carteira de motorista ao completar 18 anos foi a maior moleza. Aulas teóricas sobre funcionamento do carro, leis de transito, mecânica, nada disso efetivamente nos ensina a dirigir. Os instrutores de auto-escola estudam, sistematizam (combinação), escrevem os módulos de treinamento (externalização), transmitem seus conhecimentos e experiências em aulas práticas (socialização), tudo isso visando que aqueles conhecimentos explícitos sobre direção de veículos possam ser transformados em tácito (internalização), e os novos motoristas possam tirar sua carteira de habilitação, adquirindo a permissão legal para dirigir. Busquei esse exemplo banal para tentar explicar os conceitos de uma forma didática. Vale ressaltar que os quatro processos podem ocorrer simultaneamente, mesmo tendo a predominância de algum(ns). Neste próprio trabalho está havendo externalização (estou “pondo pra fora” um bocado de coisas que venho aprendendo), combinação (agregando e correlacionando conceitos) e socialização (estou compartilhando experiencias, abrindo meu coração!). Já quanto à internalização, essa depende muito de você. 2.2. A Organização que Aprende Nas “organizações que aprendem as pessoas expandem continuamente sua capacidade de criar resultados que elas realmente desejam, onde maneiras novas e expansivas de pensar são encorajadas, onde a aspiração coletiva é livre, e onde as pessoas estão constantemente aprendendo a aprender coletivamente” (SENGE, 1999, p. 21). “Gestão do Conhecimento” já foi termo da moda, tema de muitos seminários, congressos, artigos e livros. O próprio Serpro é referencia nacional nesta área. Tem livro publicado e disponível na Internet (SOUZA et al, 2001), escrito por diversos autores, na sua maioria funcionários da empresa, no verdadeiro espírito e prática de construção coletiva. Pode parecer impressão minha, mas em geral, efetivamente poucas organizações (brasileiras, principalmente) realmente deram passos firmes na direção de estimular e favorecer o aprendizado coletivo. O máximo que conseguiram, e isso sem dúvida foi importante, mas não o bastante, foi criar suas intranets e portais corporativos, realizando uma melhor organização, disponibilização e busca das informações organizacionais. A 15
  • 16. Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar grande questão é que nenhuma mudança organizacional significativa pode ocorrer sem que haja uma profunda mudança na forma de pensar e interagir das pessoas. A tradicional ideia do treinamento formal não tem se mostrado suficiente para promover essas mudanças, por isso e preciso encontrar novos e diferentes caminhos. A cultura empresarial pode ser, ao mesmo tempo, “mocinho e bandido”. Veja esses três parágrafos consecutivos da seção sobre Educação Corporativa (SOUZA et al, 2001, p. 43 e 44), transcritos na íntegra (grifos meus), por se encaixarem perfeitamente na abordagem que estou adotando: “Esse novo contexto empresarial redefine o perfil do trabalhador da era do conhecimento. *Precisa-se de profissionais que aprendam de forma não convencional e que saibam trabalhar cooperativamente para gerar soluções inovadoras*. É necessária uma nova abordagem na formação, agora necessariamente continuada, para que as pessoas permaneçam produtivas, em condições de acompanhar as mudanças e otimizando seu tempo. Além disso, a tecnologia vem permitindo desenvolver experiências para treinar mais pessoas com maior economia. As empresas começam a perceber a necessidade de transferir o foco dos esforços de treinamento e educação de eventos em sala de aula, cujo objetivo é desenvolver qualificações isoladas, para a criação de uma cultura de aprendizagem contínua, em que os empregados aprendem uns com os outros e compartilham inovações e melhores práticas visando solucionar problemas organizacionais reais. O foco do treinamento vai além do empregado isoladamente para o desenvolvimento da capacidade de aprendizado da organização, criando situações que permitam a discussão de problemas comuns e soluções por meio da aprendizagem coletiva. Os ambientes de aprendizagem passam a ser reestruturados de forma a tornarem-se proativos, centralizados, determinados e estratégicos e o resultado esperado é o “aprender fazendo”, desenvolvendo a capacidade de aprender e dar continuidade a esse processo na volta ao trabalho." Preciso dizer mais? Estamos quase prontos para, finalmente, falar sobre o Coding-Dojo. Antes disso, alguns conceitos básicos sobre Programação, explicados numa linguagem 16
  • 17. Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar simples e direta. Uma seção dispensável se você já sabe do que se trata, mas útil se você não é da área de TI. 3. O Fantástico Mundo da Programação de Computador Quando comecei a faculdade de informática não tinha muita noção do que iria encontrar, só tinha um sentimento que seria legal “trabalhar com computador”. Fiquei pasmo quando o professor de lógica de programação revelou que essas máquinas maravilhosas só “conhecem” ZEROS e UNS. Isso mesmo, os números 0 e 1. Seus circuitos, placas, transístores, capacitores, memórias, discos rígidos, apenas tem a capacidade de interpretara ausência (0) e presença (1) de corrente elétrica. A sequencia de zeros e uns formam instruções específicas (como listar os arquivos de uma pasta, mostrar uma imagem na tela, enviar um texto para impressão). Como fazem isso numa velocidade impressionante, temos a sensação que os computadores são superinteligentes por realizar tanta coisa. A cada clique o mouse temos a impressão que tudo acontece como num passe de mágica, sem nos dar conta que eles só realizam aquilo que foram ensinados a fazer. Quando compramos um computador, ele já vem com com conjunto de programas instalado. O sistema operacional, que nos ajuda a organizar arquivos, e os aplicativos utilitários, como o processador de textos que usei para escrever este trabalho. Esses programas são instruções escritas por um conjunto de programadores e são executadas vez que solicitamos. Agora imagine escrever programas complexos e cheios de funcionalidades apenas com sequencias de zeros e uns. Até pode ser possível, mas inviável né? Por isso os programadores tem à disposição as linguagens de programação. Instruções de alto nível, mais próximas dos humanos do que das máquinas. Os programas-fonte são um conjunto de comandos (armazenados em um arquivo texto) convertidos para a linguagem da máquina (o programa executável) através de um processo chamado compilação. Por exemplo, a Calculadora que todo computador tem, precisa de instruções que saibam somar, dividir, multiplicar e subtrair dois números. Usando a linguagem Groovy8 , por exemplo, as instruções seriam: def somar(a, b) { a + b } 8 http://groovy.codehaus.org/ 17
  • 18. Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar def dividir(a, b) { a / b } def multiplicar(a, b) { a * b } def subtrair(a, b) { a – b } A instrução abaixo, então, imprimiria na tela o resultado da soma de 6 e 8. println “O resultado da soma de 6 e 8 é “ + soma(6, 8) Os programas normalmente não são tão simples quanto este exemplo, então as linguagens precisam fornecer estruturas de decisão (realizar uma instrução apenas se um determinado conjunto de condições for satisfeitas) e laços de repetição (executar um conjunto de comandos um determinado número de vezes ou até que uma condição de parada seja encontrada). Para facilitar a vida do programador, existem vários softwares que ajudam a escrever programas. Conhecidas como IDE (do inglês Integrated Development Environment), esses ambientes de desenvolvimento integrado fornecem editores de texto inteligentes, que “conhecem” todas as palavras reservadas (o conjunto de comandos suportados por determinada linguagem) e por isso as exibem numa coloração diferente e auxiliam em problemas de sintaxe. Permitem também que os programas sejam compilados e executados na própria ferramenta, simplificam o processo de depuração (executar o programa passo a passo para tentar descobrir ou solucionar defeitos), disponibilizam um sistema de ajuda (os manuais ou helps da linguagem acessíveis imediatamente) e por aí vai. Os programas não existem por si só. Eles visam atender necessidades diversas do mundo real, como gerenciar o processo de matrículas de alunos, o empréstimo de livros na biblioteca, o pagamento de funcionários de uma empresa, o controle de locação de veículos, o gerenciamento das rotas dos aviões num sistema de tráfego aéreo, os cálculos e projeções estatísticas baseadas nas informações de censo demográfico. Normalmente o caminho entre as necessidades e o programa de computador não é tão imediato, afinal em sistema tão complexos não dá simplesmente para “ouvir o cliente e sair programando feito doido”. Existe ciência nisso tudo. A Engenharia de Software (PRESSMAN, 2006) busca tratar de processos, metodologias, técnicas e ferramentas que abordam todo o ciclo de desenvolvimento dessas soluções, indo desde as etapas iniciais de Elicitação de Requisitos (a tradução das necessidades dos clientes em requisitos computacionais funcionais – as funções que 18
  • 19. Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar os sistemas devem ter - e não funcionais – performance, usabilidade, escalabilidade), passando por Análise/Projeto (o desenho da arquitetura da solução), Implementação/Testes (a codificação na linguagem de programação escolhida e os respectivos testes), Homologação (a validação formal feita pelo usuário) e Implantação (a incorporação do sistema nas rotinas operacionais da organização demandante). Depois que o sistema está no “ar” entra em fase de Manutenção, precisando ser alterado a cada necessidade de Correção (defeitos), Adaptação (adequação, por exemplo, a alguma nova legislação) ou Evolução (incorporação de novas funcionalidades). Pensava que era tudo mais simples? Agora você tem uma breve noção desse fascinante mundo da programação e da computação. Tem ideia de quanto trabalho e inteligencia existem nos bastidores dos softwares que usa em seu dia-a-dia, em casa, no trabalho, no banco, no consultório médico, no aeroporto. A informática está presente – direta ou indiretamente – em mais coisas da nossa vida do que imaginamos. Se deu conta de quanto o programador é importante na sua vida e você não sabia? Agora que você já sabe um pouco sobre Metodologias Ágeis, Aprendizagem e Programação, finalmente está preparado para conhecer o Coding-Dojo. 4. Coding-Dojo – A Arte de Treinar Programação O termo talento, numa das definições da Wikipedia9 , é usado para “designar habilidades inatas das pessoas, ou capacidade natural para realizar determinadas atividades”. Enfatiza também que “Estudiosos atuais afirmam que mesmo as habilidades consideradas inatas podem ser desenvolvidas caso haja motivação e com a aplicação de técnicas apropriadas. Assim, qualquer pessoa está, por exemplo, potencialmente apta a aprender música, desde que tenha vontade e use as técnicas apropriadas ao estudo de música”. Estudos recentes (HUECK, 2010) demonstram que não existem habilidades inatas. Tudo depende de nós! Chegaram a um número inclusive: 10 mil horas. Essa é a quantidade de horas que precisa para se tornar um especialista. Acham que Ronaldo “Fenômeno” já nasceu sabendo futebol? Vejam a infância e adolescência dele: quantas horas acham que ele passou jogando? Provavelmente, sua mãe deve ter suado para tirá-lo do campinho do bairro. 9 http://pt.wikipedia.org/wiki/Talento_(aptidão) 19
  • 20. Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar E Mozart? Quantas horas acham que passava por dia quando criança em frente a um piano. Ele não é um prodígio à tôa: eram quase 6 horas por dia. Ele realmente compôs sinfonias aos 12 anos, mas sua primeira obra-prima, considerada como tal por vários críticos, foi escrita quanto ele já tinha 21 anos de idade, e mais ou menos 10 mil horas de prática (HUECK, 2010). Quantas horas por dia, programadores gastam praticando sua arte, sua função? Diferentes dos artistas ou desportistas, que potencializam seus talentos através de exaustivas e repetitivas rotinas de treinamento, os programadores saem da faculdade ou cursos técnicos direto para e empresa, escrevendo seus programas reais “de caneta”, direto para a produção. É como se um ator saísse da escola de teatro direto para uma produção da Broadway em Nova Iorque, ou um aprendiz de judô fosse disputar seu primeiro torneio em plenas Olimpíadas, ou um músico amador tivesse sua estreia num show solo em pleno Carneggie Hall. Todos poderiam até ser bem sucedidos, mas podemos imaginar que estatisticamente isto seria exceção. Um grupo de programadores franceses, praticantes da eXtreme Programming, em meados de 2003, constatou que – assim como a maioria dos seus colegas de profissão - eles não tinham o hábito de treinar programação. Para se tornarem melhores em suas funções, resolveram então se reunir periodicamente para aprenderem uns com os outros, trabalhando juntos na resolução de um desafio de programação. A essa técnica, deram o nome de Coding-Dojo. A inspiração do nome veio das artes marciais, também praticadas por alguns deles. Dojo (pronuncia-se Dojô) é o nome do espaço onde aprendizes e mestres se juntam para praticar os movimentos da luta, através de repetições sucessivas. Eles criaram o site CodingDojo.org10 e em dezembro de 2004 fundaram o grupo Paris Dojo11 . A idéia logo se difundiu pelo mundo com vários grupos de Dojo formados ao redor do planeta. Aqui no Brasil não foi diferente: Dojo Bahia, Dojo Floripa, Dojo Recife, Dojo Rio, e Dojo SP, são alguns dos grupos que surgiram. 4.1. Princípios do Coding-Dojo Como comentado anteriormente, o Coding-Dojo tem como princípios básicos alguns dos princípios do XP: programação em pares, desenvolvimento orientado a testes (test-driven development - TDD), pequenos passos (baby steps) e refatoração. 10 http://codingdojo.org 11 http://codingdojo.org/cgi-bin/wiki.pl?ParisDojo 20
  • 21. Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar A principal ideia da programação em par é ensinar sobre código coletivo, colaboração e disseminação de conhecimento. A programação em par tem como prática duas pessoas trabalhando no mesmo código, uma como piloto e outra como copiloto. Elas fazem revezamento de período em período (por exemplo, 30 minutos). Na outra semana, uma dessas pessoas saem deste módulo e vão para outro trabalhar com outra pessoa, enquanto a que permaneceu em seu módulo tem um novo colaborador. E continua assim. Em algum momento, todos terão passado por todos os módulos, criando a cultura de colaboração, código coletivo (todos mexeram em tudo) e disseminação do conhecimento (todos sabem de tudo) (TELES, 2004). O TDD é uma das práticas do XP mais difíceis de implementar numa empresa. Testes, normalmente é a etapa que logo descartamos quando estamos atrasados (TELES, 2004). Por isso, exigir que escrevamos os testes antes mesmo de iniciar a implementação é uma quebra de paradigma forte para o programador. Segundo a Wikipedia12 , a ideia consiste em escrever um teste pequeno, que garanta que parte do software rode da maneira esperada. Ou seja, escrevemos um teste que falha para, depois, implementarmos o código que faça o teste passar. Isso garante que o código já está testado quando chegarmos a implementação final. Garante também que possamos refatorar todo o sistema sem nos preocuparmos, pois os testes apontarão os possíveis problemas e quebras do sistemas. Já a refatoração do código nos levam às boas práticas. Refatorar sempre é um dos mantras do XP (TELES, 2004; KNIBERG, 2007). Refatoramos para melhorar o código para que este responda melhor aos requisitos não-funcionais do sistema. Isto nos leva obrigatoriamente às melhores práticas de programação e uso de padrões. E tudo isto feito cada passo de uma vez. Refatoramos sempre e refatoramos pouco, o necessário. E finalmente, chegamos aos baby steps: tudo é feito com passos pequenos. Não fazemos testes enormes; fazemos testes pequenos para testar partes pequenas do software. Não refatoramos o código todo; refatoramos porções pequenas de cada vez, pois caso quebre a funcionalidade, podemos estudar o que erramos e consertar, ou mesmo voltar ao código anterior mais facilmente. Com passos pequenos, chegamos a solução final, um passo de cada vez, mas tudo bem estudado, testado, executado. 12 http://en.wikipedia.org/wiki/Test-driven_development 21
  • 22. Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar 4.2. Modalidades de Coding-Dojo Com uso dessas práticas, atualmente, existem duas modalidades de Dojo que os grupos praticam: o Prepared Kata e o Randori. No primeiro, uma dupla de programadores estudam uma possível solução para um problema, se preparam anteriormente e, no dia da apresentação, vão se revezando (como na programação em par) e vão desenrolando a implementação que praticaram antes. Tudo isso usando TDD, refatoração e baby steps. No Randori, a solução será feita por todos os presentes. De tempo em tempo (5 a 10 minutos), existe um rodízio de pessoas: o piloto da programação em par, vai para a plateia, uma pessoa da plateia torna-se copiloto e o copiloto torna-se o novo piloto. Com isso, todos, em algum momento, tem contato direto com código, tendo livre acesso e poder sobre este naquele momento. No caso do Randori em específico, algumas regras se fazem necessárias: todos da plateia podem dar sugestões apenas quando todos os testes estiverem passando. Enquando os testes não passarem, piloto e copiloto devem tentar remediar o erro por conta própria (caso o erro seja sintaxe, pode-se ajudar). O Randori ainda apresenta uma particularidade: a Retrospectiva, uma etapa do XP muito importante para evolução do processo. Aqui, no Dojo, tem o mesmo intuito: evolução do processo de aprendizagem. As pessoas registram e comentam sobre o que deu certo no processo e sobre o que pode melhorar. Com isso, mantemos o que sucesso das práticas que deram certo e tentamos modificar as práticas do que pode ser melhorado. Ou seja, é um processo que evolui com o tempo, melhora continuamente. Sugere-se o uso do Randori com poucas pessoas (entre 15 e 20) e o Kata com um número maior de pessoas. 4.3. Dojo na Prática, Experiencias no Serpro Logo na introdução deste trabalho, eu – um dos autores - disse que resolvi sair da inércia e começar a realizar e praticar sessões de Dojo. Mesmo tendo participado de uma em novembro de 2009, até então eu só tinha ficado na intenção. Aí tive contato com o excelente post “Apelo: parem de "ensinar" Comp. I nas faculdades!”13 de Vinícius Teles, praticamente e disseminador de XP, autor do primeiro livro escrito sobre Extreme Programming em língua portuguesa. A leitura é altamente recomendada, veja esse parágrafo: 13 http://blog.improveit.com.br/articles/2010/05/28/apelo-parem-de-ensinar-comp-i-nas-faculdades 22
  • 23. Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar “Em muitos cursos de computação os calouros têm alguma matéria do tipo 'Comp. I' com duas aulas por semana, cada uma com duas horas de duração. Imagine se não houvesse aula, mas apenas Dojo. Então, teríamos duas sessões de Dojo por semana, durante um semestre inteiro. Se isso fosse adotado, tenho absoluta certeza de que os calouros chegariam no final do semestre sabendo programar mais e melhor que 90% daqueles que se formam em computação. E não só isso, eles saberiam programar mais e melhor que a maioria dos professores universitários que "ensinam" programação!” Era a motivação que faltava. Em junho deste ano coloquei no meu twitter que ao voltar de férias (precisava recarregar as energias) organizaria um primeiro Dojo. Alguns colegas seguidores que trabalham direta e indiretamente comigo foram bem receptivos à ideia. Assim que retornei, colocamos em prática. Pesquisei um pouco mais sobre o assunto, busquei dicas com uma pessoa experiente, defini o desafio e “partimos para o ataque”. O resultado foi excelente. Tiramos fotos, registramos a retrospectiva e disponibilizamos tudo livremente na internet, no grupo de usuários Dojo14 de participação aberta (48 membros até a escrita deste trabalho) que havíamos acabados de fundar. Ao todo, o grupo já realizou 6 sessões “oficiais”, a cada 15 dias, com público médio de 13 pessoas (mínimo de 9, máximo 15, tendo sempre a participação de “novatos”), usando linguagens (até agora Java, PHP, JavaScript, Groovy e Python) e ambientes (Eclipse, NetBeans, editor de texto simples) diferentes. Ao todo, 41 pessoas participaram, sendo 8 convidados de fora do Serpro (quatro, vindo de duas faculdades, mais quatro, de uma empresa particular). Tivemos até coding-dojos específicos, direcionados para líderes de equipe (afinal eles são formadores de opinião e servem de modelo para seus liderados) e equipes de Testes de software. O “fenômeno” está se espalhando, tem Dojos sendo realizados em faculdades e outras empresas, exatamente como imaginávamos. Existem grupos de usúarios praticantes de Dojo por todo o Brasil e em vários outros países. Tem inclusive empresas realizando recrutamento e seleção utilizando a técnica (imaginou selecionar estagiários sem fazer uma prova, apenas observando seu comportamento, habilidades e atitudes durante uma sessão de Dojo?) Nas retrospectivas, mais de 140 registros (81 pontos positivos, 65 pontos de melhoria) foram efetuados. A título de amostragem, destacamos alguns dos mais interessantes sem importar a ordem de aparição: 14 http://groups.google.com.br/group/dojo-bahia 23
  • 24. Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar :-) • Participação de todos na solução, buscando nivelar conhecimento • TDD antevê problemas que não enxergamos. Foi bom para aprendermos a metodologia. • Interação entre piloto e copiloto foi legal • Improviso! • Ajuda no aprendizado de programadores menos experientes • Ajudou a iniciar o aprendizado de uma linguagem nova. • Cooperação entre desenvolvedores • Aprende-se com os acertos e erros dos que programam antes. • Aprendizado; • Trabalho em equipe; • Motivação para solucionar o problema; • Aprendizagem rápida, divertida e dinâmica :-( • Não avançamos muito porque fizemos muita refatoração • Chegar no horário. Disciplina • Evitar desvios de foco,conversas paralelas • Inibição inicial (mas depois houve descontração da turma) • Pouca familiaridade com classes de teste (TDD) • Confusão entre classes de código (resolução do problema) e classes de teste. • Problema poderia ser simplificado; • A plateia estava muito ansiosa, por isso houve muitos palpites fora de hora • Colaboração entre desenvolvedores apenas após o teste passar. Muitos davam palpites com o teste falhando. • Pouco tempo para o problema ser resolvido • Piloto e copiloto devem comunicar mais o que estão fazendo Quadro 1. Consolidado da Retrospectiva das Sessões de Coding-Dojo Serpro O mais interessante deste processo inteiro é notar no dia-a-dia a mudança de atitude dos praticantes do Dojo. Naturalmente tornam-se mais proativos, buscam trabalhar mais em pares, se relacionam melhor em equipe, diminuem o sentimento de posse sobre o “seu” trabalho, ficam mais abertos a emitir e ouvir opiniões, tornam-se mais colaborativos. Sentem “sede” de ampliar seus conhecimentos, buscam estudar mais sobre as técnicas que rapidamente experimentaram nos Dojos, tentam se tornar pessoas e profissionais melhores. Aumentam o foco no produto, no cliente. Começam a questionar seus líderes e colegas sobre porque não tem investido em fortalecer as práticas de testes, e também porque não usam mais a técnica de Dojo em situações cotidianas. Tendem a eliminar desperdícios. Ficam mais empolgados em utilizar verdadeiramente as Metodologias Ágeis. Nos corredores, comentam sobre como foi o Dojo anterior, querem saber quando e como será o próximo, pensam em novos desafios e situações a experimentar. Observe o quanto um investimento de 4 horas por mês pode fazer tanta diferença. Como 24
  • 25. Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar já dissemos antes, é o almejado processo de aprendizagem organizacional: “o modo como os seres adquirem novos conhecimentos, desenvolvem competências e mudam o comportamento” CONCLUSÃO Este trabalho buscou conceituar e demonstrar, através do compartilhamento de experiencias reais, o quanto formas diferentes de aprendizado podem ser aplicadas com alto grau de sucesso nas organizações. O Coding-Dojo é apenas um exemplo disso. Seu fundamento e suas técnicas podem ser adaptados para os mais diferentes tipos de situação, como na construção conjunta de Cronogramas, Requisitos e Modelos de Análise e Projeto. Já temos pessoas mudando sua visão do que deveria ser o aprendizado de novas técnicas e tecnologias. Já estão questionando mais, se tornando mais pro-ativas, “saindo da caixa”. Achamos que encontramos uma maneira muito interessante de ser internalizada na empresa. Uma forma lúdica de aprender, ensinar e se relacionar com os colegas. Podemos parecer pretensiosos (notou o uso do plural? Agora já estamos incluindo VOCÊ), mas estamos plenamente convencidos que é possível “pensar e agir diferente”. Estimular a criatividade, o trabalho colaborativo, a comunicação, o feedback. Tornar nosso ambiente de trabalho mais humano, divertido, prazeroso. Fortalecer as relações interpessoais. Melhorar a qualidade dos nossos trabalhos, a nossa satisfação com os resultados, os serviços prestados pelo cliente. Favorecer a cultura da inovação, sair da “mesmisse”, se reinventar. 25
  • 26. Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar BIBLIOGRAFIA AKITA, Fábio. O que é Gestão 2.0. Abril Info ON-LINE, 2009. Disponível em: <http://info.abril.com.br/noticias/rede/gestao20/gestao/o-que-e-gestao-2-0/>. Acesso em: 27 ago. 2010. ANDRES, Cynthia; BECK, Kent. Extreme Programming Explained: Embrace Change. Addison-Wesley, 2a edição. 2004 BADURDEEN, Aza. Lean Manufacting Basics, 2007. Disponivel em: <http://www.leanmanufacturingconcepts.com/LeanManufacturingBook.htm>. Acesso em: 21 ago. 2010. HUECK, Karin. O Segredo do Sucesso, 2010. Em Superinteressante, edição 280, julho/2010. JONES, Daniel T; WOMACK, James P. Lean Thinking: Banish Waste and Create Wealth in Your Corporation. Free Press, 2003. KNIBERG, Henrik. Scrum e XP direto das trincheiras. C4Media, 2007. LIKER, Jeffrey. The Toyota Way - 14 Management Principles: From The World's Greatest Manufacturer. McGraw-Hill, 2004. NONAKA, Ikujiro; TAKEUCHI, Hirotaka. The New New Product Game. Harvard Business Review. 1986. NONAKA, Ikujiro; TAKEUCHI, Hirotaka. Criação de Conhecimento na Empresa: Como as Empesas Japonesas Geram a Dinâmica da Inovação. Campus, 2008. PRESSMAN, Roger S. Engenharia de Software. McGraw-Hill, 2006. REIS, Daniel F. Conceitos básicos sobre Metodologias Ágeis para Desenvolvimento de Software (Metodologias Clássicas x Extreme Programming), 2008. Disponível em: <http://www.devmedia.com.br/articles/viewcomp.asp?comp=10596>. Acesso em: 25 ago. 2010. SENGE, P. A Quinta disciplina: arte e prática da organização de aprendizagem. 7a ed. São Paulo: Best Seller, 2000. SCHWABER, Ken; SUTHERLAND, Jeff. O Guia do Scrum, 2009. Disponivel em: 26
  • 27. Coding-Dojo: Uma forma rápida, eficiente e divertida de aprender e ensinar <http://www.scrum.org/scrumguides/>. Acesso em: 23 ago. 2010. SOUZA, Alcyr M. et. al. Gestão do Conhecimento: Uma experiência para o sucesso empresarial . Paraná: Ed. Universitária Champagnat , 2001. Disponível em: <http://www1.serpro.gov.br/publicacoes/gco_site/>. Acesso em: 27 ago. 2010. TELES, Vinicius. Extreme Programming – Aprenda como Encantar seus Usuários Desenvolvendo Software com Agilidade e Alta Qualidade. Novatec Editora, 2004. 27