Pesquisar a melhor forma de resolver o problema?

Iniciante Pessoal recentemente comecei um projeto pessoal, tive a ideia de ver videos de como fazer aquilo, mas percebi que estava apenas copiando e colando, daí comecei tudo de novo, só que agora "inventando" a lógica que preciso pra resolver o problema, e pesquisando algo em específico se precisar.

Me tirem a dúvida, é melhor eu pesquisar a melhor forma de resolver o problema e tentar entender e reproduzir, ou "reinventar a roda" do meu jeito pra resolver o problema? e depois com o tempo eu me adequo a padrões e boas práticas.

Por exemplo: inventar uma lógica de cadrasto de usuário ou usar um padrão já existente na área.

O que vocês acham sobre isso?

Se for para aprender como algo funciona, principalmente os detalhes "por debaixo dos panos", então reinventar a roda é um ótimo exercício.

Mas pra código sério em produção, eu diria que, como regra geral, o melhor é não inventar demais. Sabendo os fundamentos (algoritmos, estruturas de dados, lógica, etc), vc perceberá que muita coisa é só variação e combinação deles. A maioria dos problemas comuns do dia-a-dia já foi resolvida, com soluções testadas e aperfeiçoadas ao longo de décadas. Muitas rodas já foram feitas e são comprovadamente boas para várias situações recorrentes da nossa profissão.

Um exemplo clássico é criptografia. Todo mundo já pensou em fazer sua criptografia caseira, com algum algoritmo ingênuo que só parece seguro, mas não é. Não invente, use o que já tem pronto, que inclusive foi feito por especialistas muito mais inteligentes que eu e vc.

Outro exemplo é usar regex para fazer parsing de HTML (ou JSON, ou qualquer outro formato estruturado). Não, já existem parsers específicos para cada um destes formatos, que funcionam muito melhor que qualquer regex. Não insista.


Claro que isso é a regra geral. Mas o mais importante é saber que, se houver uma boa justificativa técnica (embasada por uma boa análise dos prós e contras), essas regras podem ser quebradas. Não tem jeito, pra muita coisa na nossa área (senão pra tudo), a resposta é "Depende".

Às vezes vc precisa reinventar uma parte da roda, porque as que existem não giram da maneira específica que vc quer. Mas às vezes vc não tem tempo e/ou conhecimento para reinventar. Às vezes vc precisa de uma roda quadrada, mas às vezes vc só achou que precisava, porque a roda tradicional resolvia o problema e vc que não percebeu. Cada caso é um caso.

Usa a vontade o que já tem feito mas tenta entender o que ta rolando no código para aprender. O mais importante é finalizar o projeto e aprender com ele.

Vlw! Boa sorte ai!

Acredito que em ambiente de aprendizado vale tudo. Se você sente que está aprendendo mais "criando suas prórpias regras", ótimo. Realmente é bem melhor que apenas copiar código dos outros o tempo todo.

Mas é importante sempre ter em mente que, no mundo real, você vai acabar copiando muito código pronto (seja da internet, seja do próprio projeto que você está trabalhando e que algum programados codou antes), tudo pois precisamos manter um padrão, e a grande maioria das empresas querem seguir modelos que já funcionam, do que recriar a roda.

Sobre "mudar as regras do login", uma vez eu experimentei fazer um projeto onde a pessoa poderia cadastrar o mesmo e-mail mais de uma vez, desde que a a senha fosse diferente. Assim, dependendo da senha usada ao logar, a pessoa teria acessos e permissões diferentes. Foi uma coisa boba mas divertida de fazer.

inventar uma lógica de cadrasto de usuário ou usar um padrão já existente na área.

Usar um padrão já existente na área a menos que tenha um motivo muito bom para "reinventar a roda".

Isso são desde as famosas design patterns. Mas tbm são as libs, frameworks, linguagens, banco de dados, SOs, protocolos.

No fundo o mundo digital moderno é construído assim. No frontend de qualquer aplicação web média devem existir dezenas ou centenas de pacotes importados do npm. Em alguns projetos simples já verifiquei que existiam mais codigo importado do que fonte. Vale mencionar o codigo copiado so stackoverflow tbm? Existem tbm todos os outros niveis de abstração que estamos usando de soluções prontas em uma aplicação web. Se você entra nessa pira de reiventar a roda, aonde você vai parar, vai querer reiventar o processador e a internet também? Claro que não né.

Dito tudo isso, aprender como as coisas funcionam por "debaixo do panos" é FUNDAMENTAL e sim implementar é a melhor aprender, mas não é a única. Estudar bastante sobre processadores e os protocolos envolvidos na internet com certeza vão te fazer um profissional melhor, mesmo que você não tenho os reinventados.