Um padrão de codificação ainda é necessário?

13

Eu sei que ficou provado que um padrão de codificação ajuda enormemente. No entanto, existem muitas ferramentas e IDEs diferentes que serão formatados para qualquer padrão que o programador preferir. Desde que o código seja limpo / comentado (e não seja uma bagunça de espaguete), não vejo a necessidade de um padrão de codificação.

Existem argumentos para o desenvolvimento de um padrão de codificação (não temos um, mas eu estava pensando em criar um)?

SomeKittens
fonte
Se você decidir implementar um padrão de codificação, considere aplicá-lo durante a integração contínua.
precisa saber é o seguinte
10
Todos na equipe devem usar o mesmo IDE?
21412 Keith Thompson
10
Nenhuma quantidade de reformatação de código substituirá uma diretriz como Não sobrecarregue os operadores, exceto em raras circunstâncias especiais. . Se seus padrões de codificação são principalmente sobre a forma como seu código é formatado, você precisa de melhores padrões.
Caleb
Nem todas as pessoas também usam um IDE, eu uso o Acme, por exemplo.
Disoco 24/09/12

Respostas:

33

No entanto, existem muitas ferramentas e IDEs diferentes que serão formatados para qualquer padrão que o programador preferir.

Boa sorte com isso. Minha experiência, há um pequeno número de ferramentas (zero!) Que podem reformatar adequadamente o código do formato X para o formato Y. Existem muitas coisas que atrapalham. Abas vs espaços, instruções com várias linhas, etc. Veja a implementação do GNU dos arquivos de biblioteca padrão do C ++. O que você pode fazer é fazer com que o seu IDE faça é usar sempre espaços em vez de guias e simplesmente não se incomode em reformatar o código externo. Agora, seu código tem a aparência que você gosta e o código estrangeiro é a aparência que o autor original escreveu.

Um estilo de indentação específico é a última coisa que um padrão de codificação deve especificar. Isso está prestes a começar uma guerra religiosa de programação. Na IMO, um padrão de codificação deve especificar um conjunto razoável de estilos de indentação aceitáveis, mas deixar os detalhes específicos para os autores de um pacote. O estilo de indentação é, ou deveria ser, uma pequena parte de um padrão de codificação. Regra número zero dos padrões de codificação: não se preocupe com as pequenas coisas. O estilo de recuo é uma coisa pequena.

Coisas maiores:

  • Como nomeio as coisas?
  • Certas partes do idioma estão fora dos limites?
  • O código precisa ser compilado e com que configurações do compilador?
  • O código precisa passar determinadas métricas?
  • Que tipo de teste é necessário?
  • Que tipo de documentação é necessária, tanto no código (comentários) quanto em outros lugares?
  • Mais importante, como obtenho uma renúncia ao padrão?

Adenda
Talvez ainda mais importante seja o que não colocar nos padrões de codificação. Tópicos como escrever requisitos não pertencem aos padrões de codificação. Detalhes sobre o teste também não pertencem. Um projeto não deve usar os padrões de codificação como substituto do plano de gerenciamento do projeto, do plano de gerenciamento de testes, do plano de verificação e validação etc. O objetivo dos padrões de codificação é melhorar a segurança, a qualidade, a compreensibilidade, a manutenção, e outras "ilidades". Existem várias maneiras de garantir que isso não aconteça. Apenas alguns: tornando os padrões um livro tão complexo quanto as leis tributárias de alguns países, incitando a programação de guerras religiosas, tendo convenções de nomes ruins.

Os padrões de codificação podem ter conseqüências não intencionais. Exemplo: Alguns tolo de um engenheiro de projeto vai interpretar a "nenhuma mágica números governar" para significar que if (index == 0) {...}e for (ii = 0; ii < 3; ++ii) {...}deve ser alterado para if (ZERO == index) {}e for (ii = ZERO; ii < NUMBER_OF_DIMENSIONS_IN_THE_UNIVERSE; ++ii) {...}não rir. Eu já vi isso acontecer. Hoje em dia, quando escrevo um padrão de codificação, é uma "diretriz de números não mágicos", e não uma regra para combater esse tipo de tolice.

O padrão de codificação não é a defesa número um contra más práticas de programação / práticas perigosas de codificação. A revisão do código é. Apesar de muitos anos de automação, ainda não há nada melhor do que um conjunto subjetivo de olhos humanos olhar e julgar um pedaço de código.

David Hammen
fonte
+1 para uma ótima lista - tornando-a minha resposta favorita. Especialmente código fora dos limites, avisos do compilador, testes e documentação. Mas ainda acho que tabs vs. espaços e recuos são importantes. Outra pessoa mencionou o pesadelo que isso causa quando diferentes alterações no controle de origem.
GlenPeterson
Uma maneira fácil de lidar com guias versus espaços é desaprovar guias no padrão de codificação. Uma maneira fácil de aplicar isso é ter um gancho de entrada que rejeite a entrada ou converta as guias usadas como espaço em branco em espaços. A verificação automática de alguns dos padrões de codificação, como durante uma compilação noturna ou no check-in (preferível devido ao feedback quase instantâneo) é um recurso muito interessante de se ter. E se o check-in for permitido (ou forçado) e a conversão fizer uma bagunça? Também há uma resposta fácil para isso: revisão de código. Um POS feio não deve passar pelo agrupamento; nem deveria ser revisto.
David Hammen 22/09/12
Observe que a regra "sem guias" (algo que eu evitei na minha lista porque as opiniões variam) não significa que você não pode usá-las quando estiver digitando seu código. Um editor decente pode converter as guias que o programador digita em espaço em branco. Se o seu editor não puder fazer isso, talvez pense em mudar para um editor melhor.
David Hammen
Não há argumentos lá. Apenas dizendo que o recuo / formatação pertence à lista. As guias podem ser apropriadas para HTML ou arquivos baixados ou analisados ​​em tempo de execução.
precisa saber é o seguinte
@GlenPeterson - A indentação / formatação está na minha lista ou imediatamente antes da minha lista: "IMO, um padrão de codificação deve especificar um conjunto razoável de estilos de indentação aceitáveis, mas deixe os detalhes específicos para os autores de um pacote." E sim, há exceções à regra "sem guias". Makefiles, por exemplo.
David Hammen
60

Os padrões de codificação não são apenas os parâmetros preferidos para indent- eles também incluem convenções de nomes, convenções de comentários e um grande número de recomendações possíveis para idiomas, uso de recursos de idioma etc.

Mais ao ponto, você ainda precisa documentar tudo isso em algum lugar. E, finalmente, nem todo mundo vai querer usar um IDE que reformate o código dessa maneira ...

tempestade
fonte
1
Boa resposta, expandiu meu conhecimento com uma boa explicação cobrindo as coisas em que eu não tinha pensado. +1
SomeKittens
Eles também podem abranger aspectos como lidar com a compatibilidade entre plataformas, o que é extremamente importante se um novo desenvolvedor não tiver experiência em escrever código entre plataformas.
Velociraptors
3
Se você acha que essa resposta é boa e responde à sua pergunta, marque-a como tal.
marktani
3
Sem mencionar que a reformatação em massa pode causar dores de cabeça quando você lança outro bom padrão: o controle de origem.
precisa saber é o seguinte
1
@MatthewScharley geralmente você empurrar o código alterado através do formatador e depois cometer (depois talvez um último teste para garantir o formatador não quebrar nada) get código tão somente formatado no repo
aberração catraca
13

Se você usa um estilo consistente em uma equipe, seu código fica mais fácil de ler. Quando seu código ficar mais fácil de ler, sua equipe será mais produtiva. Eles serão mais produtivos porque não precisam analisar mentalmente o código e podem se concentrar na lógica e não na sintaxe ao revisar e manter o código.

Se cada pessoa permitir que o IDE reformate o código de acordo com a sua escolha, você tem um dos dois problemas: você deve sempre convertê-lo para o formato original ao salvar ou sofrer com o fato de que os seus diffs mostrarão muito ruído, dificultando a visualização do que mudou na lógica do código.

Bryan Oakley
fonte
4
Diffs! Eu não tinha pensado nisso.
SomeKittens
1
Sim, definitivamente não deixe que todos reformatem o código da maneira que eles gostam toda vez que trabalham nele. Isso é apenas um pandemônio. Mesmo um padrão ruim é melhor que isso. Dada a escolha, eu tentaria fazer o que há de mais popular no idioma para que os novos desenvolvedores pudessem acelerar rapidamente. Use a web para descobrir qual é o padrão do seu idioma.
precisa saber é o seguinte
5

Resposta curta: Sim, reflete a qualidade .

O que é e por que precisamos disso?

Os padrões de codificação são peças muito importantes de software de alta qualidade. Eles aumentam a produtividade no processo de desenvolvimento, facilitam a manutenção do código e evitam que o código seja vinculado a uma pessoa ou equipe. A consistência no padrão de codificação também diferencia o código criado prematuramente da arte bem criada.

insira a descrição da imagem aqui

OK, todo desenvolvedor sabe que as convenções de codificação são boas. Mas de onde os padrões devem vir?

É principalmente ditado pelo fornecedor que possui o produto. Todo desenvolvedor pode escolher entre muitos padrões de codificação do setor. Algumas empresas Microsoft, Oracle e Sun Microsystems oferecem diretrizes.

Existem argumentos para o desenvolvimento de um padrão de codificação (não temos um, mas eu estava pensando em criar um)?

Sim, existem padrões da indústria que são recomendados para serem usados. No entanto, cada padrão de codificação é específico para a plataforma de desenvolvimento. Assim, os padrões de codificação são principalmente específicos do idioma. Por exemplo, Java tem um padrão diferente do .NET. Por exemplo, o C # .NET está usando esses padrões nesta referência .

Normas comuns

Os padrões comuns não têm dependências em nenhuma linguagem de programação. Além dos padrões oferecidos pelo fornecedor, também conhecidos como padrões de codificação do setor, existem notações de programação diferentes, como Hungarian Notation ou CamelCase . Eu acho que os padrões de codificação do Microsoft .NET foram inicialmente baseados em notações do CamelCase.

Normas e diretrizes de codificação de equipe

Pensamos que toda equipe de desenvolvimento deve concordar com os padrões de codificação assim que o projeto for iniciado. As diretrizes de codificação geralmente são criadas pelo líder da equipe ou pelo arquiteto-chefe da empresa. Geralmente, é um documento aberto a ser seguido e aprimorado mediante uma necessidade. Por exemplo, em nossa empresa, temos páginas Wiki em que este documento é carregado e disponível para os desenvolvedores da empresa.

Yusubov
fonte
Eu acho que a pergunta é perguntar por que essas coisas são importantes. Você descreve o que um padrão de codificação cobre, mas a questão é perguntar por que é necessário.
Bryan Oakley
i não terminar a minha resposta ainda
Yusubov
Isso While Notdeveria ser totalmente um Do Until.
Ry-
2

Vou tomar a opinião controversa e dizer não, você não precisa de um padrão de codificação . As regras são, como você diz, diretrizes aplicáveis ​​do IDE, melhores práticas gerais que todos em toda empresa devem seguir ou são chamadas de julgamento caso a caso por equipe que devem ser feitas por mais de uma pessoa em uma equipe capaz via programação em pares ou revisões de código.

Coisas como Como devemos nomear essa variável? Quais recursos de idioma devemos usar? Devemos evitar? Qual teste é melhor? É melhor ficar sem resposta até encontrarmos o problema estritamente definido em que estamos trabalhando agora .

Cristalizados a partir dessas decisões minuciosas, padrões / padrões informais dentro das equipes podem surgir, com base na interseção com o atual domínio do problema e as tecnologias em uso. Codificar isso significa que acreditamos que coisas como o padrão de nomenclatura, o subconjunto de idiomas apropriado etc. usado nesses projetos, com base em centenas de micro decisões e adotado informalmente por essas equipes devem orientar todos os projetos no futuro.

Principalmente, isso parece ótimo, mas, na realidade, apenas se torna um ímã para a política. Quais ferramentas podemos forçar todos a usar? O que eu quero forçar outras pessoas a evitar? Se todos concordassem com essas perguntas, não precisaríamos de um padrão. Nós apenas faríamos isso. Na minha experiência, os padrões resultam do desejo de um subconjunto dos desenvolvedores exercer controle sobre outro subconjunto. Normalmente, esse tipo de política e o policiamento tecnológico a seguir apenas sufocam a inovação, em vez de fornecer orientação.

Se você deseja orientação real , em vez de ler um padrão com várias regras inúteis, encontre membros capazes de sua equipe e pergunte a eles o que eles pensam. O que eles foram queimados? Como eles sugerem que você escreva código? Você obterá uma variedade de respostas úteis com muita experiência valiosa para fazer o backup. Você verá muitas interseções com base na experiência comum. Em vez da monocultura aplicada pelo padrão, você também verá muita diversidade, o que só pode ajudá-lo a ver muitas maneiras válidas de resolver problemas.

E quando alguém lhe disser para não fazer algo causador de uma regra no "padrão", mas não tiver experiência ou backup razoável de sua reivindicação, ignore-o. Aqui, o padrão não serviu a ninguém ou fez de alguém um desenvolvedor melhor.

Doug T.
fonte
Por mim tudo bem - menos uma coisa para perder tempo, especialmente se todos os desenvolvedores tiverem uma licença do Resharper e o fxcop / stylecop estiver em execução no servidor de compilação.
StuartLC 22/09/12
1
Os padrões devem ser, e geralmente são, o culminar e a consolidação das experiências das pessoas. As mesmas "pessoas capazes" a que você se refere. Se estiverem errados, desenvolva-os, mas descartar de imediato é uma receita para a anarquia.
Andrew
@ Andrew Essas experiências podem não se aplicar e pode apenas ligam um monte de idéias que têm nada a ver com o problema atual que você está resolvendo
Doug T.
1
+1 para sufocar a inovação, controlar subconjuntos, práticas recomendadas gerais e política. Educar, não regular!
Kirk.burleson
"Nenhum padrão de codificação escrito, confie na convenção e peça orientação" funciona muito bem em equipes pequenas (menos de, não sei, 50? 100?). Quando você tem milhares de pessoas, migrando entre projetos dentro de uma base de código, é realmente útil ter um conjunto de diretrizes por escrito para o código.
Vatine 10/10/12
1

Agora que as aeronaves comerciais são fly-by-wire, você espera que os programas que pilotam o avião com base nas informações dos pilotos funcionem. Quando os programadores escrevem esse código, você espera que eles sigam um conjunto estrito de regras para evitar erros de programação comumente evitáveis. Uma maneira de fazer isso é com um padrão de codificação.

Consulte: Padrões de codificação C e C ++ da Federal Aviation Administration

Preciso dizer mais.

Nota: Não consegui encontrar o padrão atual na FAA online, mas já o vi.

Guy Coder
fonte
Esse é um padrão de codificação ruim prototípico. É muito longo, levanta questões religiosas e, o mais importante, é contrário à programação C ++ moderna. Por exemplo, ele exclui o POD (dados antigos simples) e suas regras sobre exceções variam de ruim a arcaico. Ruim: Tentar capturar std :: bad_alloc acaba sendo uma péssima idéia. Arcaico: A idéia do Java de especificar todas as exceções que podem ser lançadas e capturar todas as exceções lançadas pelas funções chamadas simplesmente não funciona em C ++. Muito melhor é escrever código com exceção de segurança com base nos conceitos dos conceitos de garantia de exceção de David Abrahams.
David Hammen
1

Para mim, é uma questão de disciplina e ser disciplinado sempre ajuda, é um reflexo da qualidade do trabalho que você produz.

Dito isto, eu faria o padrão de codificação tendo em vista o IDE e / ou as ferramentas em uso. Além disso, o IDE deve ser configurado de forma idêntica (por exemplo, o IDE de cada desenvolvedor deve usar todas as guias ou todos os espaços em branco para indentação e o IDE de todos deve ter o mesmo comprimento de guia) para cada desenvolvedor, para que todos possam seguir o padrão facilmente ...

Além disso, scripts de check-in podem ser desenvolvidos e usados, o que pode ajudar a seguir os padrões de codificação até certo ponto; por exemplo, eles podem corrigir o recuo antes de efetivamente enviar o arquivo com check-in ao sistema de controle de versão.

Curioso
fonte
1

Os padrões de codificação NÃO poderiam ser mais importantes! Sou um usuário ávido do CakePHP e gosto de revisar os conjuntos de alterações de versão para versão e os desenvolvedores não seguem os padrões.

Na verdade, fiquei tão chateado com as diferenças de estilo que tive que escrever Convenções sobre codificação . Custa muito tempo e dinheiro trazendo novos desenvolvedores para uma equipe já existente - imagine imaginar um novo desenvolvedor sem padrões ... aprender o código seria o próximo impossível demais.

endyourif
fonte