Programação em pares quando motorista e observador têm diferentes níveis de habilidade e experiência

30

Eu sei que a programação em pares é uma técnica ágil de desenvolvimento de software na qual dois programadores trabalham juntos em uma estação de trabalho. Um, o motorista, escreve o código, enquanto o outro, o observador, revisa cada linha de código à medida que é digitada.

Mas eu me pergunto: a estratégia ainda funcionará no caso. Por exemplo

  • se eles tiverem um nível de habilidade de programação muito diferente.
  • se um nunca experimenta no domínio do problema enquanto outro tem.
  • Ainda está bom se eles tiverem um baixo nível de habilidade de programação?

Você poderia sugerir a estratégia de programação de pares no caso acima?

Sakares
fonte
13
Certifique-se de que os dois concordam sobre quem tem o nível de habilidade mais alto e deve treinar o outro. Se esses papéis / níveis de habilidade não estiverem claros, a programação de pares provavelmente não funcionará e levará a conflitos.
Giorgio
Mas, se feito como você sugere, pode ser uma tremenda oportunidade de aprendizado.
MAWG

Respostas:

27

Supondo que a pessoa mais experiente do par tenha o temperamento para orientar a outra pessoa, emparelhar alguém com pouca experiência no idioma ou no domínio do problema com uma pessoa experiente facilitaria a transferência de conhecimento. A pessoa menos experiente teria um mentor para instruí-la sobre o idioma, o domínio, o aplicativo e as melhores práticas ou convenções da equipe.

Há um resumo interessante no wiki C2 sobre transferência de conhecimento usando programação em pares . A pessoa mais sênior, que foi contratada para servir como mentora da equipe, aprendeu muito com os programadores juniores e seu conhecimento até aumentou como resultado de ser associado a desenvolvedores de software mais juniores e menos experientes. Existem outras histórias sobre programadores especialistas que também estão emparelhados com especialistas em domínio.

Thomas Owens
fonte
Acordado. Eu tenho um júnior na equipe e a programação de pares aumentou drasticamente a qualidade de seu código. No entanto, revisar o código em pares também foi muito útil.
Sulthan
2
Você só precisa ter cuidado para que a pessoa mais velha não seja o motorista 100% do tempo.
HLGEM
13
@HLGEM Eu até argumentaria que a pessoa menos experiente deveria ser o motorista na maioria das vezes, enquanto a pessoa mais experiente está revendo o código para defeitos e estilo ou escrevendo casos de teste contra ele.
Thomas Owens
11
Eu concordo com @ThomasOwens; ter a unidade do parceiro menos experiente trará a sua 'experiência' mais rapidamente do que qualquer outro método, enquanto permite que eles compartilhem suas próprias idéias e insights com o parceiro mais sênior. Não demorará muito para que seus níveis de proficiência estejam muito mais próximos.
Eric Rei
11
Gostaria de saber se isso torna o desenvolvedor sênior mais obrigado a praticar o que pregam.
JeffO
16

Foi exatamente para isso que foi feita a programação de pares de casos de uso: compartilhamento de experiência entre barba velha e jovem gafanhoto.

Trata-se de um compartilhamento bidirecional: insetos ágeis têm muito a ensinar aos cérebros reumáticos.

mouviciel
fonte
11
Embora você provavelmente me considerar um, eu LOL'D sobre os 'cérebros reumáticas' ...
Marjan Venema
11
Não acho que o termo "história do usuário" possa ser aplicado aqui. Histórias de usuários descrevem requisitos de negócios para um software.
Konrad Rudolph
Sim, acho que ele quer dizer "caso de uso".
Jörg W Mittag
Voto a favor: nenhuma palavra sobre uma estratégia para lidar com os casos mencionados.
try-catch-finally
10

Quando fui promovido a minha equipe atual, eu era o novato no J2EE, mas era o especialista no domínio. Meu sênior (o novo líder da equipe) era habilidoso em J2EE, mas não na plataforma.

Acho que aprendi mais sobre Java2EE nesses 4 meses com programação em pares do que ler um livro e o líder da equipe também aprendeu sobre a plataforma.

A diferença de experiência entre os dois é a chave para emparelhar o imho da programação.

dierre
fonte
2
Acordado. Eu poderia imaginar programar em pares comigo mesmo e acho que seria inútil. A lacuna é o que cria as diferentes perspectivas relevantes para tornar os quatro olhos mais abrangentes no diagrama de possibilidades. Duas pessoas com habilidades e experiências idênticas veriam as mesmas coisas e não receberiam nenhum benefício.
Jimmy Hoffa
5

Descreverei minha experiência e tentarei extrair alguma "estratégia" dela.

Certa vez, programei um par com um não programador completo. Ele era especialista no assunto do produto de software que desenvolvemos. Pelo contrário, eu não tinha experiência no domínio do problema. E ele também era meu supervisor no momento (eu sei que isso pode parecer estranho :)

O principal benefício dessa metodologia foi que eu tive que explicar a implementação de muitas coisas do seu domínio de conhecimento, garantindo assim a exatidão da implementação e sua compreensão do processo, o que significava que ele entendia por que demorou esse tempo.

Outro benefício é o foco fácil na tarefa, sem distrações (ha-ha, imagine abrir o Twitter antes do nariz do seu chefe).

Às vezes, era bastante intimidador, pois até mesmo uma pausa para o chá se tornava uma "distração do trabalho" (não do ponto de vista dele; era apenas inconveniente pedir uma pausa e assim por diante).

Portanto, isso não é realmente uma programação em pares, pois ele praticamente não pôde revisar o código conforme foi digitado. No entanto, parecia ser uma estratégia sensata (pelo menos por algum tempo). No fim das contas, funcionou por causa da relativa simplicidade da metodologia de desenvolvimento (quero dizer, nenhuma técnica complexa de design de software como o OOP Patterns estava envolvida) e o assunto. Isso não funcionaria se tivéssemos que desenvolver um compilador, eu acho. Acredito que ainda poderia funcionar caso um observador não programador participasse do processo de desenvolvimento de pequenas peças claramente definidas. Digamos, não há problema em ele assistir à programação de uma função "computar o parâmetro X de Y e Z pelo algoritmo fornecido", mas pode não ser tão bom vê-lo assistir ao processo geral de design do sistema (significando o desenvolvimento da arquitetura de software, ou seja, a hierarquia de aulas,

Eu acho que funcionaria ainda melhor se ele tivesse algumas habilidades básicas de programador, pois eu não precisaria explicar "o que é uma matriz".

Espero que ajude :)

Michael Pankov
fonte
É uma boa explicação experiente!
Sakares
2

Na minha experiência, se ambos os programadores têm um baixo nível de habilidade, pode ser um problema. Nesse caso, geralmente há uma tendência para tentar a programação copiar e colar. Eu acho que pode ser uma boa idéia não emparelhar dois programadores iniciantes até que eles atinjam um nível específico determinado pela equipe.

Caso contrário, a programação em pares pode ser uma ótima idéia, supondo que, obviamente, dois indivíduos estejam prontos para compartilhar o que sabem. Além de ser uma ótima maneira de manter todos informados sobre o código-fonte, também atua como um bom lugar para novas idéias e discussões.

minusSeven
fonte
Desenvolvedores de baixo nível de habilidade têm menos probabilidade de copiar e colar ao programar sozinhos? Geralmente é o que acontece quando ninguém está assistindo.
JeffO
1

Desde que os membros da equipe se respeitem, a programação em pares pode ser benéfica, independentemente dos níveis de experiência dos programadores. Mesmo que um programador júnior apenas encontre alguns erros de sintaxe (que todos cometemos!) Diante do programador mais experiente, isso ainda poupa tempo na compilação de código.

Eu também acho que isso pode abrir a atitude de um programador em relação às capacidades de outros membros de sua equipe, especialmente se eles tiverem uma mente aberta e esperarem que todos possam lhe ensinar algo.

O Cavaleiro das Trevas
fonte