Você já teve que trabalhar para padrões de codificação que:
- Diminuiu bastante sua produtividade?
- Foram originalmente incluídos por boas razões, mas foram mantidos muito tempo depois que a preocupação original se tornou irrelevante?
- Estavam em uma lista há tanto tempo que era impossível lembrar de todos eles?
- Você achou que o autor estava apenas tentando deixar sua marca em vez de incentivar boas práticas de codificação?
- Você não tinha ideia de por que eles foram incluídos?
Se sim, qual é a sua regra menos favorita e por quê?
Alguns exemplos aqui
Respostas:
Isso pode irritar algumas penas, mas os padrões que exigem modelos de comentários em bloco na parte superior de cada método sempre me incomodam.
1) Eles estão sempre desatualizados, pois estão muito longe do código que faz o trabalho real para serem notados quando você está atualizando as coisas. Comentários ruins são piores do que nenhum comentário.
2) Frequentemente, apenas repetem as informações que já estão contidas na ferramenta de controle de origem, apenas menos precisas. Por exemplo: Última modificação por, lista de data / motivos da modificação.
fonte
Teve um professor uma vez que exigiu que tivéssemos pelo menos um comentário para cada linha de código.
Foi bastante ridículo.
fonte
// comment
a linha antes disso?O padrão de codificação da nossa empresa (C #) exigia o uso extensivo de #REGIONs (para quem não sabe, marca blocos de código-fonte que serão recolhidos em uma única linha no Visual Studio). Como conseqüência, você sempre abriu o que parecia ser uma classe bem estruturada, apenas para encontrar pilhas e pilhas de lixo varridas por tapetes profundamente aninhados das construções #REGION. Você teria regiões em torno de linhas únicas, por exemplo, ter que dobrar uma região LOG para dobrar para encontrar uma única declaração do Logger. Obviamente, muitos métodos adicionados após a criação de alguma região também foram colocados no escopo da região "errado". O horror. O horror.
As regiões são um dos piores recursos já adicionados ao Visual Studio; incentiva a estruturação da superfície em vez da estrutura OO real.
Hoje em dia, eu mato #REGIONs à vista.
fonte
Em um trabalho, fomos forçados a usar alguma forma estranha de notação húngara no banco de dados.
Não me lembro dos detalhes, mas de memória, cada nome de campo precisava conter:
Por exemplo, a coluna que contém o primeiro nome de uma pessoa pode ser chamada:
PRSNFRSTNMVC30X
(Tabela de pessoas, coluna Nome, Varchar 30 caracteres, Não nulo)fonte
Insistindo para que todas as chaves sejam seguidas de um comentário sobre o que a chave termina:
por exemplo:
fonte
disse nuff.
fonte
#define BEGIN {
e#DEFINE END }
?Exemplos reais:
paymentmethodtotalshtml
,contracttypechangecontexts
,customsegmentspectexts
,potentialmsceventref
O New York Times avalia :
fonte
Fui convidado pelo líder de uma empresa de software para fazer " simples, re n código redundantes ". Foi proibido, por exemplo, adicionar um novo parâmetro a uma função existente. Você teve que duplicar a função, deixando o original intocado para evitar regressões. Sem testes formais, é claro (perda de tempo).
Também fomos proibidos de usar software de mesclagem; cada arquivo só pode ser modificado por um programador por vez. O software de controle de revisão era ficção científica, é claro.
O dia mais feliz da minha vida foi quando ele foi demitido (considere que é muito, muito difícil demitir alguém na Itália).
fonte
Toda interação com o banco de dados deve ser feita através de procedimentos armazenados . Pode fazer sentido se moramos em 1997 e não em 2010.
Acabei de perceber que isso realmente cobre todos os critérios da pergunta original:
fonte
Não sendo permitido usar o STL ou outras bibliotecas C ++ padrão porque o CTO acreditava que 'nós' poderíamos fazê-lo melhor e mais rapidamente. Mesmo construções básicas, como listas e a classe de string.
fonte
Notação húngara
Amostra extraída da " explicação de Charles Simonyi da convenção de nomeação de identificador de notação húngaro " no MSDN.
fonte
Certa vez, trabalhei em um projeto no qual o líder do projeto exigia que todas as variáveis - TODAS as variáveis - fossem prefixadas com "v". Portanto, vCount, vFirstName, vIsWarranty etc.
Por quê? "Porque estamos trabalhando em VBScript e tudo é uma variante de qualquer maneira".
WTF.
fonte
f
funções antes, então seu código é realmentefUcked (vUp)
.Quase esqueci este:
Citação de um gerente:
Isso não era para software de consumo, mas personalizado para uma única organização grande. Desnecessário dizer que o cliente pagou anos depois. Pode parecer trivial, mas tentar ignorar erros é mais difícil do que encontrá-los.
fonte
Comentários XML forçados em todos os métodos, constantes, enumerações e propriedades não particulares.
Isso levou a um código bastante confuso, especialmente porque o resultado final foi que as pessoas estavam apenas pressionando /// para criar um esboço de comentário vazio para tudo ou instalando o GhostDoc e adicionando comentários gerados automaticamente:
[Editar] A razão de eu mencionar isso como um padrão ridículo não é porque acho que os comentários dos métodos são estúpidos, mas porque a qualidade desses comentários não foi imposta de maneira alguma e resultou na criação de muita e desorganização nos arquivos de código. . Existem maneiras melhores de criar documentos de código significativos do que o requisito de compilação "deve ter um comentário" cego.
fonte
Validations the handler
' - uh-ohNão é realmente um padrão de codificação, mas tínhamos um arquivo no controle de origem chamado 'changelog.txt'
Toda vez que você fazia um check-in, era necessário adicionar manualmente uma entrada nesse arquivo. Esta entrada foi o número de revisão do subversion e seu comentário no check-in.
Quando o novo CTO começou e alguém lhe disse isso, ele prontamente tomou uma decisão executiva e disse: "Não vamos mais fazer isso" e excluiu o arquivo. Isso vinha acontecendo há anos.
fonte
svn log
?Alguns dos lugares com os quais trabalhei insistiram em comentar o código não utilizado ou reprovado em vez de excluí-lo. Em vez de confiar no VCS para a história, etc., ele foi dolorosamente mantido nos arquivos por meio de um código comentado.
O grande problema que encontrei com isso é que muitas vezes você não fazia ideia do motivo pelo qual o código foi comentado. Foi porque algum desenvolvedor estava fazendo mudanças ativamente e queria mantê-lo por referência ou não era mais necessário?
fonte
O pior padrão de codificação em que já participei é de bases de código que não possuíam nenhuma. Prefiro seguir um padrão de codificação em que discordo completamente do que trabalhar em bases de código onde não há nenhuma. Isso torna muito mais difícil aprender novas partes da base de código.
fonte
Forçar comentários embutidos para controle de versão foi o padrão de codificação mais inútil que eu ignorei.
O DBA Oracle que insistiu no uso correto do espaço em branco enquanto "mantinha" um banco de dados com uma tabela altamente disputada que tinha mais de 200 campos e 40 gatilhos se aproxima.
fonte
Fiz revisões de código em um projeto liderado por um primeiro timer de C ++ que decidiu que todas as funções de membro da classe deveriam ser prefixadas com o nome e a visibilidade da classe:
fonte
Sendo necessário recuar todo o código por quatro espaços;)
fonte
Eu tinha um emprego anos atrás, onde todo o nosso código tinha que ser alinhado à esquerda - sem recuo. O cara que criou essa política não gostava de rolar para frente e para trás horizontalmente ao visualizar longas linhas de código, equiparando-o a jogar pingue-pongue com os olhos.
fonte
Este é mais um exemplo de como não ter padrões de codificação pode prejudicar.
Um contratado que trabalhava em um grande banco insistia que seguir os padrões era o melhor de sempre. O aplicativo foi escrito no dBase / Clipper, do qual ele foi o único desenvolvedor e, é claro, ele apresentou o padrão.
Eu era um programador autodidata muito novo naquele estágio, mas sabia o suficiente para não ouvir o cientista louco e sair dali antes de pedir para assumir o projeto.
E sim, dissemos à gerência como essas práticas eram ruins, mas sempre obtivemos o habitual "estavam pagando esse dólar alto do contratante, ele deve saber do que está falando".
fonte
\07
ao início de cada arquivo agora.i
usado para indexar uma matriz em um procedimento pode interferir com umi
procedimento de chamada. Você precisa usarPRIVATE ALL LIKE m*
ePRIVATE i
evitar essa "sombra"Mais uma explosão do meu passado.
Citação do proprietário da empresa:
O projeto Java era um sistema de negociação de ações projetado para lidar com algumas dezenas de ações, que agora estava sendo usado para processar milhares. Em vez de abordar as falhas de design ou o hardware insuficiente, toda a empresa foi forçada a converter todos os aplicativos não C / C ++ em C / C ++, e todo o novo desenvolvimento teve que ser em C / C ++. Linguagens interpretativas significavam algo não compilado, e o proprietário considerava apenas o Assembler, C e C ++ compilado.
Para uma empresa de 800 pessoas, na qual a maior parte do código estava em Java e Perl, isso significava que a empresa inteira passava a maior parte do tempo nos próximos dois anos reescrevendo perfeitamente o código em C / C ++.
Engraçado, cerca de vinte anos antes desse fiasco, eu estava em outra empresa na qual o líder técnico decidiu que nossa lógica de classificação (era um Bubble Sort) precisava ser recodificada no assembler em vez de ser substituída pelo Quick Sort porque - os algoritmos não melhorar o desempenho. A única maneira de melhorar o desempenho era reescrever a mesma lógica no assembler.
Nos dois casos, saí logo depois que os ditames caíram.
fonte
Como muitos programadores (mas não o suficiente), odeio a decoração de código. Isso me enfurece quando preciso usar um prefixo de cifrão ($) para nomes de variáveis ou sublinhados para variáveis privadas, mesmo sem getters / setters. Se você precisar decorar seu código para entendê-lo, precisará dar o fora!
fonte
Estou trabalhando com um sistema da Web há algum tempo, em que todos os parâmetros passados tinham que ser nomeados P1, P2, P3 etc. Não há chance de saber o que eles querem sem documentação extensa.
Além disso - embora não seja estritamente um padrão de codificação - no mesmo sistema, cada arquivo deve ser nomeado xyz0001.ext, xyz0002.ext, xyz0003.ext, etc - em que xyz era o código do aplicativo em si.
fonte
Isso foi há muito tempo - 1976, para ser exato. Meu chefe nunca tinha ouvido falar de Edsger Dijkstra ou lido uma edição do CACM, mas havia ouvido rumores de algum lugar que "GOTO é ruim"; portanto, não é permitido o uso de GOTO em nossos programas COBOL. Isso foi antes de a COBOL adicionar o "fim se", então, na época, havia apenas duas e meia das três estruturas de controle clássicas (sequência, se / então / outra, execução (ou seja, faça enquanto)). De má vontade, ele autorizou o GOTO em nossos programas básicos e instruções de ramificação em nossos programas em linguagem Assembler.
Lamentamos que este seja um tipo de história "você tinha que estar lá". Tanto quanto sei, toda linguagem inventada desde 1976 possui estruturas de controle adequadas para que você nunca precise usar o GOTO. Mas a questão é que o chefe nunca sabia por que o GOTO era considerado prejudicial ou qual idioma era o distúrbio infantil e qual era a doença fatal.
fonte
Eu trabalhei em um projeto onde o principal arquiteto exigia escrever (também) código explícito. Um dos piores exemplos que encontrei no código (e ele aprovou com satisfação) foi o seguinte.
Até o ReSharper disse que isso está errado!
fonte
else
ramo final ( ) seria usado.return verbose ? someString : someOtherString;
?No meu último emprego, "padrões" seria um termo muito forte para o que me foi dado pelo cara que me contratou. Ao programar sites no ColdFusion e SQL, recebi requisitos de codificação como:
Comecei a mudar isso assim que ele saiu.
fonte
Na minha vida como codificador C ++, duas "regras" realmente desagradáveis foram aplicadas:
fonte
O(n^2)
ataques do DOS (alimentando a entrada do pior caso). Também por que não foi possível mudar - ele próprio era uma desculpa válida para não usar o STL.Sou forçado a ter documentação XML para todas as classes e membros da classe. Incluindo privado. Estou encantado de usar os comentários padrão do ghostdoc.
fonte