Por que o tio Bob sugere que os padrões de codificação não devam ser anotados se você pode evitá-lo?
Se você está perguntando as razões por trás da opinião dele, poderá ter uma resposta apenas se ele postar uma resposta aqui ( nossa opinião é irrelevante), no entanto ...
Por que não devo escrever um padrão de codificação?
Se você está perguntando se ele está certo : deixe-me ser o único impopular (até agora) a dizer que você não tem motivos para evitá-lo.
ESCREVA PARA BAIXO . No entanto, vou tentar explicar minhas razões ...
David sugeriu em um comentário que o ponto principal da resposta de Stephen não é por que você não deve escrever documentos, mas de que forma eles são. Se as diretrizes são formalizadas em ferramentas (não apenas na revisão manual de códigos), posso concordar (quando a lei não exige outra coisa). Observe que, infelizmente, as ferramentas não podem verificar tudo (a teoria da computação não é nossa amiga) frequentemente porque estão limitadas a uma unidade ou pacote de tradução específico ou seja qual for o seu idioma favorito chamar de limite .
No entanto, as palavras do tio Bob não me fazem pensar que ele está falando sobre isso.
Posso discordar desse especialista sênior? Sim, em quase todos os pontos do post citado (veja também a segunda parte desta resposta para obter detalhes). Vamos tentar entender o porquê (supondo que você já saiba que as diretrizes de codificação não são apenas sobre pequenos problemas de formatação ).
- Em algumas circunstâncias, os padrões de codificação por escrito são exigidos por lei.
- Eu leio a documentação e tenho certeza de que não estou sozinha. Os membros da equipe podem mudar com o tempo, o conhecimento não pode estar em uma base de código de 5 a 10 anos ou na mente dos membros da equipe. As organizações devem demitir pessoas que não seguem as diretrizes internas.
- Os padrões de codificação, depois de aprovados , não mudam com frequência e se você deseja saber sobre isso. Se os padrões foram alterados, sua documentação (em código) está desatualizada porque todo o seu código não segue o novo padrão. A reformatação / refatoração pode ser lenta, mas você sempre tem uma orientação autorizada por escrito a seguir.
- É melhor ler um documento de 5 páginas do que inspecionar 10 / 20K LOC para extrapolar uma regra (que você pode entender errado, BTW), sem dúvida.
- É irônico que alguém que escreveu muitos livros sobre princípios de design e estilo de codificação esteja sugerindo que você não escreva suas próprias diretrizes, então não é melhor se ele nos der um exemplo de código? Não, porque as diretrizes escritas não apenas lhe dizem o que fazer, mas também duas outras coisas que o código não tem: o que não fazer e razões para fazê-lo ou não.
A "programação auto-organizada gratuita" é boa para um ninja de 16 anos, mas as organizações têm outros requisitos :
- A qualidade do código deve ser concedida (e definida) no nível da empresa - não é algo que uma única equipe possa decidir. Talvez eles nem tenham as habilidades necessárias para decidir o que é melhor (quantos desenvolvedores, por exemplo, possuem todas as habilidades necessárias para revisar o MISRA ou até mesmo entender apenas cada regra?)
- Os membros podem ser movidos por equipes diferentes: se todos seguirem os mesmos padrões de codificação, a integração será suave e menos propensa a erros.
- Se uma equipe é auto-organizada, os padrões evoluirão com o tempo quando os membros da equipe mudarem - você terá uma enorme base de código que não segue os padrões atualmente aceitos .
Se você está pensando nas pessoas antes do processo , só posso sugerir a leitura sobre o TPS: os seres humanos são uma parte central do Lean, mas os procedimentos são altamente formalizados.
É claro que uma organização pequena com apenas uma equipe pode deixar que a equipe decida os padrões a serem adotados, mas deve ser anotada. Aqui, no Programmers.SE, você pode ler as postagens de Eric Lippert: Suponho que todos concordamos que ele é um desenvolvedor experiente; quando trabalhou na Microsoft, ele teve que seguir suas diretrizes escritas (mesmo que algumas regras possam estar erradas , não aplicáveis ou inúteis). para ele.) E Jon Skeet? As diretrizes do Google são bastante rigorosas (e muitas pessoas não concordam com elas), mas ele deve seguir essas diretrizes. É desrespeitoso para eles? Não, eles provavelmente trabalharam para definir e melhorar essas diretrizes, uma empresa não é feita por um membro (ou uma equipe) e cada equipe não é uma ilha .
Exemplos
- Você decidiu não usar herança múltipla e classes aninhadas em C ++ porque os membros reais da equipe não a entendem bem . Mais tarde, alguém que queira usar herança múltipla deve procurar o LOC inteiro 1M para ver se ele já foi usado. É ruim porque, se as decisões de design não estão documentadas, você precisa estudar toda a base de código para entendê-las. E mesmo assim, se não foi usado, é porque é contra o padrão de codificação ou é permitido, mas simplesmente não havia situações anteriores em que a herança múltipla se encaixava bem?
- No C #, você tinha métodos sobrecarregados para fornecer parâmetros padrão, porque sua base de código foi iniciada quando parâmetros opcionais não estavam disponíveis no C #. Em seguida, você alterou e começou a usá-los (refatorando o código antigo para usá-lo toda vez que você precisava modificar essas funções). Mais tarde, você decidiu que os parâmetros opcionais são ruins e começa a evitar usá-los. Qual é a regra que seu código diz? É ruim porque o padrão evolui, mas a base de código é mais lenta e, se for sua documentação, você está com problemas.
- Jon passou da equipe A para a equipe B. Jon precisa aprender um novo padrão; enquanto estiver aprendendo, ele provavelmente introduzirá erros mais sutis (ou, se tiver sorte, levará muito tempo para entender o código existente e tornar a revisão do código mais longa).
- A equipe A passa para uma base de código pertencente à equipe B. Ele possui padrões de codificação completamente diferentes. Reescrever? Adaptar? Misturar? Todos eles são igualmente ruins.
Tio Bob
Deixe-os evoluir durante as primeiras iterações.
É verdade, até que você não tenha um padrão e sua organização tenha atribuído a você a tarefa de criar um.
Deixe que eles sejam específicos da equipe, e não da empresa.
Não, por todos os motivos explicados acima. Mesmo que você pense em formalizar apenas a formatação de código (a coisa menos útil que você pode querer formalizar) ainda tenho memória de guerras intermináveis (e inúteis) sobre formatação. Não quero vivê-los repetidamente, defini-lo de uma vez por todas.
Não as anote se puder evitá-la. Em vez disso, deixe o código ser o modo como os padrões são capturados.
Não, por todos os motivos explicados acima (é claro, a menos que você refatore todo o seu código de uma só vez quando as diretrizes mudarem). Deseja deixar seu código como está? Como você inspeciona a base de código para entender as diretrizes atuais ? Procurando por idade do arquivo e adaptando seu estilo de codificação à idade do arquivo de origem?
Não legislar um bom design. (por exemplo, não diga às pessoas para não usarem o goto)
É verdade que as diretrizes devem ser curtas ou ninguém as lerá. Não repita o óbvio.
Certifique-se de que todos saibam que o padrão é sobre comunicação e nada mais.
Além disso, um bom padrão diz respeito à qualidade, a menos que você queira ter apenas um padrão sobre pequenos detalhes.
Após as primeiras iterações, reúna a equipe para decidir.
Veja o primeiro ponto e não esqueça que um padrão de codificação geralmente é um processo que levou muitos anos para ser desenvolvido e refinado: poucas iterações, talvez com desenvolvedores juniores? Realmente? Deseja confiar na memória de um membro sênior (se houver)?
Três notas:
- Na minha opinião, as desvantagens são mais graves em algumas linguagens do que em outras, por exemplo, em C ++, um padrão no nível da empresa é ainda mais necessário do que em Java.
- Esse raciocínio pode não se aplicar inteiramente (e os motivos do tio Bob podem ser menos extremos ) se você estiver trabalhando em uma empresa muito pequena, onde você tem apenas uma equipe pequena.
- Você é contratado (como equipe) e trabalhará sozinho com um novo projeto, depois o esquecerá e seguirá em frente. Nesse caso, você pode não se importar (mas seu empregador deve ...)