Maneiras de quebrar a "Síndrome do programador perfeito" [fechado]

16

Provavelmente não sou o único que se sente assim. Mas tenho o que costumo chamar "A síndrome do programador perfeito", que muitos podem dizer que é o mesmo que ser perfeccionista, mas, neste caso, está no domínio da programação. No entanto, o domínio da programação é um pouco problemático para essa síndrome.

Você já sentiu que, ao programar, não está confiante ou confiante o suficiente para que seu código seja limpo e bom código que siga a maioria das melhores práticas? Existem tantas regras a seguir que eu sinto como se estivesse sobrecarregada de alguma forma. Não que eu não goste de seguir as regras, é claro que sou programador e adoro programar, vejo isso como uma arte e devo seguir as regras. Mas eu também adoro, quero dizer, quero e adoro seguir as regras para ter uma boa noção do que estou fazendo no caminho certo .. mas eu só gostaria de poder ter tudo um pouco mais em "controle" em relação a boas práticas e bom código.

Talvez seja uma falta de organização? Talvez seja uma falta de experiência? Talvez falta de prática? Talvez seja a falta de algo mais que alguém possa apontar? Existe alguma maneira de se livrar dessa síndrome de alguma forma?

Rushino
fonte
1
Esta pergunta só pode ser respondida sabendo um pouco mais sobre sua formação pessoal, embora isso possa rapidamente torná-la muito localizada. O Tao Of Programming pode ser um bom lugar para você começar.
Jun2
Eu não concordo lá .. eu acredito que todo mundo, seja qual for o cenário, pode se sentir assim, em diferentes graus, mas ainda assim.
26712 Rushino
2
Enquanto todos podem experimentar os mesmos sintomas, a causa varia muito e, portanto, a "cura".
Jun2
Não há programador perfeito. Você pode encontrar um experiente e detalhista, que tenha impulso e desejo em melhorar suas habilidades. - você pode chamá-los de "vá Getters" ...
Yusubov 26/06/12
"Eu devo seguir as regras" ... e aí está o seu problema. As "melhores práticas" não são regras, são sugestões baseadas em experiências coletivas. Se você as está tratando como regras inquebráveis, posso ver a raiz do seu estresse.
GrandmasterB

Respostas:

21

Priorize . Primeiras coisas primeiro. Concentre-se no que importa.

Suas prioridades podem variar, mas em geral você deve se preocupar com:

  • Código correto
  • Código de manutenção
  • Código limpo
  • Código simples e elegante
  • Código eficiente

Talvez nessa ordem. No entanto, o primeiro ponto é o mais importante. Sem ele, o código é inútil. O que você faz com um programa que não funciona corretamente?

Faça funcionar, tudo o resto é quase irrelevante para resolver os problemas que você precisa resolver. Claro, eu também sofro disso. O que aprendi que ajuda é apenas focar em soluções que funcionam . É suficiente. Isso é 99% do trabalho.

Você pode pensar em algo como um bom código . O que é isso? Que tipo de pessoas escrevem? Como escrever um bom código ? É muito simples. Escreva um código que funcione . Código de trabalho é um bom código. Tudo o resto vem depois.

Obviamente, ao escrever código em ambiente profissional, de equipe , código óbvio, legível e código de manutenção se tornam cada vez mais importantes. No entanto, ainda a primeira tarefa é fazê-lo funcionar e se concentrar nisso. Somente então você pode começar a refinar e refatorar para melhor - se necessário.

Muitas vezes, é bastante óbvio que a correção do código é muito importante - ainda assim, todos falhamos em entender sua importância ao escrever o código. Cortamos cantos, usamos otimização prematura, tentamos escrever um código elegante antes mesmo de escrevermos um código de trabalho . É da natureza humana buscar a perfeição desde o início, mas a programação e o desenvolvimento de software são processos iterativos e existem prioridades. Assim, novamente, faça com que funcione , se preocupe com tudo mais tarde. Entenda a importância do código correto e lute por ele.

Embora existam toneladas e toneladas de chamadas boas práticas , acho que o senso comum é o mais importante, pense por que as práticas são consideradas boas, quando e onde aplicá-las. Não se esforce para cumprir todas as boas práticas. Não há substituto ou substituto para a experiência pessoal. Você não pode evitar armadilhas comuns - não importa quantos livros você leia, seminários que assista ou outros enfeites. O que importa é aprender fazendo, fazendo as coisas corretamente e se divertindo - sempre que possível.

zxcdw
fonte
9
A melhor otimização é aquela que leva seu programa do estado não operacional para o estado operacional.
deadalnix
1
@deadalnix Conselhos perfeitos! É tão simples, tão óbvio, mas tão verdadeiro em todo o código.
zxcdw
7
+1. Eu consideraria colocar a manutenção acima do correto . Afinal uma qualidade de código sustentável é que tornando-se correta é uma questão de esforço razoável;)
back2dos
1
O EFficient deve estar acima de tudo, mas correto, se você estiver falando sobre código de banco de dados e muito acima de elegante. Um bom código sql (bom para o banco de dados que não é o desenvolvedor) raramente é elegante. Existem maneiras ineficientes conhecidas de fazer as coisas e elas não são menos sustentáveis ​​ou mais difíceis de entender quando você começa a usá-las regularmente.
HLGEM
2
@HLGEM De fato, em áreas específicas, as prioridades podem ser completamente revertidas. Por exemplo, às vezes, escrevo e faço engenharia reversa no código de montagem, que foi escrito sob restrições extremas de tamanho e velocidade (produtos de demoscene). Em tais situações, até a correção do programa pode ser questionada - muitos trechos de código com defeito acabaram funcionando extremamente bem (belos artefatos visuais e de áudio baseados em código incorreto, por exemplo).
zxcdw
6

A maneira mais simples de evitar esse problema é mudar apenas o que dói. Não faça o polimento do código correto, legível e de manutenção, mesmo que você ache que algumas alterações possam torná-lo ainda melhor. Mas quando você estiver, por exemplo, tentando mudar algo e estúpido sobre uma variável cuja finalidade não é clara, ou uma função que é muito longa para ser compreendida, conserte-a. Não antes.

Isso não significa que você não deve se esforçar para obter um código bom e limpo, é claro que deve, mas deve considerar sua primeira tentativa "boa o suficiente", a menos que se prove o contrário.

user281377
fonte
+1 eu gosto da parte .. "sua primeira tentativa" boa o suficiente ", a menos que se prove o contrário."
26712 Rushino
Destacado e votado. Definitivamente conselhos de ouro!
Zxcdw 26/06/12
4

Acho que o melhor antídoto para isso é lembrar-se de que todas essas práticas recomendadas e regras de limpeza de código não existem por si só, nem o próprio código.

No final, o que importa mais do que qualquer outra coisa é que o software funciona e pode ser usado. E isso não acontecerá se você não terminar.

Não gosto da comparação entre codificação e arte, mas, nesse sentido, funciona: artistas ( especialmente autores ) também querem continuar trabalhando em uma peça, porque sempre há algo que não é perfeito. Mas que valor há na perfeição quando adia a publicação indefinidamente e, assim, impede que alguém aprecie o trabalho?

Michael Borgwardt
fonte
2

O mais importante a ser percebido é que seu código sempre será alterado e sempre haverá espaço para melhorias. Nenhum código é perfeito. Na maioria das vezes, uma biblioteca de classes em que você trabalha hoje será muito diferente seis meses depois. Você aprende alguma nova técnica ou encontra um padrão que realmente funciona para você. Desde que o código seja fácil de manter e legível, você deve ser bom. Idealmente, você teria testes de unidade para facilitar a refatoração mais tarde no caminho.

É fácil se deixar levar pelo código perfeito e seguir todos os padrões que você puder imaginar. Isso acontece com todos nós. Examinar o código que escrevi algumas semanas atrás me faz pensar em fazer alterações. Adicione uma propriedade aqui, refatorar o método lá. E isso parece acontecer no final do projeto. Mas se você se envolver demais com isso, poderá acabar causando um erro de parada. Eu já fiz isso algumas vezes no início da minha carreira. Algumas sessões de correção de bugs das 3h da manhã me curaram desse problema.

bwalk2895
fonte
1

Faça o contrário.

Em vez de "o que pode ser feito melhor?" procurar "o que me irrita?" até que nada faça.

Arnis Lapsa
fonte
4
"Um livro termina não quando nada mais pode ser adicionado, mas quando nada pode ser removido dele." - Código completo
Jonathan
Na verdade, é uma paráfrase de Saint-Exupéry, engraçado como ele pode ter menos credibilidade do que o Código Completo aqui.
scrwtp
1

Como programador, seu trabalho é produzir código. O objetivo das práticas recomendadas é aumentar sua taxa de produção, facilitando a compreensão / execução / memorização. Se aderir a essas práticas está atrapalhando a execução das coisas, você está fazendo algo errado. Simplesmente tente produzir código o mais rápido possível, e suas práticas devem evoluir para permitir que você faça exatamente isso.

suszterpatt
fonte
Discordo. Como programador, seu trabalho é resolver problemas. Muitos programadores analisam um problema e dizem "Eu posso codificar uma solução para isso" e não procuramos soluções que já existem . A melhor solução é aquela que você não precisa escrever. Dito isto, como programador que deve codificar a solução, seu trabalho é atender aos requisitos. Existem práticas recomendadas para garantir que o código que atenda aos requisitos possa ser alterado facilmente quando os requisitos forem alterados (não se , mas quando ).
21412 KeithS
1

Faça o trabalho, faça-o limpo, faça-o SÓLIDO, faça-o com desempenho.

Os três primeiros são um ditado que defendo sempre que alguém se pergunta como escrever código SOLID em uma linha do tempo. Quando você escreve uma linha de código pela primeira vez, ela simplesmente tem que funcionar, então faça o que você precisa fazer e não seja extravagante. A primeira vez que você revisita uma linha de código, ela não é mais única e você deve limpar o código, tornando-o legível e, portanto, mais sustentável. Na terceira vez que o cursor entra nessa linha, provavelmente é um grande negócio agora, e você deve refatorá-lo para aderir à metodologia SOLID, abstraindo dependências, implementando padrões e geralmente facilitando o código ou a conexão do código para aprimoramento futuro.

A elegância no código deve ser alcançada onde o programador percebe uma oportunidade e geralmente é uma função de simplificar, limpar e geralmente melhorar a legibilidade e a manutenção do código enquanto segue as etapas anteriores. Não é algo a ser maximizado .

O código de desempenho é quase sempre a menor preocupação em linguagens gerenciadas por memória (Java, família .NET, linguagens mais funcionais etc.). Nesses ambientes, o objetivo é escrever o código correto ("correto" aqui definido como produzindo o resultado esperado em todos os casos esperados, esendo compreensível e bem estruturado e, portanto, mantenível), e o desempenho é secundário (geralmente, ele irá prosseguir até certo ponto a partir do código correto). Em todos os casos, um algoritmo tem desempenho quando é "bom o suficiente". Lembre-se: "a otimização prematura é a raiz de todo mal"; fazer otimizações que você não sabe que precisará faz pouco mais do que perder tempo, ofuscar código e geralmente impedir o progresso. Ele precisa funcionar primeiro e, depois que funcionar, você o executa e vê com que rapidez ele é executado. Se não for rápido o suficiente (conforme definido por algum benchmark que é um requisito publicado), você o aprimora até que seja e depois para.

KeithS
fonte
0

Você realmente precisa ser pragmático em programação. Sim, todos gostamos de fazer as coisas da maneira certa, mas você é pago pelo fornecimento de software funcional, não pelo aprimoramento pelo resto da vida.

A abordagem a ser adotada é "fazê-lo" em sua vida profissional. Entregar e seguir em frente. Salve seu perfeccionismo para projetos pessoais.

James McLeod
fonte
Entendo, mas não podemos considerar esse "preto ou branco" que acredito.
26712 Rushino