Práticas recomendadas para trabalhar com vários programadores

9

Eu acho que a maioria dos programadores prefere trabalhar sozinho em projetos, mesmo quando isso não é viável. Eu prefiro trabalhar sozinho, mesmo fora dos projetos de programação. Ao trabalhar com outros desenvolvedores, normalmente acho que

  • Não gosto da formatação ou das convenções (como nomes de variáveis ​​ou métodos)
  • Eu não tenho uma boa compreensão de como o código que eles escreveram funciona, o que eu teria se eu mesmo escrevesse
  • Eu acho que existe uma maneira melhor ou mais eficiente de implementar algo que eles escreveram

Quais são as melhores maneiras de superar esses problemas e quaisquer outros problemas de equipe semelhantes para um projeto com 4-5 programadores?


fonte
Muito boa pergunta. Eu tenho pensado a mesma coisa; especialmente quando você tem alguém acima de você que, por falta de muitos outros termos, é incompetente.
"melhor ou mais eficiente" - talvez, mas por que você não descobriu antes que eles começassem a fazer uma implementação pior e menos eficiente?
-1: Esta questão é muito ampla.
Jim G.
Observe também que é SUA responsabilidade fazer um esforço para entender o código de outras pessoas.

Respostas:

20

Existe apenas uma maneira de superar esses problemas. É a saber "Comunicação". Os problemas que você descreve devem-se ao fato de os programadores não se comunicarem. Se você tivesse discutido qual seria a melhor ou mais eficiente maneira de resolver uma tarefa, ela seria implementada da maneira que você deseja. Além disso, você pode concordar com formatação e convenções.

Para entender a parte do código, é necessário revisar semanalmente o código em que você discute o código de todos. Em seguida, você pode fazer perguntas enquanto eles apresentam seu trabalho, e isso ajuda bastante com o aumento da qualidade de código de todos.

mhenrixon
fonte
2
+1 para comunicação. Tantas perguntas sobre aqui poderia ser a resposta com um simples "Bem falar com eles sobre isso"
Ian
Parece-me que o OP não apenas tem um problema de comunicação, mas parece incapaz de aceitar que há outras maneiras de fazer coisas além da preferida e se recusa a trabalhar em qualquer outro sistema que não o preferido.
26711 jwenting
A programação +1 (ou qualquer trabalho mental) representa cerca de 5% da produção real, 35% da solução lógica de problemas e 60% da solução social.
JF Dion 31/05
9

Adoro trabalhar com uma equipe. A dificuldade é que, para trabalhar efetivamente com uma equipe, todos os membros da equipe precisam realmente trabalhar juntos, e não apenas todos trabalham separadamente no mesmo projeto.

Você precisa discutir coisas como por que você prefere uma convenção de codificação em detrimento de outra e, em seguida, todos concordam com um conjunto de convenções, sejam eles seus favoritos pessoais ou não. Quaisquer que sejam, você se acostumará com eles e apreciará a consistência.

Você deve revisar e criticar o código um do outro. Na verdade, você provavelmente deveria estar programando em pares a maior parte do tempo, mas duvido que acredite em mim, então revise o código um do outro. Nenhum trecho de código deve ser considerado "concluído" até que outro programador o revise e garanta que seja compreensível para a próxima pessoa que precisar mantê-lo.

Procure desculpas, converse entre si e faça perguntas enquanto codifica. Se você estiver tentando escolher entre 2 ou mais maneiras de atacar um problema, mesmo se achar que sabe a melhor resposta provável, faça uma verificação de sanidade de um dos outros desenvolvedores. Vocês dois aprenderão algo com a conversa e obterão mais um conceito compartilhado de como o código está sendo organizado.

Faça uma breve reunião todos os dias, para que todos possam dizer o que estão fazendo e como estão as coisas. Dessa forma, todos terão uma melhor noção do status de todos os pedaços de trabalho que estão acontecendo e como eles estão sendo abordados.

Steve Jorgensen
fonte
7

Você não possui o código - como grupo, pode escolher convenções de codificação ou não. Você nem sempre consegue o que quer, apenas aprende a se adaptar.

Você nunca se sentirá tão confortável com o código de outras pessoas. No XP, esse é o motivo da programação do push pair. Mas normalmente a melhor maneira (como em todo o resto) é cavar e aprender.

Se você tiver um código mais eficiente ou melhor (Readable é MUITO mais importante que eficiente - veja o ponto anterior), então você deve discuti-lo com eles.

Esta é uma carreira e você não possui o que faz. Você terá que trabalhar com muitas pessoas, se acostumar com isso ou ser tão bom que poderá fazer tudo sozinho e financiar seus próprios projetos.

É uma carreira, não é divertida - se seu trabalho foi consertar telhados no meio do verão e eles dizem para você fazer de uma maneira que você não gosta, porque é mais fácil fazê-lo dessa maneira como uma equipe, basta isto. Período.

Bill K
fonte
Concordo com tudo, exceto "Legível é MUITO mais importante do que eficiente" isso NÃO é verdade para o código sql do banco de dados, eficiente em um banco de dados é crítico. Se você está acostumado a escrever código eficiente, ele se torna mais legível rapidamente.
HLGEM
@HLGEM O código de banco de dados ineficiente é terrível, mas o código precisa ser ilegível para ser eficiente ou você pode torná-lo legível e eficiente? Eu não disse ignorar a eficiência em todos os casos, e também não disse ser um programador estúpido (como usar uma matriz para uma ordenação por inserção).
Bill K
Eu não diria que é ilegível, mas a maioria das maneiras mais eficientes de escrever consultas geralmente parece mais complexa para as pessoas que não são especialistas em banco de dados; portanto, elas tendem a escrever código mais "elegante" e com problemas de desempenho.
HLGEM
@HLGEM Não gosto do termo "Elegante" porque geralmente significa conciso, que não está relacionado a legível. Suponho que seja melhor dizer que seria "A solução mais legível que se ajusta aos requisitos do problema", onde o desempenho pode ser incluído nos requisitos. Meu argumento foi que, se o desempenho não estiver nos requisitos (se atender aos requisitos), a legibilidade deve ter precedência sobre qualquer outra coisa, mas, é claro, deve atender aos requisitos.
Bill K
Engraçado, também não gosto do termo elegante. Acho que muitas vezes estamos sacrificando a eficiência e a eficácia do usuário para satisfazer a visão de alguém de quão bonito o código deve ser. A elegância não deve superar a eficiência e a eficácia. O desenvolvedor analisa esse código, talvez várias horas fora do ano, o usuário executa esse código todos os dias várias vezes ao dia. Não devemos escrever apenas para os valores estéticos do desenvolvedor. Eu gosto muito mais da sua definição. Com sua explicação adicional, concordo totalmente com você.
HLGEM
5

Pergunte a eles "por que" , mas educadamente. Os programadores geralmente ficam mais do que felizes em expor seu raciocínio e, a menos que a resposta seja "É assim que sempre fiz", é provável que você aprenda algo útil. Por exemplo, a diferença entre notação húngara "boa" e "ruim", as virtudes de diferentes convenções de nomenclatura e por que o algoritmo escolhido é bom o suficiente para a tarefa em questão.

l0b0
fonte
3

Eu só tenho alguns pensamentos. A maioria das outras respostas parece ter abordado bastante bem o aspecto da comunicação desse problema, mas eu gostaria de abordar cada ponto que você fez com um ou dois pensamentos:

Não gosto da formatação ou das convenções (como nomes de variáveis ​​ou métodos)

Este é um conceito que você realmente não pode pagar. Provavelmente, existem 20 pessoas por aí que não gostam de sua formatação ou convenções. Se você não fez parte do processo de decisão, precisa superar isso e aprender a se adaptar. Se você faz parte do processo (ou pode ser no futuro), leve suas preocupações aos outros desenvolvedores. Não se queixe apenas, no entanto. Já existem soluções / alternativas mapeadas e prontas para o uso.

Eu não tenho uma boa compreensão de como o código que eles escreveram funciona, o que eu teria se eu mesmo escrevesse

Não, você não faria. Se você está fazendo essa afirmação, não trabalhou muito em um ambiente de mudanças em ritmo acelerado. Eu tenho um código que escrevi há 6 meses que não consigo entender apenas olhando para ele. Se não fosse pelo fato de ter sido escrito com algumas das minhas peculiaridades pessoais, eu nem saberia que era minha. Pode ser necessário mais esforço para reprojetar o trabalho de outra pessoa, mas não se engane, você o reprojeta para entendê-lo mais tarde, independentemente de quem o escreveu.

Eu acho que existe uma maneira melhor ou mais eficiente de implementar algo que eles escreveram

Impressionante. Toda equipe adora melhorias e eficiência. Leve isso para seus colegas desenvolvedores. Se houver um desenvolvedor ou arquiteto sênior nomeado acima de você, informe-o. Compartilhe suas idéias com a equipe aberta e livremente. Esteja preparado para aceitar as idéias dos outros também. Eu acho que muitas pessoas dizem as mesmas coisas que você está dizendo aqui, mas o verdadeiro significado delas é "Meu caminho é melhor e você pode simplesmente chupá-lo. Faça do meu jeito ou vocês são todos idiotas". Não seja esse cara. Esteja tão disposto a mudar quanto espera que outras pessoas o sejam.

Joel Etherton
fonte
1

Eu já pensei nessas questões por um tempo agora. Sou líder de equipe e estou trabalhando com 2 outros programadores. Um dos programadores tem um estilo muito parecido comigo - não o mesmo, mas próximo o suficiente. Não acho que isso justifique mudanças da parte dele. Qual é o ponto de começar algo em prol de diferentes convenções de tabulação ou nomes de variáveis.

O outro desenvolvedor é um programador de CA (somos programadores de vb.net trabalhando em um projeto .net). Ele escreve código vb como se fosse um código c (suponho que se as funções fossem revertidas, escreveríamos um código c como se fosse vb). Eu tive alguns problemas com isso. Mas depois que pensei nisso por um tempo. Os problemas que tive foram realmente apenas uma sensação desconfortável que esse código de aparência estranha me deu. Não havia realmente nada de errado com o código dele. Seu código é limpo e funciona muito bem. Além disso, o código será abstraído por trás da interface da classe que ele expõe para o restante do programa. Portanto, no final, o estilo de codificação realmente não importa para nós. Contanto que o programa esteja correto e os comentários sejam razoáveis. Somos todos inteligentes o suficiente (pelo menos espero), para que a depuração não seja tão difícil.

Agora, seria uma história diferente se ele estivesse codificando em c # e estivéssemos codificando em vb.net. Ainda poderíamos conseguir, mas seria mais difícil.

Pessoalmente, acho muito mais importante que os membros da equipe usem uma convenção de codificação com a qual estejam felizes e à vontade. Isso significa que eles estão codificando produtivamente, em vez de se referir a algum guia de estilo que informa quantas guias precisam para recuar uma função.

Isso não significa que eles são livres para fazer o que desejam com os casos de uso ou requisitos de aplicativos - eles são definidos pelos clientes.

bluebill
fonte
1

Oh, por favor! Os padrões de codificação são como argumentos para o aborto: todo mundo tem um (exceto eu, não tenho uma opinião real sobre o aborto, a não ser se você não quer um, não o tem), todo mundo pensa que o dele é o absolutamente correto e todo mundo pensa todo mundo fede.

Eu uso métodos diferentes porque achei que eram mais fáceis de ler. Por exemplo, um bloco de teste em PHP, escreverei assim:


  declarações if (condition) { ;
} [opcional else or elseif]

Mas se eu escrever um bloco em Pascal, farei o seguinte:

se (condição)
  começar

  fim;

Depende do idioma, para mim é mais fácil ler dessa maneira para ambos. Mas se alguém quiser colocar o {na linha após o if no PHP, não tenho realmente nenhum problema.

Paul Robinson
fonte
1
Você deseja que todos na sua equipe usem o mesmo padrão para evitar poluir as diferenças de controle de versão com colchetes pulando nas linhas.
0

Embora eu possa entender a frustração associada ao código "estrangeiro", há duas oportunidades para você amadurecer com esse "obstáculo"

  1. Todo desenvolvedor precisa aprender a enfrentar a "guerra de chaves", e com isso quero dizer encontrar uma maneira de obter um padrão de codificação comum. Aprender a articular claramente por que você prefere certas técnicas, mas mais importante aprender a ouvir por que outra pessoa tem uma visão diferente. Em seguida, aprenda a deitar alguns de vocês para o bem da equipe / projeto.

  2. No entanto, a longo prazo, o que terá um valor muito maior para você será o aprendizado de ler o código de outras pessoas. Para este, você apenas precisa empurrá-lo e não evitá-lo. Você pode até achar que aprende muito.

Stephen Bailey
fonte
0

Acredito que, quanto maior a equipe, mais importantes os testes unitários se tornam.

  • Verifique se o código que você escreve está coberto por testes de unidade.
  • Tente convencer os outros membros da equipe a escrever testes.

Conviver com o código (seu e do outro) é mais fácil quando você tem testes que cobrem o código. Isso é verdade mesmo para o código que você não gosta.

codeape
fonte
0

A melhor resposta é encontrar uma equipe cujo processo de pensamento corresponda ao seu, para que você não precise se comprometer.

Uma resposta realista é lidar com isso da melhor maneira possível. Se é apenas uma questão de estilo de código diferente (por exemplo, chaves entre linhas e linha seguinte), não é grande coisa, embora eu entenda como é frustrante se as pessoas não estão seguindo as diretrizes para o idioma que estão usando. Se for algo como padrões de codificação totalmente sem sentido que não fazem sentido (por exemplo, notação húngara onde não é necessário, SoMeWeIrDnAmInGsTyLe, todas as variáveis ​​não devem ter mais de 8 caracteres, etc.), tente alterá-lo, porque é óbvio que a pessoa que está escrevendo o código não tem idéia ou apenas cultiva carga com o que existia antes, em vez de ser inteligente o suficiente para querer melhorá-lo.

Wayne Molina
fonte
-1

Primeiro, adapte meu estilo de codificação re: espaço em branco. Há muito tempo, um palhaço escreveu um artigo de piada sobre práticas recomendadas, fornecendo exemplos de código com 12 guias completas de espaço em branco em todos os lugares que podia; tornando impossível a leitura do código sem uma tela ampla de 12 pés ou no tamanho de fonte .0001. Muitos programadores assumiram que era credível e começaram a fazê-lo - mesmo que obviamente não fosse uma boa prática. Me deixa louco. Vamos lá pessoal, eu digo, você é mais inteligente que isso. 50% ou mais de espaço em branco na página de 240 colunas não faz sentido. Coloque o primeiro colchete na mesma linha da assinatura da função ou da classe (com um espaço ou dois, não uma guia ou duas no meio). Use 3 espaços para recuar para os níveis de código (5 se você tiver um membro da equipe parcialmente cego). Em seguida, use uma linha em branco aqui e ali no código para colocar as coisas em blocos lógicos menores.

Aqui está outro exemplo de algo que é estúpido. Primeiro, vou lhe dizer que isso não vem de uma inteligência inexperiente. Está em um código muito bom de um cara que foi capaz de obter uma técnica muito avançada trabalhando enquanto a maioria do resto do mundo ainda está coçando a cabeça sobre isso. Isso é o que é frustrante para mim. Por que bons programadores estão tão preocupados em formatar seu código?

    for (Iterator<Byte> iterator = collection.iterator(); iterator
            .hasNext();) {
        byteArray[i++] = iterator.next();
    }

Agora, basta olhar para o formato da condição for. Se você realmente pensa sobre isso, não é um lugar totalmente ilógico para colocar uma quebra de linha? Por um lado, eu tinha muito espaço para ver o todo por ... {em uma linha. (Felizmente, esse cara não usa várias guias para recuar.) Mas se ele absolutamente não podia viver sem quebrá-lo, por que há no meio de uma especificação de função? Há um delimitador perfeitamente bom antes disso - o ponto-e-vírgula - que faria mais sentido como um ponto de interrupção. Meu voto é colocar toda a condição e a abertura {(que acompanha o for) na mesma linha. Ele também termina bem - fácil de combinar a chave de fechamento com o "for" que abriu. (Algumas pessoas - e ferramentas (isso é redundante?) - também gostam de colocar isso em lugares estranhos.)

Segundo - anote o foco da experiência de cada programador e, se houver uma diferença significativa, verifique se isso reflete em qual parte do código cada programador trabalha. Um especialista em controle industrial de robótica, um engenheiro que trabalha principalmente em bits matemáticos complexos e o cara com o diploma de CS que se impressiona com a construção de código totalmente obscura (quanto menos compreensível, mais sofisticado, certo?) São todos vai escrever código de forma diferente. Onde houver diferenças significativas, interrompa o trabalho para que cada força individual corresponda ao trabalho.

Quando não houver diferenças, concorde com o estilo de codificação e, em qualquer caso - revisão de código, revisão de código, revisão de código. Francamente, eu já passei por um monte de código esparguete desleixado em minha vida (12 vezes na linha em depuração e alterações pelo grupo de manutenção, ou o resultado da integração de olhos arregalados) e estava no meu caminho para ser um especialista em código após 2 minutos conversando com o último sujeito que trabalhou nele. (Observação: de fato, há um ponto em que é melhor reescrever o código do que continuar adaptando.)

Pessoalmente, prefiro trabalhar em casa sozinho. Eu nunca conheci um programador que prefere ou trabalhe melhor em um ambiente cúbico cercado por muitos outros programadores, discussões e interrupções. Mas você precisa se acostumar a trabalhar em equipe, e isso significa reservar um tempo para se reunir e discutir (não brigar) o que está fazendo. Na verdade, isso faz parte do trabalho - é mesmo. Muito melhor aceitá-lo e fazê-lo de forma sistemática, eficiente e eficaz. E enquanto estamos nisso - também faz parte do trabalho gastar tempo transferindo conhecimento e informações para as pessoas que escrevem a documentação (algumas das quais você pode precisar escrever por conta própria). E quando você tiver experiência suficiente para aumentar seu nível de responsabilidade, poderá até conversar com mais frequência com gerentes e pessoas em marketing etc.

Codificar sozinho é um hobby. A engenharia de software profissional é uma ocupação multifacetada.

Roger F. Gay
fonte
E outra coisa; quando você tem apenas uma série de chaves de fechamento, não faz sentido colocar linhas em branco entre elas.
Roger F. Gay
1
"uma série de chaves de fechamento" -> candidato a fatorar o método nomeado.
Por quê? É muito fácil terminar com 3; como quando o último bit de um método é condicional e feche seu método e classe.
Roger F. Gay
@ Roger, você nomearia "três em linha" uma série?
Sim, e eu já tenho.
Roger F. Gay