ti-enxame.com

Como você lida com código intencionalmente ruim?

Existem muitas histórias sobre código intencionalmente ruim, não apenas no TheDailyWTF, mas também no SO. Casos típicos incluem:

  • Ter uma construção inútil que desperdiça tempo (por exemplo, um loop vazio contando com um valor enorme) para que os programadores possam facilmente "acelerar" o aplicativo, removendo-o quando for solicitado.
  • Fornecer documentação intencionalmente enganosa, errada ou nenhuma documentação para gerar solicitações de suporte caras.
  • Gerando erros prontamente, ou pior, gerando mesmo que tudo funcionasse bem, travando o aplicativo de forma que uma cara chamada de suporte seja necessária para desbloquear.

Esses pontos apresentam uma atitude mais ou menos maliciosa (mesmo que às vezes por acidente), especialmente o primeiro ponto ocorre com bastante frequência.

Como lidar com tais construções? Ignorar o problema ou apenas remover o código ofensivo? Notificar o gerente ou falar com a pessoa que introduziu o "recurso"?

21
mafu

A maior parte do código ruim é devido à falta de compreensão e a solução é a educação.

Intencionalmente código ruim é totalmente diferente, devido a algo completamente não relacionado à experiência do codificador ou ao resto do projeto. Como tal, você tem que descobrir porque eles estão sabotando o código propositalmente e lidar com esse problema. Isso significa, na maioria das vezes, política de escritório, o que raramente é uma situação agradável para alguém.

Como eu lidaria com o lado político depende de muitas circunstâncias (não declaradas acima). Como eu lidaria com o código é primeiro ter certeza de que não sou o único mal-entendido - que realmente é um código ruim - e depois corrigir as deficiências óbvias. Se for razoavelmente possível, escreva testes de que o código incorreto irá falhar. Verificar se entendi corretamente significaria falar com a pessoa que escreveu o código. Isso deve ser feito de uma maneira muito simpática e educada, sem assumir a intenção, e pode ajudar a encontrar a razão subjacente (política) necessária posteriormente.

O transporte é mais importante do que a perfeição da torre de marfim, mas há dois pontos que vale a pena abordar. Consertar deficiências óbvias dá a você 80% dos resultados com 20% do esforço, e esse tipo de fruta ao alcance da mão raramente vale a pena ignorar. Mas, o mais importante, se você não abordar o motivo subjacente (político), é mais provável que um código ruim seja intencionalmente escrito e cause mais problemas - e possivelmente evite o envio.

7
Roger Pate

Nunca (em 20 anos) me deparei com um código intencionalmente ruim, mas os exemplos que você cita parecem (pelo menos para mim, mas IANAL) tentativas de fraudar um empregador ou um cliente, então provavelmente você tem um obrigação de informá-lo ao seu gerente.

28
gkrogers

Depende da cultura da empresa. Na maioria das vezes, simplesmente não é seu trabalho consertar e limpar todos os códigos ruins.

De Coders at Work , o pensamento de Jamie Zawinski sobre a superengenharia, que também pode ser aplicada nesta situação:

No final do dia, envie a porra da coisa! É ótimo reescrever seu código e torná-lo mais limpo e, na terceira vez, ele estará realmente bonito. Mas esse não é o ponto - você não está aqui para escrever código; você está aqui para enviar produtos.

Existem muitos codificadores e códigos ruins por aí, e simplesmente tentar consertá-los à medida que você os encontra, às custas do projeto/tarefa atual, pode simplesmente não valer a pena se o produto "estiver funcionando". Muitas vezes, somos apenas programadores de fita adesiva.

Veja também a postagem de Joel Spolsky: The Duct Tape Programmer

11
spong

Se eu achasse que foi intencional, provavelmente despediria o cara! Se for o resultado de alguém não ser um programador bom o suficiente, eu trabalharia em suas habilidades. Se estivesse sendo empurrado de cima, provavelmente começaria a procurar um novo emprego.

4
Zachary K

Essa atitude é o sintoma de algo pior.

  • A gerência está incentivando a competição do desenvolvedor?

  • Onde está o espírito de equipe?

  • As tarefas são atribuídas por outra pessoa além da própria equipe?

  • ...

Em qualquer caso, remover o código ofensivo não é suficiente. Reclamar com seu gerente certamente não ajudará a melhorar o espírito de equipe.

Eu tentaria falar diretamente com a pessoa e tentar entender o porquê, fazendo muitas perguntas sem julgá-la. Toda a equipe tem que fazer isso sem agressividade.

Na maioria dos casos, esse comportamento construtivo coloca o problema real (o pior) sob a luz, e então você pode trabalhar nele.

Se realmente não funcionar. Remova esse desenvolvedor da equipe.

4
user2567

Como lidar com tais construções? Ignorar o problema ou apenas remover o código ofensivo? Notificar o gerente ou falar com a pessoa que introduziu o "recurso"?

Dependendo do contexto, qualquer um deles pode ser o mais adequado. Outras possibilidades incluem pedir transferência para um projeto diferente, conseguir um novo emprego e vários atos de moralidade e/ou legalidade questionáveis.

No entanto, dado que não sabemos os fatos reais e as pessoas reais envolvidas, não há como alguém na posição que você está descrevendo prestar muita atenção ao nosso conselho/2 centavos.

Se esta é uma situação real da qual você está falando, pode valer a pena ter uma conversa tranquila com se gerente, pedindo conselhos sobre o que você deve fazer. Se possível, tente conversar sobre o que você pode/deve fazer, não sobre apontar o dedo. Se possível, não cite nomes. Há uma boa chance de que seu gerente já tenha uma ideia do problema.

Mas o outro lado é que você pode estar exagerando. Pense muito sobre isso antes de fazer qualquer coisa. Pense nas consequências, incluindo a possibilidade de que quaisquer passos que você tome podem sair pela culatra em você ... mal.

2
Stephen C