Meu Processo de Preparação para Entrevistas Internacionais
Tags: programming, career
Published: 2023-06-20 12:36:54

Muitas pessoas que me conhecem me perguntam como foi que "entrei" no mercado internacional trabalhando remotamente do Brasil e hoje gostaria de contar um pouco sobre esse processo de aprendizado e o que fiz/estudei para conseguir.

Lembrando que cada empresa tem seu próprio processo seletivo e métodos para testar os conhecimentos do candidato, então não existe uma "receita de bolo" pronta, vou contar algumas experiências e o que aconteceu comigo, principalmente em entrevistas para start ups, já que **não** me candidatei para big techs como Google, Amazon ou Meta.

## Breve resumo da minha carreira
Minha carreira como desenvolvedor começou profissionalmente em 2016, mas comecei programar em 2014 quando entrei na faculdade (Análise e Desenvolvimento de Sistemas).

Para mim a programação foi amor à primeira vista. Me apaixonei cada vez mais, e sempre me dedicava e fazia projetos pessoais (fora do horário da faculdade ou do trabalho).

Em 2018 comecei trabalhar como full stack, Node e React e desde então nunca mais parei, até hoje (2023) trabalho com essa stack.

Em 2021, com a pandemia surgiram muitas vagas para trabalhar remotamente do Brasil e prestar serviços para empresas gringas, principalmente EUA e Canadá. Como eu já tinha em média 6 anos de _exp_ profissional e em média 4 anos com React/Node pensei em me candidatar para vagas internacionais, como o mercado estava "favorável" a isso.

Ainda em 2021 num período de 2 meses (junho e julho), fiz vários processos seletivos (~20), não passei na maioria, mas só precisava passar em um deles. E foi quando passei no processo seletivo da [Toptal](https://www.toptal.com/) que minha vida mudou completamente.

Hoje faço parte do quadro de freelancers da Toptal e da Lemon.io, podendo pegar jobs como freelancers das duas plataformas.

## Meu processo de preparação para as entrevistas

### Passo 1: Inglês
Deve parecer óbvio, mas o primeiro passo para se candidatar para vagas internacionais é ter o inglês afiado. Não precisa ser fluente, não precisa ter "sotaque", não precisa falar "tudo certinho", mas você precisa se comunicar minimamente, saber falar sobre você, sobre sua carreira, sobre seus projetos passados, esse tipo de coisa. É o que chamam de inglês "técnico" já que você irá utilizar termos próprios da área de tecnologia, dificilmente você irá precisar ter o vocabulário tão abrangente. Mas claro, quanto mais palavras você souber, melhor.

#### _E como aprender inglês?_
Claro que não existe uma fórmula mágica, eu particularmente gosto de estudar sozinho, então o que fiz foi pegar vídeos no YouTube próprios para aprender inglês (não séries ou músicas, pois nesses há muita gíria, abreviação de palavra, o que torna o aprendizado mais difícil), vídeos como [esse](https://www.youtube.com/watch?v=M6trotLYB8s). Com esse tipo de vídeo você consegue entender claramente o que é falado, você pode pausar o vídeo, repetir em voz alta o que foi dito na frase anterior, depois anotar, escrever, para cada vez gravar mais aquelas palavras, o som delas, e quando usar determinadas frases. E também vídeos do tipo "mock interview", que são entrevistas "fakes" apenas para fins didáticos, nesse tipo de vídeo você pode ver como é um processo de entrevista e também treinar inglês. 

Exemplo de mock interview: https://www.youtube.com/watch?v=V8DGdPkBBxg

Claro que existem N formas de aprender, e você precisa entender qual é a que você mais gosta. Existem outras opções como o Cambly, onde você pode fazer aulas com professores particulares, ou em grupo. E hoje em dia com o "boom" de brasileiros trabalhando para a gringa, existem muitos professores particulares que se especializaram nesse tipo de ensino, você pode encontrar alguns no LinkedIn.

### Passo 2: Conhecimentos técnicos
Na entrevista você precisa dominar a parte técnica, o recrutador terá pouco tempo (em média 1h) para te conhecer e decidir se vai seguir com você ou com outro candidato, então você precisa responder questões técnicas da melhor maneira possível e sem "ficar dando voltas".

Eles gostam muito de saber se você domina a linguagem que você está se candidatando (ex: javascript no meu caso), se você conhece conceitos "baixo nível" que às vezes passam despercebido no nosso dia a dia, perguntas como (exemplos de perguntas que fizeram para mim, para desenvolvedor full stack JS):

* _o que são cookies?_
* _qual a diferença de cookie vs local storage vs session storage_
* _o que é promise?_
* _promises vs callbacks_
* _var vs let vs const_
* _o que é o event loop e como ele funciona?_
* _this context no javascript_
* _qual a ordem de execução do código abaixo?_
```
console.log('one');
setTimeout(function() {
  console.log('two');
}, 0);
Promise.resolve().then(function() {
  console.log('three');
})
console.log('four');
```
* _o que é hoisting?_
* _css: quando usar grid vs flexbox?_
* _css: o que são pseudo-classes? cite algumas_

Até perguntas mais elaboradas como:
* _Tenho uma aplicação que está muito lenta no "initial load", o que pode estar causando esse problema e como melhorar o tempo de carregamento?_

Claro que são apenas alguns exemplos para você ter uma noção do que esperar/saber, então é sempre importante você dominar os conceitos do ecossistema do qual você trabalha, não só dominar a linguagem em si (fazer crud, fazer telas) mas dominar a nível de web, navegador, event loop, etc.

### Passo 3: (o mais temido) Code interview
Provavelmente esse é o ponto que os programadores mais odeiam, o temido "code interview".

_Code interview_ é um momento que o entrevistador vai te passar um algoritmo/situação problema e pedir para você resolver esse problema "ao vivo", normalmente com _pair programming_ compartilhando sua tela e você deve falar/comentar sobre o que você está fazendo e como está pensando em resolver esse problema, você não pode só simplesmente "sair codando", você precisa explicar o que está fazendo, mostrar como é sua "forma de pensar" e como resolve problemas no dia a dia.

Claro que ninguém gosta de ser avaliado ao vivo resolvendo um problema que nunca viu antes, é uma situação bem desconfortável, mas aí que entra o ponto-chave nesse tipo de entrevista: já saber (ou pelo menos entender) o problema antes da entrevista. E como fazemos isso? Estudando algoritmos e estrutura de dados na nossa rotina de estudos.

Óbvio, não existe fórmula mágica, mas de novo aqui entra o processo de preparação para esse tipo de entrevista. Quanto mais você estudar sobre `algoritmos`, `estrutura de dados` e se acostumar a resolver algoritmos falando em voz alta (nem que seja sozinho, eu fiz isso várias vezes, como se tivesse explicando para alguém), mais "fácil" vai se tornar esse tipo de entrevista. 

Entender conceitos como `Big O`, também é de suma importância para mostrar para o entrevistador que você realmente entende afundo os conceitos.

Recursos para estudar algoritmos, estrutura de dados:

_Sites_
* https://leetcode.com/
* https://www.hackerrank.com/

_ChatGPT_
`ask me questions about algorithms and data structures as you are a software engineer interviewer`

_Livros_
* [Cracking the Coding Interview](https://a.co/d/41RPm6M)
* [Entendendo Algoritmos: Um Guia Ilustrado Para Programadores e Outros Curiosos](https://a.co/d/6OdmKCw)

Fiz algumas anotações sobre Big O:
https://davisbento.notion.site/Big-O-752aeee1c99346f29550aecc523464b9

### Passo 4: Currículo
Ter um currículo em inglês é absolutamente crucial, e ele deve ser minuciosamente elaborado, descrevendo as tecnologias com as quais você trabalhou e detalhando seu papel nas equipes e projetos. Você pode até utilizar o currículo disponível no LinkedIn, desde que esteja atualizado, já que grande parte das interações com os recrutadores ocorre nessa plataforma. É fundamental destacar suas habilidades e experiências de forma clara e concisa, enfatizando suas realizações e contribuições significativas. Lembre-se de que um currículo bem elaborado é a chave para atrair a atenção dos empregadores e garantir uma chance de sucesso nas entrevistas.

### Passo 5: Aplicar para as vagas
A maioria das candidaturas para vagas acontece diretamente no LinkedIn. Embora algumas empresas possuam seus próprios sites de recrutamento, como é o caso das empresas em que trabalho, Toptal e Lemon.io, a maior parte dos contatos e interações ocorre dentro da plataforma do LinkedIn. Seguir os passos mencionados anteriormente é essencial para aumentar sua visibilidade e ter mais chances de sucesso.

Além disso, é interessante enviar uma mensagem para o recrutador da vaga após se candidatar, demonstrando interesse e explicando por que você seria um bom candidato para a posição. Embora nem sempre essa abordagem funcione, pois em algumas ocasiões os recrutadores podem não responder, há momentos em que ela traz resultados positivos, podendo gerar um bom resultado. Portanto, é válido aproveitar essa estratégia para destacar seu perfil e aumentar suas chances de conquistar a vaga desejada.

### Conclusão
Sem dúvida, nos dias de hoje (2023), o setor de tecnologia enfrenta um período desafiador, com poucas vagas disponíveis e demissões em massa. A concorrência nesse mercado tornou-se intensa, exigindo mais preparação/conhecimento e um compromisso com o estudo. Embora a situação seja complexa, é essencial se destacar como um profissional de alta qualidade, pois ainda existem oportunidades abertas que demandam talentos excepcionais. Portanto, é fundamental se dedicar e buscar conhecimento constantemente, a fim de se posicionar como um candidato diferenciado. Em tempos desafiadores como estes, a persistência e a busca pela excelência são aspectos fundamentais para conquistar as vagas disponíveis.

Sempre acreditei que para ter sucesso nessas entrevistas era indispensável possuir um Q.I sobrenatural, ser o "gênio do JavaScript". No entanto, descobri que a realidade é diferente. Embora as gigantes da tecnologia, como Google e Meta, tenham processos seletivos extremamente desafiadores, nas start-ups menores é plenamente viável alcançar a tão desejada remuneração em dólar, mas para isso você precisa se dedicar aos estudos pois a entrevista é um processo a parte dos conhecimentos usados no dia a dia.

Nos próximos artigos irei contar como é o dia a dia do trabalho remoto como freelancer, fiquem ligados ;).