Como um jogo me ensinou a ser um dev de verdade
Sempre gosto de comentar a minha experiência, especialmente sobre meu começo na programação. Eu estava tão empolgado que mal sabia parar, fazia de tudo: todolists, Pokedex, joguinhos, o que me viesse à cabeça. No entanto, eu nunca considerei esses projetos como um portfólio de verdade, pois achava que eram apenas o básico.
A Semente do Projeto Pessoal
Apesar de não me preocupar com um portfólio, uma ideia sempre me acompanhava. Eu era usuário de Linux desde antes de programar, tinha trocado o Windows porque simplesmente o achava feio.
Lá por meados de 2020, o Linux estava explodindo sua capacidade de rodar jogos e eu estava super feliz com isso. O problema era que, no Windows, eu usava um programa assistente para League of Legends chamado Blitz.gg, e ele não existia para Linux. Isso acendeu uma faísca em mim: se o software não existia, eu mesmo o faria, e de código aberto!
Essa foi a minha saga. Eu estudava para entrar na área, mas meu foco primário era fazer esse "raio de programa" funcionar. Foram meses a fio até que comecei a me sentir confortável programando. Nessa época, eu já tinha uma base sólida em React, TypeScript, Node e C#, além de conhecer bem MongoDB e SQL. Eu sentia que dominava o mundo.
Desafios e Soluções: A Jornada Técnica
Minha primeira busca foi por uma forma de rodar JavaScript com React no desktop, e foi assim que conheci o Electron. Parecia mágica! Comecei a desenvolver o aplicativo. Em dado momento, percebi que precisava integrá-lo com o cliente do LoL e fui investigar como fazer isso.
Descobri que o cliente do LoL subia uma API Rest para comunicação. Era exatamente o que eu precisava. Uma das funcionalidades que eu mais usava no Blitz.gg era a automatização das runas no pré-partida. Embora não houvesse um método HTTP direto para isso, existiam métodos para apagar um set de runas, criar um novo e selecioná-lo. O fluxo estava claro na minha mente.
A segunda questão foi: como saber as melhores runas para cada partida? Descobri que precisava pegar informações do pré-partida. O cliente do LoL tinha um método para isso, então fiz um polling para observar o campeão selecionado. Com essa informação, eu podia buscar as runas ideais automaticamente. Era incrível!
Mas, como saber quais runas eram as melhores para cada campeão? A Riot não fornecia essa informação, mas existiam (e existem) vários sites de LoL que compilam esses dados. Eu precisava de uma forma de extraí-los, e foi aí que conheci o scraper.
Implementei o scraper para extrair os dados do site toda vez que eu selecionava um campeão. Quem tem mais experiência sabe o problema disso: o scraping leva alguns segundos, e o site em questão usava JavaScript para renderizar, o que me obrigou a usar um headless browser. A solução que encontrei foi fazer o scraping antes. Criei um novo software que rodava diariamente às 21h, pegava os dados do site e os salvava em um banco de dados MongoDB. Fiz uma API em C# que consultava esse banco para que o programa principal pudesse buscar as runas. O projeto estava completo e funcionando perfeitamente no meu ambiente local.
Dando Vida ao Projeto
Para que a API ficasse online 24h por dia, contratei uma VPS de uma empresa duvidosa com meu cartão de crédito. Eu não sabia nada sobre como hospedar uma API, mas tinha tempo e muita disposição. Comecei a aprender sobre Docker e contêineres, dockerizei a minha API e descobri que podia transformar a VPS em um repositório git para facilitar o deploy. Até fiz uma pipeline no github actions.
Contratei um domínio, aprendi sobre HTTPS e configurei o NGINX como load balancer para esconder a aplicação (depois cheguei a hospedar outros apps na mesma VPS). Integrei tudo com o MongoDB Atlas (na versão gratuita). No final, a aplicação completa estava funcional, era lindo. Decidi abrir o código no GitHub e deixar a API pública para a comunidade Linux.
A Recompensa e o Impacto
Minha maior surpresa foi a resposta do público. As pessoas usaram o aplicativo, me deram estrelas no GitHub, a API teve acessos e... bugs! Os usuários acharam os bugs e os reportaram, abrindo issues.
Fiquei muito feliz. Comecei a dar manutenção no software, corrigindo os bugs, e a comunidade adorou. Meu front em React era muito feio, mas um desenvolvedor resolveu contribuir com a parte de front-end, e assim tive minha primeira contribuição em um projeto open source.
Descobri uma comunidade que queria construir um super app de LoL para Linux e eles estavam estudando o meu código. Entraram em contato comigo e eu fui tratado como um deus no Discord (hahaha, me senti muito foda!). Esse projeto foi grandioso para mim, mesmo com apenas uns 50 usuários.
A quantidade de conhecimento que esse projeto me deu foi absurda. Quando o terminei, eu estava pronto para entrar na maioria das empresas, e tenho certeza que, sem ele, eu não estaria onde estou hoje.
Minha dica para quem está começando é: façam projetos próprios de verdade. A quantidade de conhecimento que eles agregam é enorme. Olhem a minha experiência, tudo que aprendi só porque queria jogar LoL no Linux.
Os projetos foram descontinuados porque o suporte de LoL no Linux acabou. Quem se interessar pode ver os repositórios:
https://github.com/duduisonfire/rune-maker
https://github.com/duduisonfire/RuneScrapingApi
Por fim, o mais importante de tudo: esse projeto me rendeu um feedback muito positivo do @VictorTaelin em um teste para uma vaga de estágio/Jr.. Só isso já valeu mais que tudo.