Voltar ao blog

Hello World, dezesseis anos depois

Dezesseis anos entre não conseguir instalar o RPG Maker e liderar um time de engenharia. Os jogos que não deram certo abriram todas as portas.

  • trajetória
  • carreira
  • jogos
  • IA

Faço 31 anos em dez dias. Não é data redonda e não é marco de nada, mas foi ela que me fez sentar pra escrever isto.

Faz dezesseis anos que eu tive o primeiro contato com programação. Por boa parte deles o que eu queria mesmo era fazer jogos, e não deu — eu virei outra coisa. Olhando pra trás agora, quase toda porta que me trouxe até aqui foi aberta por um jogo que não funcionou direito.

Uma ressalva antes de começar. Eu já escrevi antes: em 2018 mantive um blog por um semestre inteiro, vinte e dois posts, porque um professor mandou. Depois parei por sete anos.

O primeiro post daquele blog era sobre um documentário chamado Hello World! Processing. O que faz este aqui ser o segundo Hello World que eu escrevo.

Então esta não é a primeira vez que eu escrevo — é a primeira vez que ninguém me obrigou.

14 anos, um Ubuntu e um Grand Chase

Meu primeiro computador veio das Casas Bahia — ou de alguma loja parecida, não lembro. Não lembro a configuração também. Lembro de uma coisa só: ele veio com Ubuntu, e eu reclamei demais com os meus pais que não dava pra usar aquilo.

(Hoje eu sou defensor de Linux. Minha mãe, que é artesã, usa Mint por minha causa.)

O que eu queria era jogar Grand Chase (abre em nova aba). Não era só eu: o servidor brasileiro do jogo chegou a ser o maior do mundo, com 39.500 jogadores simultâneos no recorde. Então meus pais pagaram um rapaz da rua que formatava computador, e ele instalou um Windows XP pirata na minha máquina.

Não deu muito certo. A internet lá em casa era via rádio, com uma antena gigante em cima do telhado, e qualquer vento dessincronizava a antena. Eu ficava muito frustrado com isso.

Foi mais ou menos nessa época que eu comecei a me interessar por desenvolvimento de jogos. Baixei algum RPG Maker — não consigo lembrar qual, mas acho que não era o mais moderno. Por algum motivo não consegui instalar. Tentei várias coisas que li em fórum, nada. Fui pra outro, e esse também não pegou de primeira. Não preciso nem dizer que não eram originais, né? Talvez a dificuldade fosse aí.

Consegui entrar no software. E aí: o que fazer?

Eu não sabia onde clicar, não sabia o que escrever, nem como escrever. Não tinha youtuber indiano como tem hoje. Não tinha IA. Não tinha quase nada em português — o pouco que tinha era texto, e em inglês. Eu tentava copiar coisas de um site ou outro; umas funcionavam, outras não.

Só me frustrei. Era extremamente difícil, e eu abandonei aquilo por alguns anos.

Cinema, e uma optativa chamada Laboratório de Jogos

Quatro anos depois eu decidi fazer Cinema e Audiovisual na UFC, para o desgosto do meu pai, que achava que eu ia ser engenheiro. Ele só errou o quando.

Pra encurtar: o curso não tinha a ver comigo. Era especificamente como a UFC conduzia ele.

Mas na grade, por algum motivo, tinha uma disciplina chamada “Laboratório de Jogos”. Sim, Laboratório de Jogos, num curso de cinema. Fui conferir agora e está lá até hoje, na matriz curricular do curso (abre em nova aba), como optativa de quatro créditos. Optativa, ou seja: eu escolhi.

Eu já estava no quarto semestre e ia pro quinto, que foi o último antes de eu largar o curso. Tinha 20 anos. Decidi fazer a disciplina pra ver no que dava.

E lá estava o meu terror: RPG Maker. Dessa vez pior, porque agora eu tinha que fazer alguma coisa que funcionasse.

A disciplina não foi boa. Pelo contrário. A professora claramente não queria ministrar aquilo, provavelmente porque não sabia o que fazer — ela era professora de fotografia, e boa professora de fotografia, mas não sabia nada sobre o que é preciso pra fazer um jogo, muito menos programar. Mas eu lembro dela se esforçando demais pra ajudar todo mundo.

O trabalho era em grupo, e ninguém ali sabia muito bem o que estava fazendo. Meu papel era o programador. Eu estava tentando fazer o meu melhor.

Depois eu entrei no sistema e vi que tinha passado com 10, e 100% de frequência. Eu não lembro de ter ido a todas as aulas. E lembro que o jogo mal funcionava direito, mesmo com toda a facilidade do RPG Maker.

No fim eu me senti mal com a entrega.

Mas foi nessa disciplina que eu dei tudo de mim. Mesmo tendo que aprender tudo por fora, mesmo frustrado — foi isso que me motivou a continuar. E por algum motivo aquele esforço me abriu os olhos pra um outro curso, na própria UFC: Sistemas e Mídias Digitais (abre em nova aba).

Foi aquela disciplina que me fez mudar de curso. Ir pra algo onde eu pudesse me expressar através do código e me envolver minimamente com criatividade, que é o que eu gosto.

SMD, onde mudou tudo

Em SMD foi onde mudou tudo. Mas não entrei de primeira: eu sempre fui horrível no estilo de prova do ENEM, então tive que fazer um ano de cursinho antes de conseguir.

SMD é Sistemas e Mídias Digitais, e é um curso que quase ninguém conhece — nem aqui no Brasil. A ideia dele é ficar no meio do caminho: design, programação, audiovisual e jogos na mesma grade. Os três primeiros semestres são base, e depois você escolhe uma trilha entre comunicação em mídias digitais, sistemas de informação multimídia e jogos digitais. Interação humano-computador e experiência de usuário atravessam tudo.

Logo no começo do curso vieram duas pancadas ligadas a desenvolvimento. As duas me desafiaram, e eu gostei — foram elas que me fizeram seguir na área.

Programação I, e um histograma da Gretchen

A menos glamurosa e mais importante foi Programação I, com a professora Mara — que anos depois viria a ser minha orientadora num artigo que publiquei, sobre descrição e comparação de jogos digitais para auxiliar no ensino de programação.

Diferente da maioria das introduções a programação em universidade e em curso, essa era ministrada em Processing (abre em nova aba). Processing é uma linguagem e um ambiente criados em 2001 por Ben Fry e Casey Reas, no MIT Media Lab, com um objetivo declarado: ensinar os fundamentos de programação dentro de um contexto visual. Os programas ali se chamam sketches, a sintaxe é baseada em Java, e o vocabulário é de forma, cor e geometria.

Na prática isso queria dizer que era muito mais divertido do que olhar pra um terminal sem vida. Ali a gente fazia círculos — ou qualquer outra figura geométrica — serem desenhados na tela. Muito mais lúdico, muito mais interessante.

Tenho certeza de que, se a maioria das introduções a programação fosse assim, seria… bem, menos difícil aprender a programar.

Mas fico me perguntando se hoje, nos tempos de IA, a gente ainda precisa aprender o básico. Não sei. Não consigo dizer. Sei que a mim ajudou, e muito.

Apesar de eu gostar da disciplina, ela não foi fácil. Passei com 8.2 — inclusive uma das minhas menores notas do curso inteiro.

E nunca vou esquecer a prova de reposição que fiz por ter faltado a uma das provas, doente. Era simples, pelo menos pra hoje. Uma questão e uma imagem:

Desenhe um histograma para cada tom de cinza na imagem da Gretchen na pasta da prova.

Hoje isso é trivial. Na época foi tenso.

let img;

async function setup() {
  createCanvas(512, 300);
  background(255);
  img = await loadImage('gretchen.png');

  const contagem = new Array(256).fill(0);
  img.loadPixels();
  for (let i = 0; i < img.pixels.length; i += 4) {
    const cinza = round(
      0.299 * img.pixels[i] + 0.587 * img.pixels[i + 1] + 0.114 * img.pixels[i + 2],
    );
    contagem[cinza]++;
  }

  const maior = max(contagem);
  stroke(0);
  for (let tom = 0; tom < 256; tom++) {
    const altura = (contagem[tom] / maior) * height;
    line(tom * 2, height, tom * 2, height - altura);
  }
}

Esse código não é Processing, é p5.js (abre em nova aba) — a releitura do Processing para a web, feita por Lauren Lee McCarthy em 2013. Coloquei em p5 porque roda no navegador: dá pra colar e ver funcionando sem instalar nada. Testei na versão 2.3.2, que é a atual.

O jogo que eu programei cinco vezes

A outra pancada foi mais legal: Introdução a Sistemas e Mídias Digitais.

A nota dessa disciplina era a soma das outras quatro do semestre, e o que a gente tinha que entregar era um jogo.

Não vou entrar em muito detalhe sobre o jogo. Ele foi feito em GameMaker, e eu engoli o manual pra fazer aquele jogo. Quero dizer: aqueles jogos. Eu amei tanto programar aquilo que programei o da minha equipe e o de pelo menos outras quatro. E não cobrei nada. O código do meu jogo está espalhado por várias equipes até hoje.

O da minha equipe ficou pronto dois meses antes do prazo, de tanto que eu me entreguei àquilo. Pronto de programação — na tela ainda era quadrado e círculo, porque arte não tinha.

Nossos artistas fizeram o favor de mandar a arte final no penúltimo dia. Eu e uma amiga, a outra programadora da equipe, viramos a noite encaixando aquilo no jogo por conta da irresponsabilidade dos outros dois. Entregamos completo, com as artes no lugar.

Por isso não vou me ater ao jogo. Mas foi essa experiência que me fez decidir de verdade seguir carreira com programação.

A empresa júnior, e uma descoberta sobre mim

Ainda no segundo semestre eu entrei na empresa júnior. Comecei como programador fazendo plugin de WordPress e saí de lá gerente de projetos. Foi nessa experiência que eu entendi que tinha uma inclinação para gestão, para além do operacional.

Mas uma coisa continuava me incomodando: desenvolvimento de jogos. Eu ainda queria trabalhar com isso. Dois semestres depois eu ia fundar a primeira empresa júnior de desenvolvimento de jogos do Brasil — acho que do mundo, mas isso eu não consigo comprovar. Chamava, sim, infelizmente chamava, TGD Studio (abre em nova aba). The Guardian Dog Studio. Já já eu volto nela.

O semestre que resolveu

Foi também no segundo semestre que eu escrevi o artigo com a professora Mara, para uma revista científica com Qualis. A gente recebeu menção honrosa.

E foi o semestre de Programação II e de MAM1 — leia “Mami”, Matemática Aplicada a Multimídia 1. As duas disciplinas de programação mais incríveis que devem existir num curso superior.

Dá pra ver boa parte do que eu fiz na época. Os professores pediam que a gente registrasse tudo num blog, e o meu ainda está no ar (abre em nova aba): vinte e dois posts, todos do primeiro semestre de 2018.

Entrei de novo agora pra escrever isto, e tem coisa que eu já tinha esquecido:

  • O primeiro post é de março de 2018 e relaciona exemplos da biblioteca do Processing com o documentário Hello World! Processing
  • MAMI 6 era desenhar a bandeira do Brasil seguindo a Lei Federal nº 5.700 (abre em nova aba). Proporção, cor e posição de estrela definidas em lei, e o código tinha que obedecer
  • MAMI 4 era pegar um programa que rodava a 1 FPS e fazer o mesmo programa rodar a 60, sem mudar o comportamento
  • MAMI 12 era o diagrama da rosa, de Florence Nightingale
  • MAMI 18 era simular um harmonógrafo
  • E o de Programação II foi o protótipo de aplicativo de desenho, feito com a Gabriely Rodrigues: escolher a cor, quatro formas de traço, e salvar em .jpeg, .png ou .tiff

O trabalho final de MAMI foi um remake de Flash Gordon, do Atari 2600, de 1983, e eu entreguei ele em vídeo, narrando por cima. Embaixo do vídeo tem um aviso que me pegou de surpresa relendo agora:

Algumas informações que falo estão erradas, mas corrigi na legenda ou nos créditos.

Ou seja: eu narrei, percebi depois que tinha falado besteira em alguns pontos, e em vez de regravar eu corrigi na legenda e avisei. Tinha 22 anos e já estava publicando errata.

MAMI era — e eu acho que ainda é — a disciplina obrigatória mais difícil do curso. Passei com 11.8, e só não foi mais porque deixei de entregar um trabalho. Os professores da época davam trabalhos que valiam ponto direto na média, então dava pra passar de 10.

Esse semestre foi o que firmou minha entrada na área de desenvolvimento.

TGD, e o que eu aprendi sem programar

Não vou falar do curso todo, nem de todos os pontos altos. Mas dois eu acho importante citar.

O primeiro é a TGD, que foi o projeto que mais me trouxe conhecimento até hoje. E lá eu praticamente não programei nada além do site.

Eu tive que aprender como se abre uma empresa. Tive que sair atrás de mentores da área. A gente conseguiu contato com pessoas que fizeram parte dos primeiros times do Xbox no Brasil e com devs de jogos AAA. E lançamos um jogo, que hoje não está mais nas lojas — mas que ganhou Melhor Jogo Cearense.

O TCC, que não foi sobre programar

O segundo é o meu TCC, que não teve nada a ver com programação, e sim com gestão. Eu pesquisei a efetividade de metodologias ágeis aplicadas a desenvolvimento de jogos de escopo pequeno.

O resultado foi: siga o método ágil, não uma metodologia estabelecida. Cada caso é um caso.

Os livros, e o primeiro emprego

No fim da universidade tiveram dois marcos que começaram de fato a mostrar resultado do conhecimento que eu tinha juntado — não só no curso, mas dos estudos por fora.

Eu leio bastante. Ainda na faculdade eu já tinha lido o Clean Code do Uncle Bob, o Refactoring, o The Pragmatic Programmer, entre outros livros desse patamar.

Consegui meu primeiro emprego como Júnior I, e em menos de um ano eu já era Pleno III. Não porque eu tenha aprendido tudo em um ano — quando entrei, eu já tinha bastante conhecimento. O que faltava era mostrar ele aplicado.

Foi ali que eu comecei a odiar projeto sem teste. Mesmo sem TDD, teste era importante. E os meus eram muito ruins: quebravam às vezes. Mesmo com o conhecimento, faltava a prática de escrever, e escrever, e escrever.

Do primeiro dia ao último a evolução foi monstruosa, e o que ficou de legado foi um Omnichannel com o mínimo de segurança em certas partes.

Eu peguei a época dos templates do WhatsApp. Lembro de ter um telefone ali só pra ligar pro WhatsApp e entender por que um template não tinha sido aprovado. Era uma loucura. A empresa ainda estava no começo, e os donos também estavam aprendendo tudo.

Mas foi a primeira vez que eu senti: “ei, o que esses caras falam nesses livros dá certo”.

Teodoro, vinte dias

Nessa mesma época eu lancei um jogo na Steam com um colega: o Teodoro (abre em nova aba). A gente fez em vinte dias.

É um sokoban com arte desenhada à mão, e saiu em 7 de março de 2021 pela CosMonkeys. Tiramos uma grana bacana pro esforço.

Aqui eu programei bastante. Mas também cuidei de todo o marketing, da parte legal com a Steam e do financeiro.

Anos depois a gente vendeu os direitos do jogo para outra empresa. Ele continua na loja até hoje, publicado pela Gray Boss.

E foi nele que eu consegui aplicar os conceitos dos cabeças-brancas num projeto do zero, e ver as coisas que eles falavam acontecendo.

O que veio depois, em três pontos

Daqui pra frente não faz muito sentido descrever ponto a ponto. Foi muito mais uma consolidação do conhecimento das leituras extras e da aplicação delas. Mas vão três marcos.

A campanha de lançamento mundial de Diablo Immortal. A Bugaboo Studios, onde eu estava, prestou serviço para a empresa responsável pelo lançamento — mas quem desenvolveu o app fomos nós. Ele reconhecia um pentagrama e levava pro link de download, e a ação começava 6 dias, 6 horas e 6 segundos antes do jogo sair. O jogo saiu em 2 de junho de 2022.

Lembro de ver a live do Rato Borrachudo desenhando o pentagrama com alguma coisa na barriga, acho que batom. A gente não tinha testado esse tipo de coisa, e Machine Learning ainda não era especialidade nossa. Mas acabou que deu certo.

Uma startup spinoff de um hospital de saúde mental. Entrei e logo assumi o cargo de tech lead — não só da startup: subi para cuidar do hospital também. Ali a gente cuidava de vidas, então o software era crítico. Não dá pra falhar com a vida das pessoas. Foi ali que o TDD entrou de vez na minha vida, e o código já era bom.

Meses depois eu saí do hospital, por motivos internos. Logo em seguida ele foi vendido: o Instituto do Câncer do Ceará (abre em nova aba) comprou a startup e o hospital, e me contratou para fazer a transição das tecnologias. O ICC foi fundado em 1944 por dez médicos e um padre, e é a única instituição do Ceará no Conselho Consultivo do INCA.

Hoje, geração distribuída de energia. Uma gestora de usinas — a maior em número de usinas e de beneficiários atendidos pelas usinas que a gente gerencia. Lidero um time de 11 pessoas, com zero turnover em nove meses. A gente foi de zero testes a mais de oito mil, de três projetos ativos no GitHub a mais de vinte, e migrou de AWS, Render e outros provedores para o GCP, com redução de custo. A quantidade de bugs caiu junto.

A IA, e a acusação

No ano passado me acusaram de ser contra IA. E eu era, em várias áreas.

Até o fim do ano passado, o que ela gerava era uma porcaria. Dava pra usar num script ou outro, mas não pra criar software seguro e escalável.

A tecnologia foi mudando, e o meu uso mudou junto. Eu sou profissional: tenho que ser profissional, não apenas parecer. A ferramenta chegou a um nível aceitável, então o uso passou a ser mais intenso. Hoje às vezes eu tenho quatro janelas de chat criando soluções diferentes ou resolvendo problemas ao mesmo tempo.

Mas eu não confio cegamente na geração.

É por isso que hoje a gente faz o que eu sempre sonhei fazer e nunca tinha conseguido levar até o estado da arte que agora é possível: dezesseis pipelines de teste, 100% de cobertura em teste unitário e 90% nos outros, lint, e uma biblioteca que eu escrevi — o archwarden (abre em nova aba) — para garantir que a arquitetura seja seguida. Tudo com os processos de Developer Experience aplicados.

Eu amo, e não tenho problemas. Meu time ama, e não tem problemas.

A gente não escreve mais código. A gente traduz negócio em especificação, 100% reproduzível.

O MBA, e a escola que realmente funcionou

No começo deste ano eu concluí meu MBA em Engenharia de Software na USP.

É um excelente MBA — mas não porque eu aprendi muita coisa lá. Foi o contrário: eu aprendi pouco. E aprendi pouco porque já tinha passado por todas as dores que eles ensinam a tratar. Negócio, UX/UI, Machine Learning, LGPD. Tudo isso eu já tinha visto em SMD e depois na vida profissional.

Quase todos os professores são excelentes, e o conteúdo é condensado mas de altíssima qualidade. Eu recomendo, mesmo tendo me ajudado pouco.

E nele eu voltei pra jogos mais uma vez. Meu TCC foi o desenvolvimento de uma engine, a TYPE (abre em nova aba). Super longe do que eu trabalho hoje — e mesmo assim ela me fez aprender mais do que o resto do curso inteiro.

Aí ficou clara uma coisa pra mim: desenvolvedor de jogos é o dev de elite da nossa categoria. Eles têm os maiores problemas, precisam ser mais criativos, e são tão pouco lembrados ou reconhecidos fora do meio de jogos.

Mas, para além do desabafo, isso deixa clara outra coisa: fazer jogos foi a minha melhor escola. E eu acho que deveria ser a melhor escola para a maioria — porque ali você precisa ser criativo e forçar os neurônios. Não tem a repetição que tem em construir mais uma aplicação REST.

O que eu acho que vem

Não sei o que vai ser das novas gerações de desenvolvedores. Mas acredito que, pra chegarem a patamares mais altos, elas vão precisar fazer o que eu faço: ser curioso desde o primeiro dia. Não aceitar a resposta dada por alguém, mesmo que venha de um livro consagrado — ir lá, testar, experimentar e aperfeiçoar.

Programador não vai desaparecer. Quem só gostava de escrever código, sim. Os bons vão ter que ser mais curiosos sobre o que resolvem, sobre como fazer algo que tenha boa DX pra eles e pra IA, e que ainda entregue grande valor pro cliente.

Voltar ao topo