Princípio - YAGNI - You aren´t gonna need it (Você não vai precisar disso)


  Neste artigo vou apresentar o princípio YAGNI que é um acrônimo de "You aren't gonna need it".

"You aren't gonna need it" (YAGNI) é um princípio da Extreme Programming (XP) que afirma que o programador não deve adicionar nenhuma funcionalidade até que ela seja realmente necessária.

"Sempre implemente funcionalidades quando você realmente precisar delas, e nunca quando você prever que vai precisar delas".

Parece óbvio não é mesmo, mas pense bem. quantas vezes você implementou uma funcionalidade em um projeto apenas por que achava que o cliente ia adorar, ou que ela iria dar aquele diferencial ao projeto ?

Isso não significa que você deve evitar criar um código flexível.

Significa que você não deve incluir funcionalidades em seu código baseado-se no fato que você pode precisar delas mais tarde.

Há duas razões principais para a prática YAGNI:

  1. Você economiza tempo, porque você evita escrever código que você não vai precisar no momento;

  2. Seu código fica melhor, porque você evita poluir o código com 'palpites' que acabam, na maioria dos casos, sendo palpites errados;

Isso pode parecer um princípio tolo e simplista mas ele ocorre com muita frequência.

Imagine o cenário...

Você esta trabalhando em alguma classe e acabou de adicionar algumas funcionalidades realmente necessárias.

Ai você percebe que poderia aproveitar o momento e já implementar uma funcionalidade que você acha que vai ser necessária no futuro.

Então você pensa: "Se posso implementar agora então vou poupar tempo mais tarde..."

Aqui você comete dois erros:

1- Se você não precisa da funcionalidade agora então não implemente. Você não precisa dela.
2- Você acha mesmo que vai economizar tempo global gastando mais tempo agora do que no futuro ?


Outro ponto importante é que você esta usando o tempo no qual deveria implementar as funcionalidades já definidas para fazer algo que você acha que no futuro vai ser necessário mas que ainda não foi definido.

Esta gastando tempo que deveria ser usado para fazer o que foi definido agora, com uma previsão para o futuro ,que você não sabe se realmente vai ser necessária. É apenas um palpite seu. ("É claro que você tem certeza que seu palpite vai dar certo...")

Geralmente o que acaba ocorrendo é que você não usa a tal funcionalidade, ou pior ainda, você vai ter que reescrever ou corrigir a funcionalidade que foi implementada com base na sua previsão, mas que foi revista no projeto e que agora tem que ser corrigida.

Em geral o programador pode argumentar o seguinte: 

"Mas eu estou com a mão na massa e agora eu sei como implementar isso. Mais tarde talvez eu não saiba mais..."

Pense bem nesse argumento...

"Você esta dizendo que a classe que você esta escrevendo agora é tão complexa que nem mesmo você vai ser capaz de dar manutenção nela no futuro ?"



Então mantenha as coisas simples (princípio KISS).

Se você precisar implementar agora, e se isso já foi definido, então apenas implemente o que é necessário agora.

Se for necessário no futuro, então no futuro você implementa.

Resista á tentação de codificar agora o que você não precisa, afinal  "You aren't gonna need it".

Benefícios em usar o  princípio YAGNI:

Aproveite o tempo livre e divirta-se...

Todavia digo-vos a verdade, que vos convém que eu vá; porque, se eu não for, o Consolador não virá a vós; mas, quando eu for, vo-lo enviarei.
E, quando ele vier, convencerá o mundo do pecado, e da justiça e do juízo.
Do pecado, porque não crêem em mim;
Da justiça, porque vou para meu Pai, e não me vereis mais;
E do juízo, porque já o príncipe deste mundo está julgado.
João 16:7-11

 

Referências:


José Carlos Macoratti