Coding Dojo – A importância de se praticar programação
Posted by pauloortins in Coding Dojo on November 27, 2011
O que é ?
Coding Dojo é um encontro onde um grupo de programadores se reúne para praticar programação e juntos resolverem um determinado problema.
A origem
O Coding Dojo surgiu em Paris, na França, onde um grupo de programadores franceses perceberam que diferente dos músicos e atletas que treinavam uma quantidade enorme de tempo antes de mostrar suas habilidades em público, nós programadores não temos o hábito de praticar as nossas habilidades fora do ambiente de trabalho, ou seja, o código que usamos para aprender uma nova tecnologia ou experimentar novas formas de trabalho é o mesmo que enviamos para produção, diante disso surgem dois problemas, ou os programadores não experimentam novas tecnologias e desenvolvem seus sistemas todos da mesma forma já que código em produção não é pra ser usado como teste, ou então o nosso código em produção acaba tendo uma qualidade baixa devido a equipe ainda está aprendendo um framework ou experimentando uma nova metodologia. Foi devido a essa realidade que os programadores franceses criaram o Coding Dojo, que tem seu nome “copiado” dos dojos de artes marciais, onde praticantes de todos os niveis podem se reunir para melhorar as suas habilidades naquela arte.
Técnicas utilizadas no Coding Dojo
Antes de mostrar o funcionamento do Coding Dojo é necessário explicar algumas técnicas utilizadas, essas técnicas são o TDD, Refactoring, Baby Steps e o Pair Programming.
TDD (Test-Driven Development)
O TDD é uma metodologia de desenvolvimento de software que diz que ao invés de se fazer testes manuais após o desenvolvimento de uma funcionalidade, os programadores devem escrever testes automatizados antes de se desenvolver o código daquela funcionalidade, isso traz as seguintes vantagens :
- Estaremos sempre desenvolvendo o código mais simples possível que atenda a um determinado requisito
- Nossos testes não correm o risco de serem deixados de lado no caso do cronograma do projeto se tornar insuficiente
- A construção de uma suíte de testes que com um clique de um botão consegue nos informar se o nosso projeto está correto ou não, isso é excelente pois facilita a manutenção do software criado, visto que outros desenvolvedores podem ser inseridos no projeto, pois mesmo que desconheçam as regras de negócio do software, a suíte de teste irá garantir que eles mantenham o software funcionando corretamente.
- Diminui-se o tempo gasto com o pessoal de QA (Quality Assurance) visto que muitos dos testes que seriam executados em semanas por testadores podem ser executados em minutos já que agora eles são executados automaticamente.
Refactoring
É um conjuntos de técnicas usados para reestruturar uma porção de código já existente, melhorando-o e tornando-o mais legível, mais performático e etc, sem alterar o comportamento do mesmo. Para maiores informações sobre refactoring existe o livro de Martin Fowler, link do livro.
Baby Steps ou Passos de Bebê
No Coding Dojo não é necessário correr para finalizar o problema, aliás isso é até proibido, afinal não se trata de uma corrida, nem de uma competição para eleger o melhor programador do grupo, a solução do problema deve caminhar lentamente, sendo implementado apenas um requisito por vez.
Pair Programming
No Coding Dojo todo o código é produzido em duplas, ou seja, enquanto um programador está fazendo a codificação, existe um outro programador que fica sentado como co-piloto ajudando na resolução do problema.
O funcionamento do Coding Dojo
O Coding Dojo funciona da seguinte maneira :
Um problema deve ser escolhido pelos participantes, esse problema não deve ser um problema que costumamos resolver no nosso dia-a-dia, assim como não deve ser tão fácil para que o dojo não perca o seu ar desafiador e acabe em pouco tempo, nem tão dificil que impossibilite a participação de programadores pouco experientes.
É escolhida a linguagem que vai ser utilizada, assim como o framework de testes.
Ex:
Java + Junit
C# + MSTest
Após a escolha do problema e da linguagem, são escolhidas as duas pessoas que vão comecar o coding dojo, uma deve ser o piloto , que vai ser a pessoa que vai começar a codificação do problema, e a outra será o co-piloto, que vai guiar o piloto durante a resolução do problema. O restante das pessoas ficarão na platéia.
O piloto e o co-piloto então começarão a resolução do problema, escrevendo o primeiro teste, a partir daqui estaremos na fase vermelha.
A Fase Vermelha
A fase vermelha é iniciada quando os nossos testes não estão rodando, nessa fase a platéia deve se manter em silêncio, enquanto o piloto e o co-piloto devem juntos fazer os testes funcionarem corretamente. O fim dessa fase se dá quando os testes começam a rodar de forma correta e assim se inicia a fase verde.
A Fase Verde
Nessa fase todos os nossos testes estão funcionando corretamente, logo agora podemos aplicar algumas técnicas de Refactoring para que o nosso código fique mais claro, nessa fase a platéia pode se pronunciar e sugerir melhorias no código.
Após todos os refactoring serem feitos, será escrito mais uma vez um teste para o nosso problema, o que nos colocará de novo na fase vermelha, esse ciclo é repetido até que o problema seja resolvido ou o tempo disponível para o coding dojo tenha terminado .
Todos devem participar
Deve ser estabelecido qual deve ser o tempo que o piloto permancerá escrevendo código, o mais comum é 5 minutos, após esse tempo e indepedente da fase em que estivermos, o piloto deverá se juntar a platéia, o co-piloto vai se tornar o novo piloto e alguém da platéia vai se tornar o novo co-piloto.
Beneficios do Coding Dojo
- Conhecer pessoas fora do nosso ambiente de trabalho
- Desenvolver lógica de programação através de pequenos problemas
- Aprender com os mais experientes assim como ensinar aqueles que estão começando
- Aprender novas linguagens/frameworks
Alguns links interessantes:
Sobre o Coding Dojo:
- http://codingdojo.org/ – Site Oficial
- http://dojo-bahia.blogspot.com/ – Site do grupo de Coding Dojo da Bahia
- http://www.youtube.com/watch?v=8aDQR4KhA7Q – Palestra sobre Coding Dojo de Sergio Rehem
- http://vimeo.com/20473572 – Um vídeo em que profissionais mundialmente reconhecidos na area de programação falam da importância do Coding Dojo nas suas carreiras
Sites com problemas para usarmos no Coding Dojo:
- http://codekata.pragprog.com/ – Site de Dave Thomas, autor de diversos livros sobre programação
- http://dojopuzzles.com/ – Site em português de Renne Rocha, contém diversos problemas
- http://br.spoj.pl/problems/seletivas/ – Lista de problemas usados em concursos de programação
Adapter Pattern
Posted by pauloortins in Design Patterns on September 19, 2011
A Adapter in real world is used to make two differents things work together, we have power supplies adapters, adapters for camera memory cards, joysticks adapters, translators are a kind of adapter and etc.
In software world, a adapter is a class that provides a bridge between two objects with unrelated interface. The Pattern can be structured as:
Singleton Pattern
Posted by pauloortins in Design Patterns on September 11, 2011
Suppose you was hired to develop a system to take care your college printer lab. You will have only one printer and all the students will send files to be printed by this unique printer.
Sometimes is important for some classes to have exactly one instance for differents reasons, maybe it is required to have only one instance, like the printer in our printer lab, or maybe you can reduced the memory allocation.
In this cases, how we can ensure that a class will have only one instance ?
Abstract Factory Pattern
Posted by pauloortins in Design Patterns on September 5, 2011
The Abstract Factory is a creational pattern, which is a pattern that encapsulates the process of creation of new objects. It increases the software flexibility at the pace it hides all the knowledge about which concrete classes the system uses, how they are created, who creates the objects and etc.
Suppose you are a owner of a beverage producer, you have winter drinks, like coffee and wine, and summer drinks like refrigerant and beer, cause this we have to change our beverage portfolio at the end of each season. If we dont use a factory, we will have a tons of classes instantiation around the code, and change all would be a hard work !
Template Method Pattern
Posted by pauloortins in Design Patterns on September 4, 2011
Suppose we have three athletes from different sports, before the season starts, all of them have to make a pre-season training that is a strong training period when they practice their skills, lose some weight, practice the teamwork and etc. Althought each one do a physical practice, a specific practice and a mental practice, each player has your own training based in your sports needs. Example: A soccer player has to put a lot more efforts in the power of their legs than a golf player.
The Observer Pattern
Posted by pauloortins in Design Patterns on September 4, 2011
Suppose i ask you to provide me a update system for my blog, the update system works in a way that every time i make a change(new post, edit a post, new comments), i want to send this info to all my readers. At begin, i just want to send this info via SMS or via Email, but once the blog readers number rises maybe i want to send the info via facebook or via twitter.
It is clearly a situation when i have a Object that contains the info, and another objects that will listen the former object to do things based in the info. To solve this problem, we have a pattern called Observer Pattern, which has the intent to : “Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically.”.
The Composite Pattern
Posted by pauloortins in Design Patterns on August 29, 2011
The Composite Pattern
The Composite pattern is used when you have primitives objects and composite objects which are objects that act as container for other composites objects and other primitives objects and you want to manipulate these objects in the same way.
To explain this pattern i will use the examples of HTML elements, in HTML we have several types of elements, in this example i will use the div, input and span tags. The input and span tags only contains themselves, in other way the div contains itself as contains other divs, input or span tags. The three generate HTML.
What is a Design Pattern ?
Posted by pauloortins in Design Patterns on August 29, 2011
Designing a good object-oriented software is hard, make them reusable is even harder. You have to choose which classes you will use, the attributes and methods of each one, also define class interfaces and inheritance and define the relationships between them. There is no way to be a good designer other than practice and making mistakes and learn from this mistakes.
For our luck, many of designers already made tons of mistakes and could now provide us some examples of design that can solve recurrent problems in our programmers lives. They named them “Design Patterns”.
Opening post
Posted by pauloortins in Opening Post on August 29, 2011
I postponed this blog for long time but now i took courage and i will start to write.
My goals with this blog are:
-> Share my passion for programming.
-> Discuss a lot about programming and learn very more.
-> Develop my English skills.
-> Make friends and maybe jobmates.
So every feedback is valid, about my english skills, about my code, about the quality of posts and etc.