gamedeveloper

1 ano na indústria de games

Há 11 meses escrevi um post aqui sobre meus primeiros 30 dias trabalhando em uma empresa de games. Hoje faz exatamente 1 ano que comecei a trabalhar com jogos e muita coisa mudou, inclusive a empresa que eu trabalhava. Comecei como Engenheiro de Software na Glu Mobile e hoje tenho o mesmo cargo na Electronic Arts, na divisão EA Mobile. Estou tendo uma oportunidade única de expandir meu conhecimento trabalhando em uma das maiores empresas do mundo, principalmente relacionado a jogos mobile.

Há 1 ano atrás não imaginava que um dia poderia estar na EA, e há 2 anos e meio, quando estava no início do meu primeiro semestre da pós-graduação em Games do SENAC, não sabia o que esperar desta área ou onde iria trabalhar. Meu primeiro pensamento foi me tornar um desenvolvedor independente, e isso é algo que ainda quero fazer em paralelo para aprender mais. Porém, desenvolver um jogo independente divertido como requer muito tempo, dedicação e uma equipe pequena e focada. Claro que é possível desenvolver jogos independes bons em pouco tempo, mas isso ainda exige uma equipe.

Fazer jogos sozinho é muito difícil, mas você acaba aprendendo bastante. Eu, por exemplo, fiz um jogo de celular em J2ME como um projeto da pós-graduação e isso me ajudou a entrar na Glu. Porém, eu fiz apenas a programação, a arte foi feita por David Aguiar. Pouco tempo depois, portei este jogo para XNA (utilizando a mesma arte) e fui finalista no e-Games 2009. Um ano depois, fiz o meu TCC da pós-graduação com XNA, com a arte feita por Osmar de Melo Júnior, e fui finalista no e-Games 2010. Este ano pretendo participar novamente, e pelo menos chegar na final pela terceira vez.

Trabalhar na área de games nem sempre é um trabalho divertido, pois isto vai exigir muito mais de você do que ser um programador de sistemas. Você trabalha com tecnologias tão novas que nem sempre estarão em sua versão final, e talvez você encontrará bugs em frameworks e SDKs devido ao nível de conhecimento que é necessário ter para corrigir um bug ou melhorar um código do jogo. Esse constante contato com software e hardware muito novos, as vezes antes do público em geral, faz esse trabalho ser muito desafiador. As vezes pode acontecer de você não encontrar uma solução para o seu problema, por se tratar de uma tecnologia nova, e nesse caso todo o conhecimento de programação é necessário para resolver problemas e propor soluções. Falta muito para eu ser fluente em C++ e OpenGL, por exemplo, mas tenho certeza de que estou no caminho certo, pois estou sempre estudando estas tecnologias e fazendo projetos para treinar.

Hoje meu principal trabalho é com Android, mas utilizando o NDK, uma interface em C++ para programação de aplicativos. Programar para Android com Java é bem mais tranquilo do que com NDK e C++, e o Google diz que não há diferença de performance utilizando linguagem nativa, então por que utilizá-la? Simples: portabilidade. Um código bem feito em C++ pode ser usado em qualquer hardware que aceite linguagem nativa, assim não é necessário refazer muita coisa para converter um jogo de iOS para Android, ou até mesmo para PS3 e Xbox. Tudo depende de ter uma arquitetura bem feita para isolar o que é código do jogo e o que é código específico de um hardware. Esse é  mais um motivo pelo qual se exige muito do programador nesta área. Não basta dizer que sabe programar em C++ porque teve isso na faculdade, tem que saber arquitetura e engenharia de software para conseguir fazer um código reusável em diversos hardwares. Não vou me aprofundar muito neste assunto, pois quero escrever um post sobre isso e recomendar alguns livros.

Para terminar, algumas dicas importantes que aprendi nesse 1 ano na indústria de games, e que pode ser muito úteis caso você queira trabalhar com desenvolvimento de jogos:

  • Estude C++, OpenGL, Orientação a Objetos, Arquitetura de Software e Engenharia de Software! Além do básico, é muito importante fazer exercícios como pegar um código em C++ de um simples “Hello World” e fazê-lo rodar no PC, Android, Mac, iOS, e em qualquer outra plataforma que você tiver a chance de testar seu código. Pretendo fazer um tutorial ensinando como fazer um Hello World em C++ funcionar em Android e iOS em breve.
  • Funcionou no emulador? Agora teste em um device de verdade! Muita coisa, muita coisa mesmo, funciona bem em emuladores por que eles usam o hardware do seu computador, quando o teste é feito em um device de verdade os reais problemas aparecem, como pouca memória, lentidão, entre outros. A partir disso você deve entender o que fazer para otimizar seu código.
  • Funcionou em um device? Agora peça para todo mundo que você conhece testar! Isso é importante para encontrar bugs e para verificar se o jogo é realmente divertido.
  • Mantenha o código do seu jogo flexível e atualizado! Existem repositórios gratuitos onde você pode compartilhar o código do seu jogo com a sua equipe (não estou falando de um arquivo zip =p), um bom exemplo é o BitBucket.
  • Seu jogo ficou bom? Publique! Essa é uma incrível vantagem que temos hoje em dia, podemos publicar jogos para Android e iOS em suas respectivas lojas sem muitos problemas, e jogos de PC/Mac podem ser publicados digitalmente em muitos sites por ai, ou em seu próprio site.
  • Não seja ganancioso! Publique seus primeiros jogos gratuitamente, para que as pessoas possam conhecer o seu trabalho. Depois você pode lançar novas versões pagas ou até conteúdo extra pago para seus jogos.
  • Jogue! Mas não apenas jogos de gêneros que você gosta, jogue também aqueles que você não gosta. Isso é importante para você aprender como funciona determinada mecânica de jogo, e é um desafio entender e reproduzir esse tipo de coisa, além de tentar chegar no mesmo resultado (ou melhor).
  • Nunca pare de estudar! A indústria de jogos é muito dinâmica, você precisa estar sempre atualizado. Mas não apenas tecnicamente, leia também sites que falam da parte de negócios da indústria de games, como o Gamasutra e o GamesIndustry.
  • Estude Inglês! Não basta você dominar C++, para trabalhar com jogos você deve saber se comunicar em inglês. Isso pode ser decisivo para sua contratação em uma empresa de games.
  • Participe de eventos, concursos e fóruns! Eventos como a SBGames e concursos como o e-Games são muito legais e importantes para você conhecer outras pessoas, talvez até sócios para começar uma empresa ou empresas para publicar seus jogos. Fazer Networking é muito importante na indústria de games, ainda mais aqui no Brasil onde é tão pequena.
  • Visite meu blog constantemente! Tá bom, pode soar propaganda, mas aqui você encontrará muitas informações legais e úteis sobre desenvolvimento de jogos. =)

Neste semestre pretendo atualizar o blog com mais frequência. Espero que tenham gostado das informações que compartilhei, qualquer dúvida ou sugestão é só deixar um comentário!