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

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.

Carregando publicação patrocinada...
3

Lendo seu relato me identifico 100%.
Hoje tenho muito conhecimento técnico, domínio em várias linguagens (pelo menos umas 9 que me lembre) e muitas técnicas de engenharia reversa graças ao Tibia.
Aprendi muito estudando como o jogo funcionava e como interagir com ele. Essa fase foi fenomenal!!!

1

Eu acredito que jogos e as coisas que a gente ama podem ser grandes motivadores. Eu adoro Tibia também, sou encantando com os servidores privados. Fico imaginando como foi para você aprendendo com esse jogo.

2

Meu muito massa ouvir esse relato! Fico imaginando a emoção que você sentia quando cada parte do software ficava pronto pra rodar. Um dia quero ser focado desse jeito, valeu por compartilhar sua experiência!!

1

Eu ficava feliz com cada nova descoberta, foi uma loucura, mas também foi uma maravilha. Eu quis compartilhar pra motivar cada vez mais pessoas a mergulhar nesse mundo, use aqui que você para criar e aprender coisas que novas e uteis.

1

Me identifico em parte nesse seu relato. Comecei na area desenvolvendo jogos, sem ao menos saber programar. Por anos bati a cabeça sozinho tentando diversas combinações de palavras e tentando entender a lógica sozinho, e hoje vejo q todo aquele esforço valeu super a pena, talvez nao foi o melhor caminho... mas o meu conhecimento, lógica e adaptabilidade sobre os desafios q hoje enfrento estão muito fortes e pra mim pensar fora da caixa é algo normal, fazer algo na mão (escovar bit) é aceitável e algo incrível.

A única diferença (e talvez o meu erro) que na época nao era muito comum portfólios, e eu nao criei um, então muito do meu conhecimento pouquíssimas pessoas conhecem ou sabem q ele existe.