Comentários
- Um bom código é se você olhar para ele depois de dois anos e seu primeiro pensamento não for ' t " Cara, wtf ".
- duplicado de Como você saberia se ' escreveu legível e código de fácil manutenção?
Resposta
Um bom programador é como um bom jogador de bilhar.
Quando você vê um jogador profissional de sinuca, a princípio pode não se impressionar: “Claro, eles acertaram todas as bolas, mas só jogaram tacadas fáceis!” Isso ocorre porque, quando um jogador de sinuca está fazendo sua tacada, ela não pensa em qual bola irá para qual caçapa, ela também está pensando em onde a bola branca irá parar . Preparar para a próxima cena requer muita habilidade e prática, mas também significa que parece fácil.
Agora, trazendo essa metáfora para o código, um bom o codificador escreve código que parece ser fácil e direto de fazer . Muitos dos exemplos de Brian Kernighan em seus livros seguem esse padrão. Parte do “truque” é apresentar uma conceituação adequada do problema e sua solução . Quando não entendemos um problema bem o suficiente, é mais provável que complicemos demais nossas soluções e não conseguiremos ver ideias unificadoras.
Com uma conceituação adequada do problema, você consegue tudo mais: legibilidade, manutenção, eficiência e correção. Como a solução parece tão direta, provavelmente haverá menos comentários, porque uma explicação extra é desnecessária. Um bom codificador também pode ter a visão de longo prazo do produto e formar suas conceituações de acordo.
Comentários
- " um bom codificador escreve código que parece fácil e direto de fazer. " < < EXATAMENTE! Acho que isso ocorre porque as pessoas geralmente pensam que um bom codificador é alguém que pode escrever hacks " inteligentes ". Se o código estiver limpo e não excessivamente " inteligente ", deve ser fácil, certo?
- Meu 2 centavos: quando você ' tiver uma linguagem com refatorações automáticas EASY – Java e C # são os dois exemplos que conheço melhor – é ' div É fácil mudar para um código bom iterativamente. Caso contrário, você terá que conceituar bem em primeiro lugar, mas há uma espécie de problema do ovo de galinha aí.
- Alguns algoritmos são intrinsecamente complexos. Um bom programador não deve ter problemas para escrevê-los quando eles são realmente necessários – e mantê-los o mais legíveis possível.
- @hasenj: sim, isso é por causa deste lema: pessoas estúpidas escrevem códigos que o compilador entende. Pessoas inteligentes escrevem códigos que pessoas estúpidas entendem.
Resposta
s por minuto
( original )
EDITAR: A ideia básica é que a “Qualidade do código” não pode ser colocada em regras, da mesma forma que você não pode colocar “Boa arte” ou “Boa poesia” em regras, para que possa deixar um computador determinar dizer “Sim, boa arte “ou” Não, má poesia “. Atualmente, a única maneira é ver como o código é facilmente compreensível para outras pessoas.
Comentários
- Temos isso preso em nosso quadro branco no trabalho: -)
- @Cape Cod Gunny estava em um tio Bob ' o livro também
- Além de ser um ótimo desenho, acho que realmente vai direto ao ponto – código bom é código que outras pessoas acham agradável de ler e manter.
- Portanto, é verdade, código bom é qualquer código que não seja ruim. Por exemplo, é difícil definir um código bom, é mais fácil definir um código ruim.
- Normalmente encontro aqueles " WTF? " ' s na reunião de código bom são logo seguidos por " Oooooh Ok … eu vejo o que você fez."
Resposta
Não há realmente nenhum bom critério outro do que o quão rápido você pode entender o código. Você faz seu código parecer bom encontrando o meio-termo perfeito entre sucinto e legibilidade.
Os “WTF” s por minuto “(acima) é verdade, mas é apenas um corolário da regra mais geral. Quanto mais WTFs, mais lento é o entendimento.
Comentários
- @rmx: define " fazendo o trabalho bem "
- Bem, que o método
RemoveCustomer
realmente remove o cutomer sem bagunçar. Você pode passar horas fazendo com que pareça bonito, mas isso não significa que realmente funcione. ' O quão rápido você pode entender o código ' não é o único critério para ' bom código ' é o que eu ' estou dizendo. - @rmx: mas estar livre de erros está implícito, isn ' não é? Se o seu código não ' não realizar o trabalho corretamente, ' não é código (ainda).
- @ rmx: na verdade, não. Se o seu código for fácil de entender, em conclusão, ele ' é fácil de entender se o fizer ' mal o trabalho. OTOH, se ' for difícil de entender, será ' difícil de entender se for ' s trabalho em tudo.
- @rmx: PS Simplificando, seu decrement () é um WTF clássico e, portanto, retarda a compreensão das partes do código onde esta função é usada
Resposta
Você sabe que escreve um bom código quando …
- O cliente está feliz
- Colegas de trabalho pegam seu código emprestado como ponto de partida
- O novato / garota acabou de dizer para fazer modificações em um sistema que você construiu há 6 meses e ele / ela nunca fez uma pergunta a você
- Seu chefe pediu que você desenvolvesse novos widgets para a equipe a ser usada
- Você olha para o código que escreve hoje e diz para si mesmo “Eu gostaria de ter escrito um código como este há dois anos”
Como você meça se o código é bom …
- Qual é o tempo de resposta?
- Quantas viagens de ida e volta para o servidor ele faz?
- Você usaria pessoalmente o aplicativo ou acha que é desajeitado?
- Você o construiria da mesma forma na próxima vez?
Um bom código funciona quando é suposto. Um bom código pode ser facilmente modificado quando necessário. Um bom código pode ser reutilizado para gerar lucro.
Comentários
- " O cliente está feliz " é ortogonal a isso.
- @TRA – Se o cliente estiver satisfeito, isso significa que você entendeu os requisitos e forneceu a solução que eles esperavam.
- claro, mas um código ruim pode fazer o mesmo.
Resposta
Um código que é
-
sem bugs
-
reutilizável
-
independente
-
menos complexo
-
bem documentado
-
fácil de modificar
é chamado de bom código.
Um bom programa funciona perfeitamente e não tem bugs. Mas que qualidades internas produzem tal perfeição? Não é nenhum mistério, só precisamos de alguns lembretes ocasionais. Quer você codifique em C / C ++, C #, Java, Basic, Perl, COBOL ou ASM, toda boa programação exibe as mesmas qualidades consagradas pelo tempo: simplicidade, legibilidade, modularidade , camadas, design, eficiência, elegância e clareza eficiência, elegância e clareza
Fonte: MSDN
Comentários
- Simplicidade, legibilidade, elegância e clareza são a mesma coisa. Modularidade e camadas são apenas métodos para tornar seu código claro e elegante. A única coisa que resta na lista é a eficiência, o que está meio implícito e, além disso, muitas vezes é uma questão de compromisso entre eficiência e clareza.
- Verifique isto: goo.gl/hdQt8
- O código pode estar livre de erros?
- Não, pode ' t. (Praticamente)
- Eficiente deve ser adicionado à sua lista. Velocidade isn ' t necessária arily um indicador primário de bom código, mas bom código não deve ' t ser desnecessariamente lento ou desperdiçador.
Resposta
Isso parece familiar?
A Philips me deu a oportunidade de assistir ao design de um novo produto. Com o desenvolvimento, fiquei cada vez mais inquieto e comecei a confidenciar minhas preocupações ao meu supervisor. Eu disse várias vezes a ele que os designs não eram “limpos” e que deveriam ser “bonitos” da mesma forma que os designs de Dijkstra eram bonitos. Ele não achou este comentário útil.Ele me lembrou que éramos engenheiros, não artistas. Em sua mente, eu estava simplesmente expressando meu gosto e ele queria saber que critério eu estava usando para fazer meu julgamento. Não consegui dizer a ele! Como não pude explicar quais princípios estavam sendo violados, meus comentários foram simplesmente ignorados e o trabalho continuou. Sentindo que deveria haver uma forma de explicar e motivar o meu “gosto”, comecei a tentar encontrar um princípio que pudesse distinguir os bons designs dos ruins. Os engenheiros são muito pragmáticos; eles podem admirar a beleza, mas buscam utilidade. Tentei encontrar uma explicação de por que “beleza” era útil.
Veja o resto aqui .
Comentários
- Visto que o link na postagem de @mlvljr ' está quebrado , aqui está um link para a página do Google Livros: books.google.co.in/…
- @balajeerc Obrigado (eu também corrigi o link, então ele aponta para uma versão hospedada pela Springer do mesmo pdf) 🙂
Resposta
à parte dos critérios naturais de qualidade do código (mínimo copiar / colar, sem espaguete, etc.), um bom código industrial deve sempre parecer um pouco ingênuo, um pouco prolixo, como
int key = i; const bool do_not_create = false; Record r = cache.get(key, do_not_create); ++i;
em oposição a
Record r = cache.get(i++, false);
Comentários
- Mas
do_not_create = false
significa “passarfalse
como o argumentodo_not_create
para que será criado ”ou“ pas sfalse
como o argumentodo_create
para que não seja criado ”? Em um idioma em que você possa usar nomes de argumento, eu prefeririacache.get (key:i, create: false); i += 1;
.
Resposta
Talvez uma resposta ilustrando o oposto ajude (além disso, é uma desculpa para inserir o XKCD aqui).
Um bom código é
- simples de entender,
- fácil de manter ,
- não tenta resolver todos os problemas, apenas o que está em mãos
- vive por muito tempo sem fazer os desenvolvedores procurarem alternativas
Os exemplos incluem
- Apache Commons
- framework Spring
- framework Hibernate
Resposta
Vou simplesmente optar por “sustentável”
Todo o código deve ser mantido: não há necessidade de tornar essa tarefa mais difícil do que o necessário
Se algum leitor não entender este requisito simples ou precisar que ele seja explicado, então esse leitor não deve escrever código …
Resposta
Um bom código será diferente para cada pessoa e a linguagem com que eles estão trabalhando também tem um impacto sobre o que pode ser considerado para ser um bom código. Geralmente, quando abordo um projeto, procuro o seguinte:
- Como o projeto é organizado? Os arquivos de origem estão organizados de maneira limpa e posso encontrar o código sem muito esforço?
- Como o código é organizado? Está claramente documentado o que o código no arquivo faz, como por meio do uso de um cabeçalho de arquivo ou pelo uso de cada classe que reside em seu próprio arquivo? Existem funções no arquivo que não estão mais sendo usadas no aplicativo?
- Como as funções são organizadas? Existe um padrão claro para onde as variáveis são declaradas ou é um padrão razoavelmente aleatório? O código tem um fluxo lógico e evita estruturas de controle desnecessárias? Está tudo claramente documentado com o código sendo autodocumentado onde necessário e os comentários expressam claramente o porquê e / ou como o que o código está fazendo?
Além de tudo isso, o design do aplicação faz sentido como um todo? O código que reside no aplicativo pode ser o melhor do mundo, mas ainda assim pode ser difícil de trabalhar se o design geral do aplicativo não fizer sentido.
Resposta
Gostaria de discordar quanto à legibilidade. Não, não completamente: um bom código deve ser legível e isso pode ser facilmente alcançado com comentários suficientes.
Mas considero dois tipos de WTF: aqueles em que você se pergunta se o programador foi além da programação 101 e aqueles em que você absolutamente não compreende a genialidade do código. Alguns códigos podem parecer muito estranhos em primeiro, mas é na verdade uma solução muito inventiva para um problema difícil. O segundo não deve contar no medidor WTF e pode ser evitado por comentários.
Um código muito legível pode ser muito, muito lento . Uma solução menos legível pode proporcionar uma melhoria múltipla na velocidade. R é um ótimo exemplo de uma linguagem onde isso geralmente é verdade. Gostamos de evitar loops for lá o máximo possível.Em geral, eu consideraria o código mais rápido o melhor código, embora seja menos legível. Ou seja, se a melhoria está substancialmente fora do curso e comentários suficientes são inseridos para explicar o que o código faz.
Ainda mais, o gerenciamento de memória pode ser crucial em muitas aplicações científicas. O código que é muito legível, tende a ser meio desleixado no uso de memória: há apenas mais objetos criados. Em alguns casos, o uso inteligente da memória torna o código novamente menos legível. Mas se você manipular gigabytes de sequências de DNA, por exemplo, a memória é um fator crucial. Novamente, considero que quanto menos código intensivo de memória, melhor, independentemente da legibilidade.
Então, sim, a legibilidade é importante para um bom código. Eu conheço o adágio de Uwe Liggis: pensar dói e computadores são baratos. Mas na minha área (genômica estatística), tempos computacionais de uma semana e uso de memória de mais de 40 Gb não são considerados anormais. Portanto, uma melhoria de duas vezes a velocidade e metade da memória vale muito mais do que um pouco mais de legibilidade.
Comentários
- Sem regras / regras sem exceção
- Deixe-me discordar da sua discordância: você diz que no seu campo a velocidade é muito importante e diz que é mais importante do que a legibilidade. Eu discordo, você deve se esforçar para usar o equilíbrio certo. Se a velocidade não for necessária, por exemplo para uma interface de alto nível, você pode preferir algo fácil de manter, se a velocidade for necessária, então eu concordo com você. Em vez de regras rígidas, é melhor usar o bom senso e você deve evitar a otimização prematura de qualquer maneira.
- @BlueTrin Por que ambos não compilam os códigos-fonte de alto desempenho e documentam o que diabos ' está acontecendo lá (ali nos comentários)?
Resposta
Até onde vai para mim … Eu sei que estou escrevendo um bom código quando um colega de trabalho que trabalha em outro projeto aparece e é capaz de pular e entender o que estou fazendo sem que eu repasse cada bloco de código e mostrando o que está fazendo.
Em vez de ele dizer: “Espere um minuto, o quê ?!” Ele está dizendo: “Ah, ok, vejo o que você fez aí.”
Um bom código também não tem muitas soluções alternativas ou “hacks”. Falas quando, enquanto você está escrevendo, você também está dizendo a si mesmo: “Eu sei que esta não é uma boa maneira de fazer isso, mas terei que fazer dessa maneira por enquanto. “Vou me lembrar de melhorá-lo mais tarde …”
Resposta
Existem muitos recursos no código “bom” , mas o mais importante, IMHO, são a legibilidade e a manutenção.
Seu código irá conter bugs, será provavelmente estendido e reutilizado, e deve ser re-fatorado em algum ponto – mesmo que seja você visitando novamente, as chances são de que você não terá a menor ideia do que diabos você fez em primeiro lugar, para fazer um favor a si mesmo e não coloque nenhuma barreira no caminho.
Claro, use esse algoritmo complexo-mas-super-eficiente, mas certifique-se de gastar um pouco mais de tempo documentando-o, mas caso contrário, faça seu código claro e consistente.