E todas essas regras de codificação?


10

Sempre apoiei a idéia de ter regras de codificação para desenvolvedores em uma empresa ou em um projeto específico. Especialmente se a empresa tiver tamanho maior que 10. Quanto maior a empresa, maior a necessidade. Sei que muitas pessoas vão discordar, mas vi projetos que não os têm e o código parece um desastre total.

O verdadeiro problema disso é como fazer com que aqueles que não gostam de usar colchetes nas instruções if ou usem a mesma cadeia de conexões em todos os lugares do código ou o que seja, usem as regras de codificação sem fazê-las se oporem. a ideia?


3
Se você estiver usando C # como idioma, use StyleCop. Se estiver usando Java ...
Job

@ Job - Sim, estamos usando principalmente C #. StyleCop parece interessante.
TheBoyan 28/03

Respostas:


9

Envolva-os na solução de um problema e não na luta contra as regras. Pessoalmente, prefiro a idéia de "guias de estilo", "padrões de codificação" ou algo semelhante, na esperança de impedir a reação "regras = más".

Mas mesmo que isso aconteça - costumo pensar que as regras estão em vigor por um motivo, e a maneira de levar as pessoas obstinadas a se virar é fazê-las perceber que, seguindo as diretrizes, elas estão ajudando a tornar o código mais fácil de implementar. leia para todos.

Às vezes, a pressão dos colegas é a melhor solução para isso.


No papel de advogado do diabo aqui, sempre é possível que as regras estejam completamente erradas (por exemplo, algo criado para um projeto passado, mas é um fardo para os desenvolvedores no projeto atual) - portanto, ter um processo de revisão / revogação de regras - mesmo que é raramente usado - também pode ser útil para tranquilizar as pessoas de que as regras são uma orientação útil e não uma imposição à liberdade do desenvolvedor.
Beekguk 29/03

Absolutamente - e eu acho que se você seguir o conselho de se concentrar no porquê de precisar da regra, se descobrir que não precisa da regra, saberá que a equipe ou a pessoa veio com uma mentalidade aberta, em vez de apenas sendo defensivo devido a um processo inexplicável de regras.
bethlakshmi

6

No meu trabalho, usamos as três soluções a seguir:

1) Adote um verificador de estilo de código, como o excelente Checkstyle (para Java) ou StyleCop (para C #). Essas são ferramentas de fácil configuração que podem destacar automaticamente desvios de estilo / regra de codificação. Dá a todos um terceiro neutro para determinar o que é e o que não é aceitável.

2) Adote um modelo de código de reformatação de salvamento automático (aqui está um exemplo usando o Eclipse) (e outro para o Visual Studio) que formatará automaticamente seu código ao salvar. Isso é ótimo para permitir que alguém codifique da maneira que desejar, mas tenha todo o código formatado da mesma maneira em salvar / confirmar. Eu realmente gosto deste e nosso código nunca foi tão consistente.

3) Revisões de código. Espero que você esteja fazendo isso de qualquer maneira, mas uma coisa que eles devem destacar é onde as regras / estilos de codificação estão violando as convenções.

Além do exposto, é importante que todos estejam no mesmo barco e concordem com os estilos / regras para os quais estão trabalhando. Deixe claro que você não obterá o acordo de todos em tudo, mas peça um compromisso da equipe para se manter fiel ao que a equipe decide. Ocasionalmente, revise os estilos / regras escolhidos para dar conta da experiência do mundo real usando-os e a rotatividade da equipe.


Você pode configurar alguns sistemas de controle de revisão para aplicar coisas como Checkstyle no check-in. Se você fizer isso, comece com as regras mais críticas e adicione regras mais exigentes posteriormente.
BillThor 29/03

4

O verdadeiro problema disso é como fazer com que aqueles que não gostam de usar colchetes nas instruções if ou usem a mesma cadeia de conexões em qualquer lugar do código, ou qualquer outra coisa,

Eles estão sendo "obstinados" por não usar colchetes ou isso é uma solicitação "obstinada"?

Escolha suas batalhas. Duvido que este seja um dos que vale a pena escolher. Eu não gostaria de trabalhar em qualquer lugar que esperava em qualquer lugar próximo desse nível de detalhe em "código de primeiro check-in". Este é um indicador de bandeira vermelha que a equipe não entende de refatoração.

OO 101 : "Refatorar quando o produto fizer o que precisa". Não antes.


Os colchetes que não usam foram apenas um exemplo :) embora eu trabalhe para uma grande empresa que tinha um livro com mais de 200 páginas de regras de codificação e esse era um deles. De qualquer forma, tenho certeza de que você concorda comigo que alguém que usa deliberadamente a mesma cadeia de conexão (um exemplo novamente) repetidamente no código apenas porque é preguiçoso demais para colocá-lo em um arquivo de configuração e ler a partir daí, precisa da atenção e é preciso saber lidar com esse tipo de situação.
TheBoyan

2

É muito difícil ficar no ombro de todos os desenvolvedores em grandes equipes, certificando-se de que eles colocam chaves onde você acha que deveriam ir - confie em mim;).

Se algo que você realmente sente está dificultando o seu desenvolvimento, precisará de um "gatekeeper". Não permita que as pessoas façam check-in sem uma revisão de código, por exemplo. Peça ao arquiteto técnico ou ao líder da equipe que revise o código e o rejeite até que "corrija" o estilo do código. Em breve, eles se cansarão disso e se ajustarão às regras, possivelmente, apenas enquanto estiverem sendo verificados.

Obviamente, algumas empresas tiram privilégios de check-in completamente de programadores juniores. Quando eles finalmente aprendem as regras de codificação das empresas, obtêm o privilégio.


2
Se o posicionamento da chave é o seu maior problema de qualidade, acho que você tem muita sorte. Esse é o nível certo para se concentrar?
Bo Persson

Puramente um exemplo retirado da pergunta. O princípio é que as "diretrizes" de design de código, como bethlakshmi diz abaixo, são apenas isso - diretrizes. Se você está realmente preocupado com a forma como eles são seguidos, é necessário que haja pontos no processo para lembrá-los / ensiná-los / aplicá-los.
Martin Blore 28/03

Mas aparelhos nos quais você acha que eles deveriam ir ... Isso fala muito. Penso que existem aspectos mais fundamentais da legibilidade / padrões de codificação do que a colocação de chaves. Concordo que todos no projeto devem seguir o mesmo padrão, mas um sobre o outro não importa muito aqui. Talvez você possa deixá-los "vencer" a batalha da colocação de chaves em troca de aceitarem outras sugestões sobre os padrões de codificação? Não apenas isso, mas eles se sentirão parte da solução se sua idéia de colocação de aparelhos estiver dentro dos padrões.
Gilles

11
Exatamente. Desisti de tentar convencer um desenvolvedor a fazer colchetes em sua própria linha, em vez de colchetes embutidos, em troca de ele aprender SOLID e TDD ... um ótimo negócio que eu diria;).
Martin Blore 28/03

11
"É claro que algumas empresas tiram os privilégios de check-in completamente dos programadores juniores. Quando finalmente aprendem as regras de codificação das empresas, obtêm o privilégio". - esta é a única maneira de fazê-lo quando importa.
Ocodo 30/03

2

Eu acho que você está falando sobre problemas de níveis muito diferentes:

como fazer aqueles que não gostam de usar colchetes nas declarações if,

Isso é principalmente um problema de estilo / legibilidade, a menos que haja um problema explícito de precedência do operador. Este último não deve ser muito comum e, de qualquer maneira, é testável por unidade, portanto, fácil de corrigir. O primeiro pode facilmente regredir para uma Guerra Santa, com pouco a ganhar, mas graves consequências negativas para o moral das equipes. Portanto, tenha cuidado - apenas use regras testadas e aceitas por pelo menos algumas equipes / comunidades e que comprovadamente funcionem.

ou use a mesma cadeia de conexões em qualquer lugar do código,

Se você quer dizer constantes mágicas, esse é realmente um problema de manutenção (além de potencialmente de segurança) e, como tal, IMHO qualquer desenvolvedor experiente entenderá e aceitará que é uma coisa ruim.

ou o que seja, para usar as regras de codificação sem fazê-las se opor à idéia?

Você não pode forçar as pessoas a concordar com as regras de codificação - sua única chance é chegar a um entendimento e aceitação comuns dos membros da equipe por meio de discussão e debate (às vezes feroz) . Você precisa usar argumentos lógicos e convincentes , mostrando o valor por trás de cada regra e explicando como a seguir ela pagará pelo inconveniente de ajustar hábitos arraigados. Por outro lado, esforce-se para tornar a transição o mais fácil possível , introduzindo, por exemplo, a formatação automática de código no check-in, de acordo com as regras aceitas.

Ainda assim, às vezes você só precisa aceitar que as pessoas tenham opiniões diferentes , portanto, as regras de codificação que todos podem aceitar serão tolerantes em certos aspectos. Aceite isso e foque nas áreas em que você pode melhorar as coisas com menos esforço.


"introduzindo a formatação automática de código no check-in, de acordo com as regras aceitas" ... isso parece interessante, outras idéias sobre onde eu posso encontrar algo assim.
TheBoyan 28/03

@bojanskr, a maioria dos IDEs convencionais hoje em dia suporta regras de formatação de código em menor ou maior grau e pode formatar automaticamente seu código ao salvar ou fazer check-in. Para Java, tanto o Eclipse quanto o IntelliJ, acho que o NetBeans também, mas não tenho muita experiência com ele. Para C #, consulte o comentário de @ Job acima. Mas também existem ferramentas independentes, como Artistic Style for C / C ++. E a maioria dos SCCs que conheço suporta a execução de scripts / gatilhos específicos do usuário, por exemplo, no check-in.
Péter Török 28/03

2

Envolva-os no estabelecimento de regras. Isso geralmente ajuda a incentivar as pessoas a segui-las.


1

É para isso que serve a revisão de código. Os revisores de código não devem deixar o código passar que não atenda aos padrões. Certifique-se de não relaxar as regras para correções urgentes. Ter que refazer algumas vezes sob pressão para fazê-lo corrigirá aqueles que relutam em fazer seu trabalho corretamente na primeira vez.


1

A mesma cadeia de conexão em todos os lugares? A solução é refatorar até remover toda a duplicação. Os codificadores de copiar e colar devem ir para a prisão do programador. (Não ria! Steve Ballmer é o diretor.)

Mas o verdadeiro problema aqui é o seu verbo "make" . Você não pode fazer os programadores fazerem nada e, se o fizer, estará desperdiçando a característica mais valiosa: o profundo envolvimento intelectual resultante do trabalho em algo que lhe interessa.

Do jeito que eu resolveria isso:

  1. Insista para que a equipe tenha um padrão de codificação comum. Pode ter 5 linhas, mas todos precisam concordar.
  2. Toda vez que você percebe um argumento, insista em que ele o monte e o coloque no padrão de codificação. Se você perceber que as pessoas reformatam as coisas de um lado para outro, trate isso como um argumento.
  3. Sempre que um item padrão for acordado, verifique se há uma ferramenta que limpe toda a base de código de uma só vez.
  4. A cada dois meses, analise o padrão de codificação e veja quais ainda são verdadeiros e relevantes. O padrão apenas documenta o que as pessoas estão fazendo. E não faz sentido manter itens no padrão que se tornaram óbvios.

A programação é um esporte de equipe ou um trabalho artístico coletivo. O que as pessoas concordam não importa tanto quanto elas concordam e são boas em chegar a novos acordos conforme necessário.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.