;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL

Topo

Da engenharia para os games: o brasileiro que trabalha com Gears of War

Felipe Almansa, 32 anos, é gerente de marketing de produto na Microsoft - Rodrigo Lara/UOL
Felipe Almansa, 32 anos, é gerente de marketing de produto na Microsoft Imagem: Rodrigo Lara/UOL

Rodrigo Lara

Colaboração para o START

25/10/2019 04h00

Quem vê o brasileiro Felipe Almansa trabalhando com "Minecraft" e "Gears of War" não imagina que, na verdade, ele é formado em Engenharia Elétrica, com mestrado no Instituto Tecnológico de Aeronáutica (ITA).

Durante a BGS 2019, o START conversou com o brasileiro de 32 anos, que mora nos Estados Unidos, para entender como é possível seguir a carreira que é sonho de muitos gamers. Spoiler: não existe um caminho pronto, mas algumas dicas podem ajudar!

Gears 5 Felipe - Divulgação - Divulgação
"Gears 5" é o lançamento mais recente da série "Gears of War"
Imagem: Divulgação

Um sonho distante

"Eu sempre fui apaixonado por jogos, desde criança, mas nunca parei para pensar em trabalhar com isso. Era algo muito distante, mas eu sempre tive a curiosidade de saber como os games funcionavam", conta Felipe, gerente de marketing de produto da franquia "Gears of War". "Então acabei indo por um caminho mais ligado à engenharia, tanto que fiz Engenharia Elétrica".

Mas como foi essa trajetória?

Depois de estudar Engenharia Elétrica, ainda no Brasil ele iniciou um mestrado em Engenharia Aeronáutica no Instituto Tecnológico de Aeronáutica (ITA). Durante o curso, ele inicialmente trabalhou com Engenharia de Desenvolvimento de Produto e depois desempenhou atividades ligadas a marketing na Embraer. Até aí, a única relação com games vinha da infância. "Quando eu tinha uns dez anos de idade, fui em uma livraria e lá tinha um demonstrador do 'Flight Simulator'. Eu joguei e até consegui decolar o avião", conta.

Não ava pela minha cabeça trabalhar com jogos. Era só um sonho de criança, nada planejado
Felipe Almansa, gerente de marketing na Microsoft

A carreira começou a mudar em 2016, quando Felipe decidiu fazer um MBA nos Estados Unidos. Durante o curso, ele conheceu pessoas que atuavam na indústria de games.

"Comecei a mudar aquela ideia de que atuar com desenvolvimento era a única maneira de trabalhar com jogos, e descobri diversas funções que podem ser desempenhadas, como o marketing". Como já havia atuado nessa área, ele resolveu apostar e se candidatou a um emprego na divisão Xbox da Microsoft. "Quando recebi a resposta, acordei todo mundo no Brasil", brinca.

Minecraft - Reprodução - Reprodução
Imagem: Reprodução

De lá para cá, Almansa já trabalhou com franquias de peso. "Meu estágio foi com 'Minecraft'. Já como gerente de marketing de produto, o primeiro game foi o novo 'Flight Simulator'. Em seguida foi a vez de 'Ori and the Will of the Wisps' e, agora, com a franquia 'Gears of War'", conta, ressaltando que o que mais gosta por trabalhar com uma franquia como "Gears" é ver a paixão da comunidade, tanto de quem joga quanto de quem produz o game.

Como momento de destaque da carreira até o momento, Almansa cita uma agem que o fez lembrar de quando lia revistas de games na adolescência. "Estar na E3 deste ano, a minha primeira, e ver games com os quais eu trabalhei sendo apresentados no palco, foi algo que me fez voltar no tempo para a época que eu corria para as bancas para ler as novidades apresentadas na feira", diz.

E3 Microsoft - Mark Ralston/AFP - Mark Ralston/AFP
Felipe menciona a E3 2019 como uma "volta à infância", quando comprava revistas para ler sobre o evento
Imagem: Mark Ralston/AFP

4 os para chegar lá

Como não poderia deixar de ser, também perguntamos para Almansa quais conselhos ele daria para quem quer "chegar lá" quando o assunto é trabalhar com games. Confira:

1 - Converse com quem já trabalha na indústria

Às vezes você tem o sonho de trabalhar no desenvolvimento de games, mas conversando com alguém descobre que se interessa mais pela parte de design, não de programação. O networking é uma boa forma de descobrir funções e saber exatamente o que cada uma delas faz.

2 - Trace um caminho

Uma vez definido o que você quer fazer, fica mais simples traçar o caminho até o seu objetivo. Tanto uma abordagem direta, que te dê uma formação relacionada diretamente com games, quanto uma indireta - como a feita por Almansa -, acabam fazendo sentido especialmente em um cenário em que a diversidade de pensamentos, bagagens, culturas e formações são pré-requisitos para qualquer empresa que deseja crescer.

3 - Não fique preso à sua formação

O caso de Almansa é emblemático: o rumo das carreiras está cada vez menos preso à formação inicial da pessoa. Nada impede, portanto, que um engenheiro acabe se sobressaindo em marketing, ou que um jornalista se torne um desenvolvedor de jogos. É importante, portanto, a pessoa estar aberta a novas possibilidades de atuação.

4 - Esteja preparado

Almansa destaca que, mesmo que você tenha um plano, dificilmente tudo acontecerá de acordo com ele. Então é importante apostar em formação - das mais específicas às mais generalistas, como cursos de línguas, que acabam ajudando em diversos aspectos - para estar preparado quando a oportunidade surgir.

SIGA O START NAS REDES SOCIAIS

Twitter: https://twitter.com/start_uol
Instagram: https://www.instagram.com/start_uol/
Facebook: https://www.facebook.com/startuol/
TikTok: http://vm.tiktok.com/Rqwe2g/
Twitch: https://www.twitch.tv/start_uol