YAGNI

YAGNI, You Aren’t Gonna Need It (você não vai precisar disso) é um excelente princípio de programação que eu sempre segui por intuição e obviedade, mas é necessário que mais gente aprenda…

A idéia é muito simples: não fazer mais do que o necessário. Muitas pessoas saem criando mais linhas de código, mais classes, mais camadas e mais abstrações prevendo alguma necessidade futura que nunca chega. Ou pior, quando essa necessidade chega, percebe-se que as estruturas de código geradas não são exatamente o necessário e o código precisa ser modificado de qualquer maneira… A idéia que, modificando apenas uma linha seria possível ativar ou conectar a nova funcionalidade não se concretiza.

E o pior é a manutenção. Enquanto o código está, teoricamente, “totalmente preparado para a modificação futura (que nunca será necessária)”, surgem outras necessidades, completamente diferentes do previsto, que para serem implementadas precisam se encaixar na estruturação demasiadamente complexa que foi construída.

A programação não-YAGNI pode acontecer em diversos níveis, como em grande escala na arquitetura geral (excesso de classes, abstrações, camadas) quanto em pequena escala (dentro ou entre funções). Já tive que mexer num código que diligentemente copiava todos os seus parâmetros para variáveis locais temporárias, e apenas alguns poucos precisavam de uma transformação (remover pontuação, espaços, etc.). As outras atribuições eram inúteis e só poluíam o código, deixando-o mais difícil de ler e entender.

Por favor, não façam isso. Nem criem coisas do tipo AbstractContextBuilderFactories. Usem o YAGNI. Criem apenas abstrações que facilitam a manutenção, não que complicam.

Anúncios

4 pensamentos sobre “YAGNI

  1. Mas, mas, mas eu posso precisar que o meu script de backup leia e-mails, afinal o sysadmin pode querer enviar comandos para ele, right? E eu não posso assumir que IMAP está aqui para ficar, então melhor adicionar uma infraestrutura de suporte a protocolos de e-mail dentro dele. Isso se o sysadmin não preferir usar o Twitter para mandar comandos. Hmm…

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s