Sugando menos todos os anos? [fechadas]

10

Chupando menos todos os anos - Jeff Atwood

Eu encontrei este artigo perspicaz.

Eu sempre pensei que chupar menos a cada ano é como os humildes programadores melhoram. Você deve estar insatisfeito com o código que escreveu há um ano. Se não estiver, isso significa: A) você não aprendeu nada há um ano, B) seu código não pode ser aprimorado ou C) você nunca revisita o código antigo. Todos esses são o beijo da morte para desenvolvedores de software.

  1. Quantas vezes isso acontece ou não acontece com você?
  2. Quanto tempo antes de você ver uma melhoria real na sua codificação? mês ano?
  3. Você sempre revisita seu código antigo?
  4. Com que frequência seu código antigo o afeta? ou com que frequência você precisa lidar com sua dívida técnica.

É definitivamente muito doloroso corrigir erros antigos e códigos sujos que podemos ter feito para cumprir rapidamente um prazo e essas correções rápidas; em alguns casos, talvez seja necessário reescrever a maior parte do aplicativo / código. Não há argumentos sobre isso.

Alguns dos desenvolvedores que conheci argumentaram que eles já estavam no estágio evoluído em que sua codificação não precisa ser aprimorada ou não pode mais ser aprimorada.

  • Isso acontece?
  • Em caso afirmativo, quantos anos de codificação em um idioma específico se espera que isso aconteça?

Relacionado:

Você já olhou para trás em seu código antigo e fez uma careta de dor?

Momento de Star Wars no código "Luke! Eu sou o seu código!" "Não! Impossível! Não pode ser!"

Aditya P
fonte
3
As pessoas do IMHO que se acham perfeitas e acham que não precisam melhorar estão certas. Eles não podem melhorar. Qualquer pessoa sensata sabe que nunca pode ser perfeita, sempre há espaço para melhorias / aprendendo coisas novas. Eu ficaria horrorizado se descobrisse que não posso me aperfeiçoar - não quero pensar que tenho um teto.
MAK
Adoro voltar aos projetos que fiz quando era muito novo e ver o código que era tão difícil para mim escrever. Muitas vezes o código é muito simples. Isso me faz rir.
The Muffin Man

Respostas:

6
  > Sucking Less Every Year ?

Não, mas Chupando diferente a cada ano :-)

Após minhas primeiras críticas, há muitos anos, sofri por falta de convenções de nomenclatura.

Então eu sofri que meu código foi (desnecessário) implementado para ser o mais genérico possível, mas isso dificultou o entendimento e a manutenção do código.

Então aprendi o desenvolvimento orientado a testes, InversionOfControl, que dot net genéricos é onde e muito mais.

conclusão

sofrendo de velhos hábitos ruins diminuídos, mas foi compensado por novos sofrimentos que recebi porque aprendi mais.

k3b
fonte
19

Curiosamente, todos os programadores "rockstar" com quem trabalhei eram extremamente humildes, desejosos de aprender e prontos para admitir que não sabem tudo. Caramba, muitos eram realmente autodepreciativos, pelo menos em momentos de alegria.

Acho que nunca conheci um desenvolvedor que acha que sua codificação "não pode ser melhorada", mas algo me diz que esses caras estariam o mais longe possível da estrela do rock - para dizer o mínimo.

Bobby Tables
fonte
2
Eu concordo 100%. Eles são assassinos silenciosos! Ah, e nome de usuário incrível, xkcd? :)
jamiebarrow
@jamiebarrow: Claro. :)
Bobby Tables
outro caso de falha é a pessoa que diz "todo software é ruim, são todos hacks, suas idéias para melhorias não importam". Meio deprimente trabalhar com esses tipos.
Doug T.
13

Os seguintes pontos não são conselhos, mas um registro pessoal:

  • usando menos variáveis ​​globais
  • não use abreviação para variáveis ​​ou nomes de funções
  • escreva [alguns] códigos de teste
  • não julgue o código tão lento (ou rápido) sem comparações
  • aprender a carregar o teste de um aplicativo
  • não conserte, se não estiver quebrado
  • use uma ferramenta de gerenciamento de código-fonte (git / hg)
  • refatoração é legal, não subestime o custo dos testes que ela traz
  • a segurança é difícil, portanto, tome cuidado com isso o mais cedo possível
  • corrigir alguns erros do projeto de código aberto
  • blog algo novo
  • a usabilidade pode não ser uma solicitação de recurso, mas é importante

Eu não aprendi tudo dentro de um ano, tudo leva tempo ...

Oh Ho
fonte
Eu gosto de como você menciona "escreve [alguns] códigos de teste". Acredito que nunca ninguém alcança a perfeição onde nunca cometerá um erro como programador - somos todos humanos e cometemos erros de tempos em tempos. Testes de unidade e testes de integração podem reduzir nossos erros. E noto que você diz 'alguns' testes, o que é importante, porque às vezes eu me empolguei escrevendo testes que não eram realmente úteis.
21711 Jamiebarrow
Na verdade, acho que embaixo "não conserte, se não estiver quebrado", acrescentaria "Se estiver quebrado, e é complicado, reproduza e corrija o erro com o código de teste"
jamiebarrow
2
Posso adicionar alguns? Se for uma API, não exponha mais detalhes internos do que o necessário, se você o ocultar, poderá alterá-lo mais tarde. Sempre use constantes no lugar de números mágicos, porque eles são mais fáceis de documentar e alterar. A imutabilidade é extremamente útil, especialmente quando a concorrência está envolvida. Trabalhe na base de código de outra pessoa, é um processo infinitamente valioso para julgar seu próprio estilo de codificação quando você precisar justificá-lo para outra pessoa. Congele as especificações (se possível) porque é mais difícil atingir um alvo em movimento.
Evan Solha
Se estiver trabalhando no local ou próximo de clientes, leve seus cartões de autoridade e de maior poder. Se eles solicitarem que você altere algo fora das especificações, puxe o (não tenho) cartão de autoridade, seguido pelo (encaminhamento) para um cartão de maior poder (de preferência um PM externo que possa atender às solicitações). Na melhor das hipóteses, ele liberará você para se concentrar no desenvolvimento; Na pior das hipóteses, reduzirá o número de solicitações de recursos de drive-by. (controverso) Retorne cedo e retorne com frequência; se o retorno deveria ocorrer no final de um bloco de código, não haveria uma palavra-chave para ele. Felizmente, continuo sugando menos a cada ano.
Evan Plaice
4

Muitas vezes, as pessoas pensam que o bom código acontece de repente, mas para a maioria de nós, meros mortais, o bom código cresce em nossa base de código. Quero dizer, é muito difícil escrever o software perfeito desde o início, pois os requisitos estão constantemente mudando e não somos programadores perfeitos, nem decisões estúpidas são feitas constantemente por gerentes e programadores. Então, vejo cada requisito mudar uma boa oportunidade para refatorar parte do código antigo para um código melhor (e ser pago por isso!) E pagar um pouco da dívida técnica. Como se costuma dizer: "deixe o repositório de código um pouco melhor cada vez que você confirmar o código". Em seguida, seu sistema evoluirá para um sistema mais próximo do ideal.

Não conheço absolutamente nenhum programador que tenha orgulho de seu software, mas que seja bom. Than significa que o programador aprendeu no processo.

Além disso, se você ler o livro "Código Limpo", aumentará seu próprio código "fator de sucção" várias vezes. : D

Rafa de Castro
fonte
11
Eu discordo de você em um ponto, acredito que algum código do qual você possa se orgulhar. O mais irônico é que você pode ter um projeto extremamente bem e se orgulhar dele, com talvez alguns pequenos aborrecimentos. Em seguida, no próximo projeto, seus WTFs por hora são altos ... para seu próprio código! : D
jamiebarrow
11
Talvez depende do passo que você está agora. Agora, encontro o código que escrevi há um ano e até acho difícil entender alguns nomes ou a finalidade de alguns métodos. Também acho o código descoberto por testes e coisas assim. Enquanto eu continuar a melhorar, coisas desse tipo tendem a ser exceções em vez de norma e eu começar a ficar envergonhado em problemas que antes pareciam ser sem importância ...
Rafa de Castro
+1 para código limpo, embora a comparação seja sempre com você mesmo.
Aditya P
4

Na verdade, tenho os dois lados da moeda para isso.

Por um lado, você olha o código antigo e vê que está cheio de bugs e maneiras complicadas de fazer coisas que são simplesmente realizadas, aproveitando as técnicas e os recursos de linguagem que você não conhecia naquela época.

Por outro lado, você encontra uma solução particularmente elegante para um problema e não pode deixar de dar um sorriso convencido de como era inteligente naquela época.

E então você rola algumas linhas e faz uma careta de horror pelo fato de ter usado o GOTO em C.

Chris Browne
fonte
3

Hmm ... frequentemente fico agradavelmente surpreso com o quão bom é meu código antigo.

Se eu estivesse fazendo isso hoje, muitas vezes escrevia de maneira diferente, mas se tivesse que viver com as limitações da época, não tenho certeza. Quando você pode contar com uma máquina típica com pelo menos alguns shows de RAM, você pode (e geralmente deve) escrever seu código de maneira um pouco diferente do que quando um disco rígido grande tinha 100 megabytes.

Jerry Coffin
fonte
3
  1. Quantas vezes isso acontece ou não acontece com você?

  2. Quanto tempo antes de você ver uma melhoria real na sua codificação? mês ano?

  3. Você sempre revisita seu código antigo?

  4. Com que frequência seu código antigo o afeta? ou com que frequência você precisa lidar com sua dívida técnica.

  1. Toda vez que aprendo algo novo, espero que seja todos os dias.

  2. Se eu conseguir implementar o que aprendi, será imediato a partir de quando eu o implementar.

  3. Sim, apenas para (1) Novos recursos, (2) Correções de erros, (3) Nostalgia, (4) Veja como eu resolvi algo, pode ser útil.

  4. Em relação a 1., quando aprendo a fazer algo melhor, sei que alguns projetos mais antigos "poderiam" ter sido feitos melhor. Eu os deixo em paz. Apenas certifique-se de que o próximo projeto seja realizado da melhor maneira. Não me preocupo, a menos que seja um bug real.

Noite escura
fonte
3

Em outra pergunta , o assunto era sobre as maneiras de avaliar a qualidade do seu próprio código. Uma das minhas sugestões foi revisá-lo em alguns anos, quando sua experiência é muito maior do que quando o código foi escrito. Uma citação da minha resposta a essa outra pergunta está diretamente relacionada à sua pergunta:

"no meu caso, a vida útil é de um ano: significa que eu posso modificar o código que escrevi há seis meses, mas se o código foi escrito há dois anos, há uma grande chance de ser lançado e reescrito completamente, pois é uma merda demais. "

Então, sim, na prática, todo código que escrevi se torna insuportável do meu ponto de vista em um ano. E não estou falando sobre código descartável, mas também sobre o código que escrevi com qualidade, capacidade de manutenção e legibilidade em mente. No momento, não havia exceções.

Para responder à sua segunda pergunta sobre a vida útil, isso varia muito. Um código descartável tem uma vida útil de zero segundos : é uma merda logo após você ter escrito, mas não importa. Alguns trechos de código que escrevi eram suportáveis após dois anos , mas precisavam de algumas mudanças cosméticas: um pouco de refatoração, aplicação das regras StyleCop etc. Em média, no meu caso preciso, a vida útil varia entre oito meses e um ano por C # e entre dois e seis meses para PHP.

Eu revisito meu código antigo? Sim, é claro, como todo desenvolvedor, a menos que você não se importe com DRY e reinvente sua própria roda repetidamente. Também há chances de revisar e melhorar o código com muita frequência se você tiver uma base de código comum usada em muitos projetos . Outro ponto é que, se você trabalha em grandes projetos, alguns podem levar anos , então você terá que revisitar o código antigo.

Alguns dos desenvolvedores que conheci argumentaram que eles já estavam no estágio evoluído em que sua codificação não precisa ser aprimorada ou não pode mais ser aprimorada.

Quando uma pessoa diz que é tão perfeita que não precisa aprender nada, isso significa que ela nem é capaz de entender o quão totalmente burra ela é.

Mesmo se você tiver vinte anos de experiência em computadores / programação, as coisas mudam muito rápido, portanto sempre há coisas novas para aprender e novas técnicas para melhorar o código. Por exemplo, um código C # escrito quando não havia o .NET Framework 3.0 provavelmente pode ser mais legível e melhor com as novidades que temos hoje (incluindo Linq, contratos de código etc.), e isso, mesmo que o código antigo foi escrito pelo desenvolvedor mais inteligente.

Arseni Mourzenko
fonte
É mais como se você perguntar isso, você corre o risco de parecer como alguém que não sabe escrever um bom código.
Aditya P
@AdityaGameProgrammer: Há uma diferença a ser feita entre bugs, código feio e código bom que, depois de um ano ou menos, pode ser escrito de uma maneira mais elegante. (1.) Ninguém pode escrever um código perfeito que permanecerá perfeito para sempre; portanto, devemos admitir que nosso código pode ser aprimorado com o tempo. (2.) Adquirimos experiência e conhecimento ao longo do tempo, que também é fonte para aprimoramento do código antigo.
Arseni Mourzenko
1

Isso acontece com bastante frequência quando estou olhando o código e me perguntando: "O que eu estava pensando quando escrevi isso?"

Geralmente, há aprimoramentos o tempo todo, pois às vezes uma nova idéia para organizar o código, estilizá-lo ou algo mais virá a mim e, embora não seja uma grande melhoria, tudo pode ajudar a valer a pena.

Dependendo do ambiente de trabalho, posso ver o código de alguns anos atrás, continuando trabalhando na mesma base de código e familiarizando-me com o que está lá e com algo a ser gerenciado.

O código antigo quase sempre está me atormentando, pois normalmente estou mudando um sistema existente ou substituindo o sistema. Em ambos os casos, eu tenho que conhecer as peculiaridades do sistema existente para garantir que elas estejam presentes no novo.

Embora eu tenha certeza de que existem pessoas como Jon Skeet que podem pensar em um código perfeito, a maioria das outras pessoas dizendo que seu código não pode ser aprimorado está dizendo que, a partir de um ponto do ego, isso pode ser pouco atraente. Ao mesmo tempo, em termos de encontrar uma grande melhoria sempre que nem sempre será o caso.

JB King
fonte
1

1.Quantas vezes isso acontece ou não acontece com você?

Quantas vezes estou insatisfeito com meu código antigo? Quase sempre. Existem raras exceções nas quais tenho código do qual realmente me orgulho ... mas, novamente, elas são raras. Foi-me dito que o código que escrevi alguns anos atrás era bom ... Me encolhi e pensei "você pobre coitado por ter visto pior do que o lixo que escrevi".

2. Quanto tempo antes de você ver uma melhoria real na sua codificação? mês ano?

Geralmente está em estágios ... eu gosto muito de um estilo ou metodologia (por exemplo, interfaces fluentes ... como esse foi o último estilo para o qual eu usei muito) e açougue tudo o que escrevo por um mês ou quatro . Então começa a parecer melhor.

3.Você já revisitou seu código antigo?

Não tantas vezes quanto eu gostaria. A maior parte do meu código antigo pertence a empregadores anteriores. O código pessoal é lavado com muita frequência.

4. Com que frequência o seu código antigo o afeta? ou com que frequência você precisa lidar com sua dívida técnica.

Sendo que os empregadores anteriores têm a maior parte do meu código antigo e eu lavo a maior parte do meu código pessoal ... não com muita frequência.

Steven Evers
fonte
lavagem branca = re-fator? você está se referindo a um código de projeto ou à sua base de códigos pessoal.
Aditya P
11
@AdityaGameProgrammer: White wash = jogue tudo fora e reescreva-o desde o início. Estou falando do meu código pessoal.
Steven Evers