Não reinventar a roda
Quantas vezes você já ouviu ou pensou nessa frase ao começar um novo projeto ou estudo? Durante um bom tempo, segui essa filosofia religiosamente. Sempre que queria aprender algo novo, criava pequenos projetos só para estudar — mas evitava "reinventar a roda".
Foi então que percebi algo importante: nem sempre essa frase é útil quando o seu objetivo é aprender de verdade.
Um exemplo claro: ha um tempo atras, comecei a estudar como browsers funcionam por baixo dos panos. Estava super empolgado, queria entender a fundo. Mas, como sempre ouvi que "não vale a pena reinventar a roda", então para evitar um bom trabalho que iria ter , peguei o electron e uma lib qualquer e pronto um browser simples e funcional.
O problema? Eu não aprendi praticamente nada sobre como um browser realmente funciona. Aprendi, sim, como usar uma lib. Como usar o Electron. Mas esse não era meu objetivo.
Por isso, se você também tem curiosidade genuína por como as coisas funcionam, cuidado com essa frase. Ela faz sentido em contextos de produtividade, mas pode atrapalhar no aprendizado.
Nem sempre o objetivo é entregar algo funcional no menor tempo possível. Às vezes, o valor está justamente em fazer do zero, quebrar a cabeça e entender o processo.
Por isso o conselho que eu dou é, se o seu objetivo e realmente aprender algo e não criar algo o mais rápido possível, quebre a cabeça, reinvente a roda.
Já desenvolvi dois frameworks na minha trajetória. Precisei superar essa barreira conceitual, pois meu objetivo era entender, na prática, como as coisas funcionam. Fiz esse investimento, e não me arrependi: aprendi inúmeras lições valiosas que impulsionaram minha carreira. Muitos que me criticaram ainda não conhecem os bastidores do desenvolvimento. No entanto, não julgo—cada um escolhe o nível de aprofundamento que deseja alcançar. Para mim, essa experiência foi extremamente válida!
Pedi para a IA gerar uma imagem sobre o que eu penso, ficou uma bosta mas acho que dá para pegar a ideia... e porque "não reinventar a roda" é a maior falácia que existe. Não reinvente o ato rolar. Crie sua própria roda sempre que for útil =)
prompt: make a image with differnt type of wheels make sure each is distinctive
Isso é verdade! Um dos primeiros projetos pessoais que eu fiz, foi basicamente uma cópia de funcionalidades do JQuery e do visual do Material Design, e eu aprendi muito sobre o funcionamento do JavaScript, DOM, frontend no geral.
Brincando assim eu descobrir como um servidor funciona, a ideia era criar uma interface grafica pro bash, então vi que algumas soluções eram em terminais, ou que dependiam da distribuição, de pacotes, etc.. foi então que tiver a ideia de fazer uma interface web, porem dependeria de um servidor, seria trabalhosso montar um servidor web pra criar uma interface! Então pesquisando descobrir o ncat, com uma linha ele faz um servidor, ai tive que tender como funciona os protocolos para trocar informações dados, etc. aprendi a stremar, como funciona carregamento de videos, pedaços de dowload, etc.. Acabou que consigui aprender muito mais por não só querer usar o que tava pronto mas descobrir muita coisa lega! Quem me conhece sabe que gosto de recriar tudo, ou pelo menos entender tudo sobre algo a ponto de entender tudo! E geralemente não gosto de libs, senao as que crio, claro que muitas tem falhas em alguns aspectos, mas cumpre o proposito, hoje consigo montar um servidor facilmente ter acesso a tela do meu pc sem nenhum software de tela ehehe, consigo trafegar dados de maneira segura, usando o que eu criei, e isso fazendo algo que parecia impossivel, acaba-se aprendendo muito mais.. Esse mundo da programação é top demais!!
Tenho um amigo que sempre brinca quando digo que gosto de construir tudo do zero. Ele costuma dizer que não devemos reinventar a roda. No entanto, para mim, essa prática representa um processo de evolução contínua. Quando se trata de utilizar ou não frameworks prontos para desenvolvimento, prefiro criar meus próprios códigos desde o início. Embora ele insista que não devemos reinventar a roda, vejo isso como uma oportunidade de aprendizado e aprimoramento.
Meu interesse em desenvolver do zero vai além da simples escolha de ferramentas; trata-se de entender profundamente o funcionamento do código. Ao evitar o uso de bibliotecas ou frameworks de terceiros, posso identificar e resolver problemas com mais facilidade no futuro. Essa abordagem me permite personalizar soluções de acordo com minhas necessidades específicas, garantindo que o código funcione exatamente como imaginei.
Não me preocupo com a aprovação de outros em relação ao meu estilo de codificação. Todos os projetos que desenvolvo são para uso pessoal, e quando trabalho em projetos para clientes, busco alinhamento com meus métodos de desenvolvimento. O objetivo não é impressionar outros com o código ou as bibliotecas utilizadas, mas sim garantir que a solução funcione de maneira eficaz e eficiente.
Imagine investir dias em um projeto e, com o tempo, ele parar de funcionar devido à descontinuação de uma biblioteca ou framework que não é mais compatível com as versões atuais dos navegadores. Nesse cenário, seria necessário refazer tudo do zero ou buscar alternativas? Para mim, a verdadeira habilidade de um desenvolvedor está em criar soluções próprias e entender profundamente o código que escreve.
que interessante, recentemente Augusto galego postou um vídeo relacionado ao seu post, inclusive ele explica como um browser funciona.
https://youtu.be/fv_B3FTXwxo?si=_FXCrtIl3meAN10J
também tem outro video sobre reinventar a roda, vou deixar aqui para quem se interessar
Reinventar a roda é fundamental para aprender qualquer coisa. É a prática a partir de um conceito conhecido. Fazer uma roda te coloca em vantagem sobre quem apenas vê ou usa uma roda.
Nesse sentido, agora virou modinha criticar quem implementa sua própria Auth. Isso é visto como reinventar a roda porque é mais fácil terceirizar a autenticação para o Google e Microsoft, por exemplo. Há também uma série de empresas SaaS de autenticação/autorização que vendem seus peixes dizendo que ninguém pode se atraver a implantar Auth próprio. Claro, eles querem faturar.
Porém, ao se render a isso, o dev perde a chance de realmente aprender como funciona esse processo que é unipresente em tech (assim como é a roda no setor de transportes). Desenvolver sua infra de Auth te coloca à frente de quem apenas integra e usa serviços de terceiros.
Esse é dos pontos que vou abordar no primeiro vídeo do meu canal. Essa é uma das boas práticas erradas que divulgam por aí.
Claro que se você reinventar a roda e ela for quadrada não é para reinventar mesmo, mas se ninguém reinventasse a roda estíamos usando uma roda de pedra até hoje.
E o Electron é um dos exemplo de reinvenção de roda quadrada :D
Um dos maiores objetivos de reinventar a roda é o aprendizado, geralmente ninguém fala isso. Outro é criar inovação, seja ela qual for, até pequena, até bem específica, mas pode ser por outros motivos, especialmente quando a roda não é adequada e/ou possui falhas que você pode consertar. Tudo é questão de contexto e entregar valor, algum valor, a ser definido, não tem receita de bolo universal.
S2
Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente (não vendo nada, é retribuição na minha aposentadoria) (links aqui no perfil também).