Executando verificação de segurança...
6

⏳ O problema do "Feito é melhor que perfeito".

Desde que comecei a estudar programação, eu escuto uma frase que eu concordo, porém que na minha visão possui algumas armalhadilhas. Estou falando da famosa:
Feito é melhor que perfeito.

Essa frase pode ser aplicada em diversos contextos ou áreas, mas para exemplificar o meu ponto de vista, ela será inserida em um contexto de aprendizagem em programação.

A frase em questão tem como objetivo salientar que se você está começando a aprender uma tecnologia/recurso, e está aplicando-a em algum projeto, o importante é aplicar o básico, e o que não for tão importante deixar de lado (para um outro momento).

Eu concordo 100% com tal afirmação. Se você está criando um projeto, deveria focar nas principais funcionalidades, e em um segundo momento, ajustar os detalhes.

Porém, já faz algum tempo que eu tenho notado algo que está me preocupando, e que foi o motivo para eu escrever este post.

O que é o básico ?

O problema do Feito é melhor que Perfeito, é quando você não consegue identificar o que seria esse tal de Feito, ou seja, o que seria o básico. E isso é normal, principalmente se você está começando agora. Porém vou dar um exemplo que tenho visto, principalmente no Linkedin, de pessoas criando vídeos e postagens sobre seus projetos (principalmente em React), envolvendo formulários. Vou citar o cenário que tenho visto:

A pessoa desenvolve um projeto utilizando React, Next, etc., que tem uma funcionalidade de cadastrar um produto, por exemplo. Ela grava um vídeo, criando um cadastro como exemplo, e tudo funciona perfeitamente. Nos comentários, ou na própria postagem, ela insere o Link do projeto do Github, ou o Link da aplicação em produção, para que outras pessoas possam
realmente ver a aplicação funcionando. Tudo normal até aqui.

O problema é quando você entra na aplicação, e faz um teste simples ao cadastrar um produto: Você insere no campo "Valor do produto" o valor zero, imaginando que a aplicação irá recusar tal inserção, porém isto não acontece.

Eu não estou aqui para julgar, e dizer que isso está errado (até porque eu preciso revisitar meus projetos para ver se não cometi o mesmo erro), mas na minha visão, uma pessoa que já está em uma fase de aprendizagem em React/Next deveria estar apta a validar de forma básica um formulário.

Provavelmente, a pessoa que criou tal aplicação, pensa em "validar de forma básica um formulário" como apenas "validar se algo foi inserido no campo", ou seja, se o campo estiver vazio, ai eu mostro uma mensagem de erro. Para ela, qualquer coisa a mais do que isso seria deixar essa funcionalidade Perfeita.

Eu dei esse exemplo de formulário, mas esse fenômeno acontece em outras partes da aplicação também.

Uma das formas de corrigir este problema é começar a pensar na aplicação antes de sair codando. Faça perguntas antes, durante e após o desenvolvimento do projeto:

"Ok, está funcionando, mas e se o usuário informar um valor negativo aqui neste campo, o que acontece ?"

"Legal, ao confirmar meu pedido, eu sou redirecionado para outra rota, mas e se o usuário tentar acessar diretamente esta rota pela URL ?".

Com base nisso, e alterando um pouco a frase original, eu diria que: **Bem feito é melhor que Perfeito. **

Eu gostaria de saber se vocês já viram este tipo de situação, porque parece que ela está se tornando mais comum.

4

Acho que você entende esta frase "Feito é melhor que perfeito"
De uma maneira que eu não entendo ela!

Entendo ela como algo sobre perfeição!
Conheço gente que ficou 8, 10 meses num projeto de microsaas.
Deixando tudo lindo e liso e perfeito, arrumando os mínimos detalhes
e quando lançou ninguém viu o projeto em 2 anos!

Ele quis deixar perfeito.
O feito é feito o suficiente para funcionar BEM.
O perfeito seria algo totalmente dentro das "boas praticas da época",
cheio de arquitetura nova e com todas as coisas possiveis para ter um código muito bonito. Ou seja, muito tempo perdido.

Agora validações não tem nada ver com perfeição! kkkk

Imagina o seguinte caso:
Uma pessoa tem uma ideia de um site!
Ela faz o site em um único arquivo PHP e joga pro mundo!
Sem arquitetura, sem "boas praticas"...
Mas ele roda perfeitamente, com todas as validações!

Não ta perfeito, mas ta feito!

Esse site existe ta! E o dono dele é bem famoso por isso!
https://www.tabnews.com.br/uriel/empreendedor-e-nomade-sorte-e-um-pouco-de-estrategia-de-70-projetos-4-deram-certo-pieter-levels

Hoje o site não é mais assim(um único arquivo php)! Mas ainda é PHP e sem nenhum framework e usa Jquery!

Abraços!

1

Agora validações não tem nada ver com perfeição! kkkk

Concordo, validação seria o básico do básico. Só que muitas vezes eu questionei a pessoa sobre um validação malo feita, e ela fiz: "Ah, feito é melhor que perfeito.". Foi isso que quis mostrar, que coisas essencias não devem ser tratadas como "minimos detalhes".

2

Fantástico sua visão. Hoje com a evolução da linguagens e mesmo padrões é impossível se reinventar todos os dias e o Bem feito, ajuda e muito. Temos ainda as IAs, que nos auxiliam a acelerar o desenvolvimentos, porém o mais importante é entender as nuances que que esta sendo usado como modelo para seu projeto e estudar o código, adaptar a suas necessidades e validar principalmente a segurança do código.

2

Obrigado por postar isso. É sempre necessário. Tem muitas frases que as pessoas repetem à exaustão que não são bem o que elas acham que são.

Uma frase assim pode parecer inofensiva, mas ela pode trazer problemas. Não é que eu ache ela totalmente errada, mas ela é muito vaga e pode dar margem a cada pessoa interpretar de um jeito.

E adivinha o que eu vejo muito por aí? Ela vira a desculpa para fazer algo ruim. Em muitos casos isso nem é tão consciente assim. Mas a frase está lá no fundo do cérebro da pessoa martelando que o importante é entregar o resultado. Não tem a parte do "não importa se tá bom ou ruim", mas é a consequência se a entrega passa ser mais importante.

E tem casos que a entrega é o mais importante. Mas não deve ser assim sempre.

E esse é um dos motivos por que não gosto muito o tal Minimum Viable Product. A ideia é boa, mas quase sempre as pessoas não sabem o que é o mínimo viável, e é muito comum aquilo virar um EMVP, o E de eterno (claro que terá melhorias, mas elas vão devagar, até porque mexer em um carro andando é sempre absurdamente mais complicado). O MVP é bom se a dose for certa, porque a diferença entre o remédio e o veneno é a dose.

Especialmente no contexto de aprendizado a frase não pode ser aplicada, E está sendo cada vez mais. Eu sempre lembro do Teach Yourself Programming in Ten Years do Peter Norvig. Eu nem concordo com tudo que está lá, mas é bem melhor do que fazer tudo correndo.

Reforçando o que foi dito, cada vez mais a internet está cheia de fake news. Alguém um dia disse que você deveria compartilhar o seu conhecimento, não importa se você não sabe muito, porque sempre tem alguém que sabe menos. Isso parece lindo, só que muita gente vai aprender justamente por isso. E o que a pessoa aprende primeiro ela tende a manter como certo. Em alguns casos, o que ela mais vê em vez do primeiro. E cada vez mais vemos o erro sendo postado, E sempre falo se você treina o erro é ele que fará para sempre. E isso é importante, porque também ensinará errado, e faz o errado parecer certo por ter mais gente repetindo isso. E a cada ano a gente vê isso acontecer mais. As percepções estão dominando a realidade.

Quem está começando não sabe separar o joio do trigo, não consegue entender oque é o imperfeito que pode ser deixado para depois ou nunca. Ela não sabe oque deve aprender ou não. Elas não sabem avaliar se estão direcionando ela para o bom caminho ou para o mais bonito. E por isso cada dia vemos mais frustrações na área.

O exemplo postado é bom, tem acontecido cada vez mais. A pessoa só testa o tal do caminho feliz.

Tem gente que fica brava quando eu falo isso, mas muita gente na área hoje em dia está abaixo da crítica. A pessoa consegue fazer coisas "complexas" porque é tudo ^C^V, mas não entende o'que está acontecendo. Não consegue sequer saber se o ChatGPT respondeu certo para ele (spoiler: ele responde errado quase sempre, e se você acha que a reposta está certa, eu digo, tem certeza?).

Eu só vou discordar que essas perguntas simples vão resolver o problema. Ainda que seja quase isso, mas cada situação precisará de perguntas muito diferentes e mais complexas do que estas, e muito mais perguntas. E é por não entender o todo da programação e do domínio que está trabalhando que a pessoa peca.

Com toda experiência que eu tenho ainda não faço o prefeito, mesmo tentando. Quando a pessoa acha que está bem é muito preocupante.

Há necessidade de uma mudança de atitude, não só na programação. Já falei disso em https://www.tabnews.com.br/maniero/ade53b27-8ed4-444c-83c5-de30867caa28.

Faz sentido?

Espero ter ajudado.

Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente. Para saber quando, me segue nas suas plataformas preferidas. Quase não as uso, não terá infindas notificações (links aqui).

1

Essa frase que você escreveu resume o que eu quis passar com este post:

...Ela vira desculpa para fazer algo ruim.

Como você disse, cada vez mais estou vendo as pessoas "forçarem" que a aplicação funcione, sem nem entender o que acontece. Só imaginam o cenário de um usuário fazendo tudo certo, seguindo o fluxo que você quer, e não o que pode acontecer.

2

No meu ponto de vista essa frase pode ser compreendida e aplicada de diferentes formas. Na empresa em que trabalho atualmente nós vivemos essa frase como um dos valores da empresa. Contudo a forma como a aplicamos no dia a dia não faz com que façamos a entrega de uma feature sem que consigamos garantir que aquilo funcione sem qualquer problema, ou seja: toda feature depende de teste e QA. Na maioria das vezes em que aplicamos essa frase estamos em uma situação onde não precisamos de aperfeiçoamentos, mas sim que funcione, como disse, sem erros de forma que o cliente final consiga utilizar. Aperfeiçoamentos, que INCLUSIVE envolvam UI ou melhorias de partes do código, podem ser trabalhadas depois, com uma menor prioridade.

1

Perfeito. Esse é um bom exemplo da frase sendo utilizada da forma certa. O problema é quando algo essêncial (validação de um formulário, por exemplo), é tratada como: "Ah, é só um detalhe".

2

Cara concordo, trabalho numa empresa que o foco é sempre entregar e foda-se se o código ta um lixo, e isso é horrível, vira uma bola de neve sem fim. dá até desgosto

2

Isso até me lembrou a critica aos programadores modernos que eu estava vendo. Parece que quanto maior a capacidade do pc de rodar alguma coisa, menor é a qualidade do software desenvolvido para o mesmo

2

Eu costumava ouvir muito que "o ótimo é inimigo do bom". É basicamente a mesma ideia, de que fazer algo que funciona é melhor do que perder tempo deixando tudo perfeito.

E como já disseram, isso é uma faca de dois gumes, pois muitos podem usar como desculpa pra fazer de qualquer jeito.

2

Eu concordo com a postagem, mas vejo algumas dificuldades práticas para a aplicação dessa forma mais correta.

Seguindo o exemplo do formulário, o que de fato é uma boa validação? Eu estou na área há 5 meses, mas antes disso em toda minha vida eu nunca parei para analisar sites, então faltam referências muitas vezes e sim, poderia olhar um campo e simplesmente imaginar um cenário X (como a inserção de valores negativos) e fazer um impedimento para isso, mas na prática, sem referências acho que é mais difícil de acontecer.

Mas muito legal seu ponto de vista, é algo que devemos pensar no dia a dia: "posso deixar essa aplicação melhor?"

1

Sim. Como eu disse, para quem está começando é super normal. O que não estou achando normal é uma pessoa que já está em um momento de aprender um framework como o React por exemplo ainda não conseguir enxergar isso. É um sinal de alerta.