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?
Respostas:
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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:
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.
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.
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.
fonte
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.
fonte
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.
fonte
Embora eu possa entender a frustração associada ao código "estrangeiro", há duas oportunidades para você amadurecer com esse "obstáculo"
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.
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.
fonte
Acredito que, quanto maior a equipe, mais importantes os testes unitários se tornam.
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.
fonte
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.
fonte
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?
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.
fonte