Cockpit

A programação em par é basicamente uma técnica de desenvolvimento de software em que dois indivíduos trabalham em um bloco único de código. Cada programador assume um dos dois papéis: Piloto (Driver) ou Navegador (Navigator). O piloto no processo é responsável por elaborar diligentemente o código, enquanto o trabalho do navegador é revisar e concentrar-se no plano de ação.

Diversas vezes eu me deparei com uma regra de negócio complexa ou com um bug que não conseguia resolver no software. E então eu li o meu código para outro programador explicando o que cada linha estaria fazendo e quase que instantaneamente eu acabei encontrando uma solução, mesmo tendo o outro programador somente como um ouvinte.

Quando você lê e explica o seu código para outro, obrigatoriamente você vê o código de um ponto de vista diferente daquele em que esta codificando. E isso é constantemente exercitado durante uma sessão de programação em par.

No começo da minha carreira, trabalhei numa empresa que possuía um software complexo todo construído na linguagem C. O programador responsável tinha um conhecimento profundo da linguagem e muitos anos de experiência. Ele tinha o hábito de abrir aquele velho editor azul da Borland em seu notebook e começar a ler e explicar o código para mim.

Ele fazia isso com o intuito de ajuda-lo a encontrar falhas ou melhorias no código, mesmo sabendo que pouco eu poderia contribuir devido a minha inexperiência. Mas o fato é que aquilo me ajudou muito a entender como as coisas deveriam ser feitas e também acelerou a minha curva de aprendizado na linguagem.

Esses foram alguns dos fatos que me levaram a estudar a programação em par, e ajudar minha equipe a aplica-la durante o desenvolvimento de software. O objetivo deste artigo é fornecer às organizações um guia básico de programação em par. Grande parte dele é uma tradução do artigo originalmente publicado por Oleksandr Knyga que você pode ler na íntegra aqui.

Introdução a Programação em Par

Programadores

A programação em par foi introduzida como um elemento integral da técnica de desenvolvimento de software chamada Extreme Programming. Projetado por Kent Beck nos anos 90, o Extreme Programming é um conjunto de padrões de software que ajuda a equipe de desenvolvedores a implementarem um ótimo software. Ele enfatiza a troca de informações, clareza, resposta, determinação e consideração, o que acabará levando a um conhecimento de programação em pares definitivo.

De acordo com Beck, “Programadores em par: Mantêm um ao outro na tarefa. Descobrem refinamentos para o sistema. Esclarecem idéias. Tomam a iniciativa quando o parceiro estiver com dificuldades, reduzindo assim a frustração. Responsabilizam-se mutuamente pelas práticas da equipe. Emparelhamento”

Como funciona?

Como mencionado acima, a programação em par inclui dois indivíduos (desenvolvedores) trabalhando em um único sistema, com um digitando e o outro navegando ou observando. Geralmente, o responsável pela digitação é conhecido como “Piloto”, enquanto o outro, chamado “Navegador”, revisa e analisa continuamente o que está sendo codificado ou digitado. Durante todo o tempo entre eles, a dupla invariavelmente mantém contato, permitindo que o outro parceiro participe e ajude a delinear a direção do código.

O objetivo é compartilhar a carga de trabalho entre os dois participantes, a fim de manter o fluxo de desenvolvimento constante e também para ajudar a disseminar o conhecimento sobre a equipe. O piloto e o navegador devem interagir constantemente entre si, pois isso aumentará o conhecimento e a eficiência de ambos os membros.

Concluindo, o conceito não é apenas jogar dois desenvolvedores juntos e instruí-los a desenvolver de forma caótica. Nos últimos anos, os profissionais criaram metodologias que podem ser utilizadas em diversas situações. Através da experiência e da prática adequada, esses indivíduos aprimoraram esses procedimentos.

Técnicas de programação em par

Conforme relatado por algumas empresas da área, presume-se que os estilos mais utilizados associados a programação em par são:

Funções Piloto-Navegador

Driver-Navigator

A programação em par foi popularizada através da técnica de piloto-navegador. Idealmente, os membros da equipe devem mudar suas funções para obter melhores resultados.

Nesse estilo de programação em par, o navegador rapidamente perde seu interesse. Talvez porque o responsável pela digitação não esteja se comunicando ou talvez o revisor não queira incomodá-lo. Muitas vezes foi observado que o piloto colocou “…só um minuto, eu tenho uma ideia” e continuou trabalhando, então o navegador checou suas contas sociais ou fez outras tarefas irrelevantes.

Para realizar com eficiência esse estilo de programação em par, a comunicação é o que faz toda a diferença. Infelizmente, esse nível de interação não é inevitavelmente inerente a um novo par. Devido a essa poderosa especificação de comunicação, eu costumo considerar esse tipo como uma forma mais transitória de fazer programação em par e instruo os iniciantes a ficarem longe disso.

Pareamento Forte e Tradicional

Traditional-Strong

O pareamento de estilo forte é a abordagem na qual o piloto não faz nada para o qual o navegador não os direcionou. Conforme explicado por Llewellyn, “Para uma ideia ir da sua cabeça para o computador, ela deve passar pelas mãos de outra pessoa”.

Sempre que o piloto tiver uma ideia, ele deve entregar o teclado ao seu parceiro e, em seguida, executar o controle a partir da posição de observador. Essa abordagem envolve completamente o navegador.

A abordagem tradicional, por outro lado, requer que o navegador peça o teclado para dar sua contribuição ou implementar sua ideia.

Pareamento Pingue-Pongue

Ping-Pong

Um outro padrão de programação de pares frequentemente empregado pelos desenvolvedores é o pareamento pingue-pongue. Nessa abordagem, o piloto elabora um teste de comportamento e solicita que o navegador aplique o comportamento. Uma vez implementado, o navegador assume a sua vez e o novo piloto anota o próximo teste para o novo navegador aplicar.

Conseguir minimizar o tempo para refatorar tanto o código quanto o teste é o maior desafio desse padrão. Na verdade, às vezes, leva-se mais tempo na refatoração de testes do que na codificação. A implementação de um recurso pode ser complicada e também tornará o teste complexo. É mais simples mantermos um avanço progressivo a medida em que as propriedades estão sendo aplicadas, mas também precisamos prestar atenção à simplicidade do código, de modo que ele possa ser mantido sem esforço a longo prazo. A ideia similar também se aplica à parte de teste.

Em suma, o pareamento pingue-pongue ajuda os profissionais a ficar de olho tanto na codificação como nos elementos de teste. Além disso, também ajuda as pessoas a fazer TDD (Test Driven Development) de forma eficiente.

Estatísticas

– Cerca de 96% dos programadores que utilizaram a técnica relataram em uma pesquisa on-line que preferem trabalhar em um ambiente de programação em par do que sozinhos.

– Além disso, 95% dos desenvolvedores pesquisados declararam que se sentiam mais confiantes quando trabalhavam em pares do que quando trabalhavam sozinhos.

– O impacto na produtividade e no resultado também é positivo, pois os pares geralmente fazem mais melhorias no design do que os programadores solos. Além disso, eles também tendem a encontrar as falhas de design e os erros melhor do que os independentes.

– Laurie Williams, da Universidade de Utah, em Salt Lake City, mostrou que programadores em par são apenas 15% mais lentos que dois programadores independentes, mas produzem 15% menos erros.

Programação em Par – Como Ferramenta de Recrutamento

A programação em par usada em entrevistas de emprego é como se a entrevista se tornasse um teste de habilidade. A ideia básica é que nos conectamos com o candidato à medida que passam por um problema de codificação. É um pouco diferente do método convencional onde o entrevistado é mais ativo na maior parte do tempo.

Uma das melhores coisas sobre usar essa abordagem é que ela se aproxima muito do que seria uma situação real de uma tarefa. Além disso, ajuda a empresa a obter uma imagem precisa do nível de conhecimento e capacidade do candidato.

Como recrutador, você terá a oportunidade de observar com que rapidez o candidato aceitará novos conceitos, seu potencial para trabalhar com outros indivíduos e, mais importante, seu nível de habilidade para realizar tarefas complicadas de codificação.

Dicas Importantes sobre Programação em Par

Durante o pareamento:

– Deixe-me codificar.
– Você poderia me ajudar?
– Vamos fazê-lo juntos.
– Aqui está meu plano.
– Que plano você tem em mente?
– Como esse bloco de código funciona? Vamos realizar teste unitário.
– Estou cansado? Você esta bem?
– Eu não entendi. Desenhe um modelo.
– Nós ignoramos alguma coisa?

Faça uma pausa curta:

– Podemos dar um tempo?
– Podemos trocar de papéis?
– Vamos sair para tomar uma xícara de café?

Lembre-se:

– Não force.
– Dê ao seu parceiro a oportunidade de assumir o comando na hora certa.
– Incentive a comunicação aberta.
– Não ignore as pausas.
– Confiança.
– Identifique seus erros.
– Critique-se primeiro.
– Desacelere.

Pensamento final sobre a Programação em Par

Programação em par é para todos? Bem, a resposta não é simples. Nós todos somos diferentes, então definitivamente o resultado irá variar. Programação em par funciona maravilhosamente para alguns, enquanto os resultados não são tão bons para outros.

Essa técnica deve consolidar o esforço de ambos os parceiros, mas nem sempre isso ocorre. Tenha em mente que nem todo projeto é adequado para programação em par. A ideia funciona especialmente bem em projetos complicados, onde um experiente programador ou uma equipe de iniciantes pode lidar com a tarefa. Nessa situação, o estabelecimento de uma combinação sênior-júnior pode ser um ótimo passo para aprimorar as habilidades e a proficiência do júnior.

Do meu ponto de vista, não há nada de ruim com a abordagem em si, pois tudo depende de encontrar uma combinação apropriada de programadores para o projeto em particular. Sinta-se livre para deixar a sua opinião nos comentários.