Acham uma boa "recriar" soluções de forma própria para estudar programação na prática dando a cara-tapa?
Já fazem cerca de 3 anos e meio que eu estudo programação diariamente (óbvio que tive momentos de enjoar e ficar semanas sem tocar num editor de código), faço faculdade há 1 ano, tô no 3° semestre e parece que a faculdade sugou minha vontade de estudar programação de fato, meu GitHub tá mais esburacado que estrada, mas ultimamente parece que tá voltando aquele amor que eu sentia por ficar horas escrevendo, projetando, prototipando e colocando em prática projetos pessoais.
Enrolei por uns 3 meses pra terminar um projeto de streaming de música direto do YouTube, sem propagandas, com algumas features pra melhorar o uso, etc. Eu fiz com foco em mim mesmo pq desde que estudo programação, eu gosto de inventar soluções próprias, por mais que existam soluções já prontas pra uso. Eu sinto a necessidade me desafiar e me jogo de corpo e alma até concluir meu objetivo que é entregar algo estável e que sirva principalmente pro meu uso.
Atualmente eu estou trabalhando ativamente num projeto pessoal que se resume em um "file storage" parecido com uma cloud mas hospedado localmente, API, versão web/desktop e aplicativo, como se fosse um Google Drive ou NextCloud da vida, eu poderia ter usado coisa pronta mas senti a necessidade de me desafiar igual eu fazia antes. Eu faço os projetos separando por fases, exemplo: Fase 1: Backend, Fase 2: Frontend, Fase 3: Mobile. Anoto antes, durante e depois de terminar a primeira versão estável de tudo pra manter todas as idéias nos trilhos e comparáveis com o que eu já possuo em mãos. Esse projeto está na reta final da fase 2, faltam poucos ajustes, tratativa de erros e revisar o sistema de autenticação.
Após 1 semana trabalhando nesse projeto, me veio mais um desafio imposto a mim mesmo, um Notion, também hospedado localmente (deu pra perceber que eu amo self-hosting, né?). O maior desafio seria implementar uma forma de renderizar o Markdown em tempo-real como acontece no Notion e Obsidian, com libs prontas eu não conseguiria o que eu propus à mim mesmo, então decidi por implementar um "renderizador" que utiliza uma sintaxe parecida com Markdown, com uma mistura da estilização padrão dos tempos do MSN e alguns placeholders que eu mesmo implementei pra tornar o uso mais dinâmico.
Sempre que eu começo um projeto pessoal novo eu gosto de ir "complicando" pra me por contra a parede e sentir pelo menos um pouco da sensação de cobrança pra me obrigar a estudar, sempre aprendo coisas novas, coisas mais difíceis e sinto que isso agrega de forma muito positiva tanto pro meu conhecimento quanto meu dia-a-dia, já que minhas idéias geralmente circulam em uso próprio e resolução de problemas próprios.
Vocês também fazem isso pra estudar na prática? Parece que se forçar a fazer algo complexo de verdade tem um peso muito valioso no psicológico, você se cobra pra fazer aquilo de fato e busca mais conhecimento pra concluir seu objetivo, seja aprender uma tecnologia nova ou várias tecnologias que agregam muito.