Tecnologia

Introdução

Sabemos que existem momentos que a realização de algumas atividades podem ser um pouco complexas. Por isso, muitas vezes é necessário um segundo ponto de vista para a implementação e construção do raciocínio.

Pair programming é uma técnica de desenvolvimento em que dois desenvolvedores (as) escrevem códigos de forma colaborativa, envolvendo bastante comunicação.

Tal prática pode auxiliar em diversas maneiras: Seja em discussões de boas práticas na implementação de um código, code review entre pares, na construção de boas soluções, e também no compartilhamento de conhecimento.

Vamos comentar um pouco sobre essa técnica, seus estilos, alguns de seus benefícios e também 5 ferramentas que podem auxiliar no trabalho colaborativo.

Pair Programming: Do que se trata?

Como comentado anteriormente, Pair Programming é basicamente o ritual de duas pessoas programarem em conjunto. Mas aí surge a dúvida: como funciona na prática?

Dividimos a prática em duas funções, o Driver e o Navigator.

Driver

A pessoa desenvolvedora busca trabalhar nos detalhes da implementação do código atual.

  • Ignorando elementos externos ou problemas maiores, focando apenas em pequenas partes, e;
  • Durante sua codificação o desenvolvedor fala como se estivesse explicando sua lógica.

Navigator

Essa pessoa pensa mais estrategicamente nos próximos passos e melhorias.

  • Fica na posição de observador;
  • Revisa o código, compartilha ideias e entrega direcionamentos;
  • Analisa exceções e possíveis bugs;
  • Realiza anotações em sticky notes para depois passar para o driver, evitando assim interrupções.

Embora tenhamos esses perfis bem definidos no início do texto, ambos desenvolvedores revisam as atividades a cada etapa. Assim, permitindo que ambos possam trabalhar no código de maneira passiva e ativa.

Abaixo você encontra um fluxo de como se inicia uma sessão de pair programming:

  • Começa com a escolha de uma task bem definida e refinada;
  • Realiza a separação de cargos e funções na sessão;
  • Analisa cada passo e objetivo por vez, podendo ser gerenciado pelo "mesagem do code commit", teste unitário e/ou anotação de um sticky;
  • Realiza a troca de cargos regularmente, a cada finalização de uma parte da task (definida pelos pares). Ou o realiza a cada 25 minutos, como na técnica Pomodoro;
  • O navigator não é apenas tático, mas traz também os próximos passos da implementação.

Alguns Estilos de Pair Programming

Estilo Ping Pong 

Esse estilo é bem próximo do TDD (Test Driven Development), e pode ser utilizando quando existe uma task definida.

  1. PING: DEV A escreve um teste que falha;
  2. PONG: DEV B escreve a implementação a prova de falhas;
  3. PING: DEV B começa a escrever o teste que falha;
  4. Cada PONG sempre refatora, quando possível, após chegar no verde;

Estilo Pair-Development

O estilo possui alguns outras tarefas, fazendo com que esse estilo seja mais um mindset para a implementação.

Segundo sua criadora, Sarah Mei, o desenvolvimento de uma User Story ou uma feature geralmente não é apenas sobre código, mas também sobre outros passos.

Planing

Entendendo o problema:

  • Ler a estória de um para o outro, evidenciando o que foi entendido;
  • Caso hajam ferramentas necessárias, deve-se buscar por elas.

Apareça com uma solução:

  • Discutir com o par ou tentar chegar em alguma solução sozinho;

Planejar a implementação:

  • Como será testado?
  • Anotações ou sticky notes;

Os benefícios do Pair Programming

Existem alguns benefícios ao realizar pair-programming que podem variar dependendo da forma implementada. Vou listar alguns abaixo:

Compartilhar Conhecimento

Quando duas mentes trabalham em um mesmo problema pode existir diferentes perspectivas e alternativas para encontrar uma solução.

Reflexão

Explicar conceitos em voz alta, permite evidenciar se realmente entendemos de determinado assunto.

Fluxo de trabalho otimizado

Com os pares integrados na solução de determinado problema, podem surgir melhorias no codebase.

Ferramentas para trabalho colaborativo

Em minha jornada por meio de IDE e editores de texto, nenhum deles mudou minha concepção do que é um ambiente completo e integrado.

Seja pela imensidão de extensões disponibilizadas pela comunidade e pela Microsoft, ou pelo seu design compacto e robusto.

Apresento abaixo 5 extensões que podem auxiliar você e sua equipe no dia a dia dentro da IDE quando realizado pair-programming ou code-review.

Live share

A ferramenta traz um ambiente colaborativo em tempo real para editar ou debugar código no Visual Code.

Trabalhar com um colega de classe ou de trabalho remotamente, seja em pair-programming, revisão de código ou para resolver um problema específico da empresa, não será mais um problema.

Você se engana se acredita que seja apenas isso. Ele não é um simples editor remoto.

Você consegue também: conversar via chat, e compartilhar seu servidor e terminal local!

Isso mesmo! Além disso, você pode convidar mais de uma pessoa para trabalhar coletivamente.

A extensão vem com um pacote: Live Share, Live Share Audio, Live Share Chat e o Peacock.

Live share whiteboard

Você já ficou com dúvida sobre algum conceito ou explicação e seu professor ou mentor precisou sair do Visual Code para desenhar em outra ferramenta?

Pois bem. A proposta da extensão é justamente essa: ter um ‘Quadro-Branco’ colaborativo dentro do Visual Code.

Você pode agora desenhar modelagens de banco de dados relacionais, arquitetura de software, ou mesmo realizar uma apresentação para equipe.

Todo Tree

Como desenvolvedor você já deve ter passado por algum cenário que poderia ser melhorado no futuro, ou mesmo durante a implementação da feature.

O Todo Tree vem justamente para esse propósito. Com ele é possível colocar tags TODO e FIXME no início de um comentário, e os adicionar dentro de um painel próprio para visualização futura.

Criando uma lista de tasks que auxilia você a encontrar em qual parte do código você adicionou as tags.

Git Lens

Eu sabia que estava passando tempo demais no terminal para realizar os comandos de adicionar, ‘commitar’ e realizar o push.

Foi aí que percebi que precisava de uma ferramenta para automatizar esse processo, e no percurso ter mais informações do histórico dos meus commits.

O GitLens me acolheu e me deu o poder do Git Supercharged, grandes insights das alterações do código, um histórico de arquivo e linha, além de várias outras ferramentas.

Se você precisa avançar na utilização do git e de mais dados sobre o progresso do seu codebase, essa é uma ferramenta essencial.

Live Share Pomodoro

A técnica Pomodoro tem sido uma ótima ferramenta no auxílio do foco.

A sua estrutura simples de ter sessões de 25 minutos com os short-breaks e long-breaks pode auxiliar bastante nas suas sessões de pair-programming.

O Live share pomodoro integra bem com o liveshare auxiliando nas sessões.

Github Copilot

Github Copilot é uma ferramenta de inteligência articifial que funciona como um auxiliar na escrita do código.

Ele é suportado pela OpenAI com seu novo sistema de IA chamado Codex.

Neste ambiente, a ferramenta foi treinada por códigos disponíveis publicamente, e com processamento de línguagem natural (entendendo tanto línguagens de programação como idiomas naturais).

A ferramenta auxilia e escreve sob o contexto de comentários e código, sugerindo desde linhas de código a funções completas.

Atualmente possui suporte a uma grande variedade de línguagens de programação, e está em technical preview, o que significa que é uma versão incompleta (logo sujeita a bugs e instabilidade).

Enquanto há tempo para os testes, o grupo para testadores está limitado (embora seja possível entrar na lista de espera). Após a liberação de acesso, a extensão pode ser instalada no VS Code por aqui.

Conclusão

A técnica de pair-programming pode ajudar você a se comunicar melhor durante uma sessão de código, discutir boas práticas, compartilhar conhecimento e trazer soluções para problemas diários.

E, aliando todas essas dicas com as ferramentas do VS Code, fica mais fácil de trabalhar remotamente com essa técnica. Espero ter ajudado a conhecer um pouco sobre a técnica. Até logo!

Essa publicação foi desenvolvida por Dheyson Alves, desenvolver front-end mobile da Zappts.