Como escrever menos código [fechado]


12

Uma qualidade que eu gostaria de desenvolver é escrever um código mais conciso. Com a escrita mais concisa, pelo menos na minha opinião, a oportunidade de adicionar bugs ao código é menor. É mais fácil ler o código para outros.

Minha pergunta é se é algo que só vem com a experiência ou é algo que você pode fazer explicitamente para desenvolver essa qualidade?


6
Traçar a tendência e ver quando você cruza o eixo-x ...

1
Ponteiro obrigatório para macros, macros, macros: paulgraham.com/avg.html
vemv

Você pode gerar código legível e muito conciso adotando o estilo de programação inútil. A programação sem sentido está programando apenas aplicando funções. Você pode reconhecê-lo pelo seu uso extensivo de funções de ordem superior, como o mapa, filtro, concat, dobre / reduzir / inserção / [inserir outros nomes para um catamorphism lista] etc.
dan_waterworth

2
-1: Isso parece auto-parabéns disfarçado.
Jim G.

Ainda não vi código de ponto livre legível. não em nenhuma biblioteca significativa.
Simon Bergot

Respostas:


12

Eu diria que, no geral, é algo que vem com o tempo e a experiência, mas você pode achar que, se você trabalha com linguagens mais concisas, traz essa qualidade de volta às suas línguas de trabalho regulares.

Certamente, depois de um ano ou dois trabalhando com Ruby, descobri que meu C # ficou muito mais tenso. Acho que se eu entendesse melhor a programação funcional (uma ambição em andamento), provavelmente tiraria mais proveito disso.

Além disso, existem algumas diretrizes que podem ajudar, por exemplo, se você escrever as mesmas duas linhas mais de uma vez, dividi-las em seu próprio método. Essa é uma orientação simples, mas reduz rapidamente as linhas de código e a programação de cortar e colar, da qual muitos de nós somos culpados de tempos em tempos.

Se você entende de herança, geralmente pode economizar repetindo o mesmo código em locais diferentes, fornecendo funcionalidade comum às classes pai. Isso é óbvio em princípio, mas algo que as pessoas geralmente sentem falta na prática.

Pode haver uma diferença entre escrever menos código e ter menos código em seu aplicativo. Às vezes, você pode usar a geração de código para evitar repetições, escrevendo apenas algumas linhas de código, mas essas geram muitos outros códigos para você. - isso pode lhe dar muita influência. Veja o que uma ferramenta como Rails ou Entity Framework faz a esse respeito para entender como ela pode ser útil. Seja claro sobre a necessidade disso e pense duas vezes, três e quatro vezes sobre como lançar sua própria geração de código - que pode levá-lo ao inferno YAGNI.

Entenda seu idioma, sua API e suas ferramentas. Novamente, isso parece óbvio, mas ao longo dos anos escrevi tanto código que percebi mais tarde que estava reproduzindo uma funcionalidade que eu poderia ter herdado da API ou usado um recurso de linguagem para simplificar que percebi que algumas horas lendo sobre a documentação da API com a qual estou trabalhando economizará muitas horas de codificação ou depuração posteriormente. Da mesma forma, a maioria das plataformas com as quais você trabalha tem um pouco de conhecimento - aprenda a trabalhar da maneira que eles esperam e sua vida será muito mais fácil. Passe algum tempo encontrando a direção de menor resistência para a plataforma com a qual você está trabalhando e você fará as coisas muito melhor.

Se você está se perguntando se existe uma maneira melhor de fazer algo, provavelmente existe e sempre vale a pena descobrir como fazer as coisas melhor.


Sim, na minha opinião, a única razão para funções de linha de um privadas é o DRY-princípio

Desde que eu tive mais dessas funções, o número de linhas de código em minhas classes diminuiu notavelmente e parece muito mais limpo e claro.
glenatron

Parece um pouco de contradição, mais funções, mas menos linhas, mas talvez eu possa ver a mesma tendência no meu código também .. Eu tenho que pensar sobre isso ....

Você tem mais alguma dessas orientações que podem ser seguidas? Parece que eles podem ser úteis para um jovem desenvolvedor como eu.
27512 stuartmclark

@stuartmclark - Adicionei mais alguns, embora eu suspeite que não exista muito lá que você não tenha ouvido em outro lugar.
glenatron

16

Uma ótima maneira de escrever menos código é evitar reinventar a roda e usar componentes de software existentes, quando disponíveis.

Uma resposta comum que recebo quando pergunto por que as pessoas criaram seu próprio ORM, seu próprio mecanismo de registro, seus próprios componentes de interface do usuário ou tudo:

Mas o nosso é melhor

Acredito que esta afirmação esteja correta na maioria dos casos, mas na maioria dos casos o impacto negativo no ROI é muito alto. Sua mãe faz os melhores pratos, certo? Mas você não pode pedir para sua mãe voltar para casa e prepará-los todos os dias.

É por isso que acho que os desenvolvedores devem se interessar pelo impacto financeiro de suas escolhas. Alguns deles são:

  • Trabalho extra necessário para construir o componente
  • Trabalho extra para iniciantes aprenderem
  • Enorme trabalho extra para mantê-lo

Eu gosto de pensar que esses fornecedores de componentes são sua equipe estendida trabalhando para você por uma pequena fração do que você pagaria para criar, manter e melhorar você mesmo.

É melhor para toda a empresa obter o ROI máximo em vez de maximizar a satisfação do ego;) Quanto mais dinheiro sua empresa obtiver, maior será a probabilidade de aumentar suas condições de trabalho e salário.


1
Também sou culpado disso, há alguns anos atrás eu escrevi minha própria classe de caminho de arquivo que podia converter o caminho de arquivo entre os formatos Win, Unix e Apples. Nós usamos apenas janelas. Talvez que é uma regra também, não fazer as coisas à prova de futuro

Às vezes, é devido à sua falta de conhecimento de uma determinada estrutura. Eu fiz escrever minha própria classe caminho muito quando eu comecei a trabalhar com .NET, então eu descobri a classe System.IO.Path poucos dias depois :-)

Eu preferia o espaguete da minha mãe, mas as coisas na jarra eram boas o suficiente. Isso realmente se resume aos responsáveis ​​pelos requisitos. Se eles não se contentarem com a solução de 85%, você não tem escolha.
JeffO 04/10/10

Minha mãe faz o espaguete muito melhor que o seu.

1
+ as internets para "evitar reinventar a roda". Uma das habilidades mais cruciais que desenvolvi é ser capaz de identificar problemas que alguém provavelmente já resolveu. Ele não apenas sempre me dá uma solução melhor do que eu teria produzido sozinho, lidando com vários casos marginais que eu provavelmente teria ignorado, mas me libera para trabalhar nos problemas que realmente estou sendo pago para resolver .
precisa saber é o seguinte

5

Na minha opinião, escrever menos código pode ser feito de várias maneiras:

  • Você não vai precisar disso . Não codifique algo que você não precisa ainda. Código apenas os requisitos afirmam isso. Dessa forma, reduziremos o código necessário para escrever.

  • Não se repita . Acredito que o uso do CMS, da estrutura ou da biblioteca de terceiros seja uma maneira de aplicar o princípio DRY.

  • Abstração . E por último, mas não menos importante, a programação de abstração também pode reduzir muito o código. Abstraindo o código, a chance de reutilizá-lo aumentará, pois reduz a duplicidade.


3

Além da compreensão de uma linguagem de programação, acho que a compreensão de um problema e a criação de uma boa solução têm muito a ver com isso. Existem muitas soluções para a maioria dos problemas, nem todas são ideais. Você pode dirigir da cidade A para a cidade B por estradas diferentes - uma pode levar duas horas e a outra pode levar o dobro. É a mesma ideia na programação. Você pode conhecer um idioma muito bem, mas pode encontrar uma solução que consiga, digamos, duas páginas de código, enquanto outra pessoa descobrirá uma solução que pode ser implementada em um quarto da metade do tamanho do código. Eu já vi isso muito ao longo dos anos.

Certifique-se de ter um bom entendimento do problema. Analise, encontre soluções, pese os prós e os contras (é claro que "soluções com 's'" variarão muito de problema para problema - geralmente falando aqui.) Depois, há a implementação da solução escolhida, que é onde a sua compreensão do idioma (e da estrutura, se aplicável) entra em jogo.


Quanto tempo você gasta preparando a solução versus programando a solução?

Varia, dependendo do problema, é claro. Eu não estou falando dias aqui. Passar um pouco de tempo pensando antes de codificar geralmente compensa. Na verdade, não se trata do tempo gasto, pois está surgindo uma solução boa - e idealmente de manutenção a longo prazo. Posso produzir códigos ruins para soluções ruins - qualquer um pode fazer isso.
MetalMikester

1

Pode-se dizer que toda a arte da programação se resume a isso.

Você pode estudar linguagens que enfatizam tradicionalmente a clareza e a concisão (por exemplo, Haskell, Scheme, Python) ou até mesmo paradigmas terser como o Factor e outras linguagens concatenativas, mas, no final das contas, tudo o que você poderia escolher para estudar deveria contribuir para ajudá-lo a escrever mais curto , código menos redundante.


1

Como todas as outras aflições, se você não admitir ter um problema, não procurará uma solução. A experiência começa a ser um fator quando você aprende como menos código se parece. Quando você revisita seu código, é um ótimo momento para determinar se você pode reutilizar o código ou refatorá-lo para menos códigos. A Microsoft conseguiu melhorar a velocidade de impressão com o Windows 2000, NÃO colocando o spool duas vezes (citação de funcionário da Microsoft em uma de suas demos gratuitas).


Então, eu deveria revisitar meu código e refatorá-lo para entender como escrever menos código ou, como Piet diz, código terser?

2
@Gorgen - você poderia se tivesse tempo ou apenas olhar para qualquer código que escreveu há uma hora. Às vezes, localizar um exemplo no SO pode solicitar que você volte e faça algumas alterações no seu próprio código.
Jeffo

0
  1. Volte para o seu código longo e antigo,
  2. coloque-o sob controle de versão,
  3. escreva alguns testes para que tenha uma esperança razoável de não introduzir novos bugs,
  4. reescrever.

Repita ad libitum. E bem vindo ao inferno.


-2

O desenvolvimento orientado a testes pode ajudar. Usando isso, você escreve apenas o código mínimo necessário para passar nesse teste.


Nesse contexto, o mínimo é entendido em termos de recursos, não em comprimento.
vemv
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.