Como você lida com código intencionalmente incorreto?

21

Há muitas histórias sobre códigos intencionalmente incorretos, não apenas no TheDailyWTF, mas também no SO. Os casos típicos incluem:

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

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

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

mafu
fonte
10
É "às vezes por acidente" ou é "intencionalmente ruim"? Não vejo como podem ser os dois.

Respostas:

7

A maioria dos códigos ruins é devido à falta de entendimento e a solução é a educação.

O código intencionalmente incorreto é totalmente diferente, devido a algo completamente não relacionado à experiência do codificador ou ao restante do projeto. Como tal, você precisa descobrir por que eles estão sabotando o código de propósito e lidar com esse problema. Isso significa, com mais frequência do que isso, a política do escritório, e isso raramente é uma situação agradável para ningué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 garantir 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 falhará. Verificar duas vezes que entendi corretamente significaria conversar com a pessoa que escreveu o código. Isso deve ser feito de uma maneira muito agradável e educada, sem assumir a intenção e pode ajudar a encontrar a razão (política) subjacente necessária posteriormente.

O envio é mais importante que a perfeição da torre de marfim, mas há dois pontos que vale a pena abordar. A correção de deficiências óbvias gera 80% dos resultados com 20% do esforço, e esse tipo de fruta baixa raramente vale a pena ignorar. Porém, o mais importante é que, se você não abordar a razão (política) subjacente, é provável que, mais intencionalmente, um código incorreto seja gravado e cause mais problemas - e possivelmente impeça o envio.


fonte
28

Nunca (em 20 e tantos anos) me deparei com códigos intencionalmente ruins, mas os exemplos que você cita parecem (pelo menos para mim, mas IANAL) tentativas de fraudar um empregador ou um cliente; portanto, você provavelmente tem um advogado obrigação de indicar ao seu gerente.

gkrogers
fonte
2
Acordado. Ninguém escreve código intencionalmente incorreto. Eles estão resolvendo um problema e da melhor maneira que sabem. Eles podem ser equivocados, pouco instruídos, ignorantes etc. Mas não consigo realmente entender um desenvolvedor intencionalmente escrevendo algo que sabe ser ruim.
Dan Ray
8
Mesmo que não seja legal, pelo menos há uma obrigação ética.
31510 Chris Farmer
@ChrisFarmer Você não pode separar a obrigação ética do contexto mais amplo - há alguns contextos em que códigos deliberadamente ruins representam resistência coletiva legítima, econômica ou política. (E um contrato de trabalho única merece ser honrada de boa fé quando a relação que formaliza não é explorador individualmente ou estruturalmente.)
user234461
11

Depende da cultura da empresa. Na maioria das vezes, simplesmente não é seu trabalho corrigir e limpar todo o código incorreto.

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

No final do dia, envie a porra da coisa! É ótimo reescrever seu código e torná-lo mais limpo e, pela terceira vez, ele será 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 todos à medida que você os encontra, às custas do projeto / tarefa atual, pode simplesmente não valer a pena se o produto "estiver funcionando". Com muita freqüência, somos todos apenas programadores de fita adesiva.

Veja também o post de Joel Spolsky: The Duct Tape Programmer

esponja
fonte
+1 Eu sou realmente fã do conceito de envio de produtos. Eu acho que muitos perfis técnicos estão perdendo esse conceito.
+1 eu também. Existem muitos "códigos limpos" - tipos de livros etc. por aí - que endossam uma visão distorcida do que é importante. A qualidade do código é tão importante. Os vencedores não são os que têm o melhor produto. São aqueles que têm um produto bom o suficiente enviado com rapidez suficiente.
Joonas Pulakka 27/09/10
4
Eu acho que você não entendeu a pergunta - o cara falou sobre código intencionalmente incorreto , não simplesmente sobre código que foi escrito por programadores ruins.
Hila
@Hila Eu acredito que meu argumento ainda vale se o código incorreto foi intencional ou não. A menos que seja um problema que estava na lista de projetos / tarefas atribuídos, não é responsabilidade de um programador de fita adesiva corrigir e limpar todo o código incorreto . A cultura lá fora não é acadêmica e para escrever um código limpo / bonito. Trata-se de remessa e suporte a um produto / empresa. Pessoalmente, eu adoraria consertar todo o código incorreto que encontrei, mas não posso dedicar 100% do meu tempo a isso - eu simplesmente nunca seria capaz de terminar a tarefa / projeto atribuído a mim.
spong
3
@sunpech Mas limpar intencionalmente um código incorreto não é o mesmo que limpar qualquer código. Não se trata de tornar seu aplicativo mais "bonito", mas de corrigir códigos nocivos que foram colocados ali de propósito. É como dizer que um médico não deve tirar uma tesoura que um colega esqueceu dentro de um paciente, porque uma cirurgia cardiotorácica trata de salvar vidas e não de quão bonitos são os pontos.
Hila
4

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 que não a própria equipe?

  • ...

De qualquer forma, remover o código incorreto não é suficiente. Reclamar com o gerente certamente não ajudará a melhorar o espírito de equipe.

Eu tentava falar diretamente com a pessoa e tentava 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) em evidência, e você pode trabalhar nele.

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


fonte
4

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

Zachary K
fonte
2

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

Dependendo do contexto, qualquer um desses pode ser o mais apropriado. Outras possibilidades incluem pedir para transferir para um projeto diferente, conseguir um novo emprego e vários atos de moral e / ou legalidade questionáveis.

No entanto, como não conhecemos os fatos reais e as pessoas reais envolvidas, não há como alguém na posição que você está descrevendo estar prestando muita atenção aos nossos conselhos / 2 centavos.

Se você está falando de uma situação real, pode valer a pena conversar com seu 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 nomeie nomes. Há uma boa chance de que seu gerente já tenha uma idéia do problema.

Mas o outro lado é que você pode estar soprando isso fora de proporção. Pense muito sobre isso antes de fazer qualquer coisa. Pense nas consequências, incluindo a possibilidade de que quaisquer medidas que você tome possam sair pela culatra ... muito.

Stephen C
fonte