Quão comum é a programação de pares no local de trabalho?

16

Sempre fiquei intrigado com a programação em pares, mas em 12 anos de desenvolvimento nunca trabalhei em um local onde eles empregaram essa prática, por isso sempre fui cético em relação à maneira como as pessoas a veem.

Gostaria de saber se isso é por causa de dinheiro / tempo (chefe de cabelos pontudos avistando duas pessoas em um computador trabalhando no mesmo código !!!! como se atrevem!) Ou por outros motivos?

ozz
fonte
8
Eu acho que o PHB pode estar correto nessa situação. Duas pessoas (e, portanto, dois salários) para uma produção são fundamentalmente uma má decisão comercial. Não há muitos casos em que a programação emparelhada é mais produtiva do que individual, pelo menos não em período integral - portanto, isso não é feito muito além da orientação de novos membros da equipe ou do trabalho conjunto em um problema específico.
TZHX
3
Muito difícil convencer o chefe de cabelos pontudos de que isso tem valor.
Walter Walter
3
Para o novo código , acho que a programação em pares tem um grande valor. A primeira iteração pode levar a mesma quantidade de tempo, mas no IME você gasta muito menos tempo de depuração. E quando duas pessoas conhecem o mesmo código, a depuração se torna mais fácil, porque elas podem parecer independentes juntas. "Dados globos oculares suficientes, todo bug é transparente."
Michael K
1
@ Michael, nem sempre, mas às vezes eu acho que o emparelhamento no código legado pode ser útil. Ele pode quebrar os silos e / ou reduzir os custos de refatoração. Dito isto, concordo plenamente com você.
DevSolo
5
@TZHX: "Duas pessoas para uma saída são um negócio ruim". Esse é um argumento com falhas graves e você sabe disso (como pagar programadores por linha de código). A programação em pares é um tópico complexo e não deve ser descartado com tanta facilidade.
Martin Wickman

Respostas:

20

Eu tenho o mesmo show há 15 anos e recentemente (últimos 12 a 18 meses) começamos a adotar técnicas Agile. Onde a programação de pares é usada, a história / recurso resultante foi implementada no tempo sem defeitos. Ainda não acho que tenha sido empregado com bastante frequência.

Antes da adoção do Agile, um outro desenvolvedor e eu compartilhamos o teclado periodicamente ao longo dos anos com pouca frequência (talvez uma vez a cada 3-4 meses). Nossa equipe de gerenciamento parecia relutante, mas sempre estava satisfeita com nosso emparelhamento informal, pois geralmente realizava algumas das seguintes ações:

  • silos reduzidos no time (grande vitória quando o time tem 6-8 desenvolvedores)
  • código produzido com menos defeitos
  • cada desenvolvedor normalmente adquiria habilidades com isso

Eu diria que a gerência é relutante, mas se você pode dar pequenos passos e demonstrar que o recurso é melhor posteriormente (economia de custos) e / ou cada (ou um) desenvolvedor adquiriu algumas habilidades (pagando antecipadamente), poderá ganhar força se você acha que é uma prática que combina com você ou sua equipe.

DevSolo
fonte
grande insight DevSolo, obrigado por compartilhar. Eu estou supondo que você provavelmente tem uma equipe bastante estável (baixa rotatividade de pessoal?)
ozz
Você é bem vindo. Nossa rotatividade foi bem baixa ... 4 de nós compartilhamos o mesmo escritório há mais de 15 anos, apesar de 4 realocações (em 4 edifícios e 2 estados)!
DevSolo
Ironic, seu apelido é 'DevSolo';) nb minhas experiências concordam com a sua #
ChrisAnnODell
11

Meu palpite é que provavelmente haveria muitas resistências dos desenvolvedores. Você se lembra de ter sido forçado a trabalhar com pessoas que talvez não fossem as pessoas mais motivadas do mundo durante a faculdade ou mesmo o ensino médio? Essas pessoas ainda existem. A menos que você tenha uma equipe composta por todas as pessoas "de primeira linha", esse tipo de configuração causará alguma animosidade no grupo.

Pemdas
fonte
Pemdas muito verdadeiras!
ozz
2
+1, infelizmente. O trabalho em equipe é uma habilidade que você precisa desenvolver e, se não quiser, não poderá. Talvez seja isso que os gerentes de programadores devem fazer - encontre a estrutura da equipe que promove mais produtividade com as pessoas que eles têm.
Michael K
4
Essa profissão exige manter o ego sob controle. Nem sempre é fácil, mas as recompensas serão extremamente benéficas.
DevSolo
@ DevSole ... o que isso tem a ver com a minha resposta exatamente?
pemdas
@ Perndas, eu estava assumindo, talvez incorretamente, que a resistência seria devido a egos. Pelo menos quando eu vi, esse parece ser o motivo. Eu só vi dois desenvolvedores (que eu me lembro) realmente resistem a isso. O ego de um não podia caber na sala, o outro tinha problemas com confiança.
DevSolo 25/01
9

Ainda não fiz isso oficialmente, mas sempre que estou emperrado, ligo para um desenvolvedor e vamos trabalhar juntos em uma solução. É uma ótima maneira de trocar idéias, deixe uma pessoa pensar enquanto a outra implementa, para que você não perca sua linha de pensamento porque está digitando.

Gostaria que fosse feito mais.

CaffGeek
fonte
4
Outra ferramenta a ser usada, se você não estiver familiarizado, é chamada "Rubber Ducking". Basicamente, coloque um objeto em sua mesa como um pato de borracha (o seu realmente usa um Yoda de brinquedo) e explique o problema. Consulte c2.com/cgi/wiki?RubberDucking
DevSolo
Em vez disso, uso a pessoa sentada ao meu lado ... não podemos colocar coisas em nossas mesas.
CaffGeek
Seriamente?
Michael K
@ Michael ... você não tem idéia das regras que temos aqui. E, no entanto, as poucas coisas boas superam todas as más ... apenas.
CaffGeek
É triste ouvir que essas regras irracionais se aplicam aos programadores (isso é muito burro, você não acha? Eles precisam fazer um esforço extra para nos manter felizes em equilibrar isso)
Zekta Chan
9

Eu não ligo para isso:

1 - Gosto de ouvir minha música durante a codificação. Nem todo mundo quer ouvir Slayer explodindo em seus ouvidos.

2 - Fui criado pensando em olhar por cima dos ombros das pessoas muito rude e ficar muito desconfortável quando as pessoas fazem isso.

3 - Penso muito rápido e quando estou em um segmento de solução, quando começo a encontrar uma resposta, ser interrompido é a última coisa que preciso.

4 - Não posso fazer intervalos ocasionais para ler fóruns e grupos de notícias. Alguns podem achar inadequado de qualquer maneira, mas acho muito importante para minha melhoria contínua. Ocasionalmente, fico muito distraído, mas geralmente o benefício para o meu conhecimento aumentado supera qualquer impacto na minha produtividade.

Suponho que possa ser diferente em outras equipes, mas nas poucas vezes em que estou realmente perplexo com alguma coisa e PRECISO de ajuda, quase sempre sou o único que acaba apresentando a solução de qualquer maneira. Sou muito bom no que faço, mas acho que pode haver mais coisas acontecendo ... não tenho certeza, de qualquer forma, acho que estou melhor apenas resolvendo os problemas difíceis e, geralmente, melhor sozinho. Pode parecer arrogante, mas isso não a torna falsa.

Eu considerei que isso poderia realmente ajudar outras pessoas a aprender algumas das minhas técnicas, mas, levando em consideração o número 3, elas dificilmente poderiam fazer perguntas sem interromper minha linha de pensamento.

Tudo isso dito, eu tentei de vez em quando. Às vezes, traz benefícios menores, mas certamente não consigo vê-lo como algo consistente. O sistema de lobo solitário funciona para mim e parece funcionar para a equipe.

Edward Strange
fonte
2
@ Noah, baseado apenas no # 2, não sei se você entende o conceito de programação em pares. A idéia não é olhar por cima do ombro. A idéia, como eu a pratiquei, é compartilhar o PC para trabalhar em conjunto. Não é programação mestre / escravo, é programação ponto a ponto. Talvez o mais tarde é um termo melhor para ele ...
DevSolo
Isso é perfeitamente válido. Algumas pessoas só querem ficar sozinhas para descobrir por conta própria.
MattC
E também, +1 na coisa dos fones de ouvido. Eu detono metal e / ou transe o dia inteiro e fico bastante irritado quando as pessoas falam comigo sobre coisas. Eles não podem esperar até que minha música favorita termine? : D
MattC
2
@Noah: Lendo sua lista, parece que você está perdendo os pontos mais delicados da programação em pares. Não estou dizendo que é para todos, e certamente leva tempo e esforço mudando do modo cowboy para o modo compartilhamento. Assim como leva tempo aprendendo como fazer TDD corretamente (ou qualquer outra prática ágil para esse assunto).
Martin Wickman
1
continuação ...: Com "senior", significa que você pode não ser o responsável pelo código, mas ajudar um desenvolvedor mais jovem a sugerir. Também não sou o maior fã da ideia de programação em pares, mas vejo que provavelmente está fora da minha zona de conforto. Muitos desenvolvedores gostam de trabalhar sozinhos na estação, mas devo admitir que provavelmente aprenderia mais e encontraria soluções melhores de estar trabalhando em conjunto com outro desenvolvedor. Portanto, é realmente uma questão de conforto pessoal versus trabalhar de forma mais eficaz.
Anne Schuessler
5

A programação em pares é uma ótima maneira de começar ou fazer algo não trivial e difícil. Mais tarefas rotineiras e simples são melhor executadas sozinhas.

Participei de várias sessões de programação em pares, tanto em empresas iniciantes quanto em grandes empresas. Invariavelmente, acontecia apenas quando algo novo e difícil estava sendo aceito, ou seja, duas vezes por ano, na melhor das hipóteses, por algumas semanas. Com que frequência isso acontece na sua empresa?

9000
fonte
com menos frequência do que eu gostaria, com certeza.
ozz
5

Nós nunca chamamos assim, mas antigamente, era assim que sempre atacávamos novos problemas. Emparelhávamos para começar uma solução, mas, em seguida, geralmente começávamos a finalizar / limpar os detalhes individualmente. Não tanto mais. Parece se tornar cada vez mais raro.

Brian Knoblauch
fonte
3

Não é muito comum. Em todas as lojas em que estive nos últimos 10 anos, já vi uma vez. Na loja mais lenta e menos eficiente. Parece criar um ambiente barulhento e estressante. Uma pessoa acaba dirigindo e fala constantemente, impedindo a outra de pensar.

Reúna a equipe para revisões de código, seja em grupos ou em pares, e dê aos desenvolvedores seu próprio espaço. A longo prazo, será melhor do que buscar a última moda do Agile.

Servius
fonte