Este artigo é sobre a minha experiência em encontrar um emprego no Japão, as dificuldades de adaptação e algumas dicas úteis para programadores iniciantes!
Educação
Eu me formei na Universidade Estatal de Moscou com um Bacharelado na Faculdade Lomonosov de Matemática Computacional e Cibernética. Este programa é algo como um híbrido de educação em Matemática e Ciência da Computação.
Os dois primeiros anos cobrem os fundamentos de Matemática Avançada e Programação de forma muito abrangente. Uma direção mais específica é escolhida no 3º ano após a admissão em um dos 16 programas. Quando chegou a minha vez, escolhi meio que por acaso o Departamento de Programação de Sistemas, onde cursamos disciplinas como: sistemas operacionais, bancos de dados, compiladores, processamento de linguagem natural, programação web, aprendizado de máquina e computação gráfica.
Experiência profissional antes da Amazon
Mail Ru Group na Rússia: 1,5 anos. Meio período, pois eu combinava o trabalho com os estudos durante o terceiro e quarto anos da faculdade. Foi lá que ganhei a experiência necessária como desenvolvedor iniciante, o que me ajudou mais adiante na minha carreira.
Rakuten no Japão: 6 meses. Trabalhei na Rakuten por apenas meio ano e posso dizer honestamente que cometi um erro com a equipe em que me meti. Mas podemos aprender algo com qualquer situação!
Candidatando-se à Amazon
Processo de candidatura
O processo de candidatura foi bastante padrão - eu tinha meu currículo, criei um perfil no LinkedIn e comecei a adicionar meus amigos e seus conhecidos da minha área como contatos. Eventualmente, fui contatado por uma agência de recrutamento e comecei o processo de enviar meu currículo para a Amazon e Indeed. Além disso, também me candidatei ao Google através do site oficial deles.
Minha recomendação geral aqui é construir conexões dentro da sua área, pois elas te ajudarão no futuro.
Para grandes empresas, é recomendado se candidatar através de indicações (recomendações de funcionários internos), pois isso ajuda seu currículo a passar pela triagem automática inicial.
Preparando-se para uma entrevista
A próxima etapa é uma entrevista, que geralmente consiste em 3 partes:
Tarefas de programação
Design de sistemas
Perguntas sobre habilidades interpessoais
Programação. O livro Cracking the Coding Interview é bem adequado para se preparar para esse tipo de entrevista, assim como resolver problemas no leetcode (seção "Top interview questions"). Você também pode dar uma olhada no codeforces, algoexpert (pago). Além disso, existem muitos canais no YouTube onde algoritmos são explicados.
Design de sistemas. Isso é mais complicado. Novamente, você pode olhar o livro Cracking the Coding Interview, mas eu acabei principalmente pesquisando no Google desafios para Entrevista de Design de Sistemas.
Habilidades interpessoais. Aqui eu aconselho você a descrever todos os seus projetos significativos de acordo com a metodologia STAR, para que você possa rapidamente dar exemplos de diferentes situações da sua experiência profissional. Exemplo de perguntas: "Me conte sobre uma vez em que você discordou de um gerente.", "Me conte sobre uma vez em que você tinha prazos muito apertados e não teve tempo para terminar um projeto." etc.
Entrevista
O processo de entrevista é bastante padrão para todas as grandes empresas internacionais (FAANG) e consiste em:
Ligação com um recrutador para discutir sua situação atual, o que você está fazendo agora, quais países você está considerando, quais áreas de trabalho te interessam.
Teste online. Geralmente você tem 1,5 horas, durante as quais precisa resolver 2 tarefas de programação competitiva. Um exemplo de site para o qual você será enviado é o codility.
Entrevista por vídeo (triagem por telefone). A entrevista dura 45-60 minutos. Durante a entrevista, você recebe duas tarefas, e precisa explicar seu raciocínio, descrever a solução, nomear as complexidades corretas do seu algoritmo e escrever o código. A Amazon também faz perguntas sobre habilidades interpessoais por 15-20 minutos.
Entrevistas presenciais (onsite). Você vai ao escritório da empresa durante um dos dias úteis e passa por 4-5 entrevistas seguidas com intervalo para almoço após a 2ª entrevista. Na maioria das vezes, uma das entrevistas é sobre Design de Sistemas, e todas as outras são um pouco semelhantes à triagem por telefone, só que desta vez é presencial. Para o almoço, você será acompanhado por um dos funcionários, a quem você pode fazer qualquer pergunta sobre a empresa.
Outro ponto importante:
Entreviste seu empregador. Eu não tinha pensado muito nisso até agora, mas entrevistar é um processo de mão dupla. Não é só a empresa tentando descobrir se você é a pessoa certa para eles, mas você também precisa determinar se quer trabalhar para aquela empresa. Pense cuidadosamente sobre as perguntas que você fará ao seu potencial gerente. Você quer entender se os funcionários desta empresa são qualificados? O ambiente de trabalho é confortável? Os processos dentro da empresa são bem ajustados?
Habilidades a desenvolver
Habilidades interpessoais
Capacidade de identificar a causa raiz do problema, e não tentar resolver cegamente a tarefa que lhe foi atribuída. Por que sua tarefa surgiu? Talvez ela vise resolver um caso específico que você possa generalizar e resolver um grupo de problemas em vez disso? Não limite seu pensamento à tarefa que seu gerente lhe deu.
Comunicação oportuna. Lembre-se de que você está trabalhando em equipe, e é muito importante comunicar o status da sua tarefa em tempo hábil. Caso contrário, você pode atrasar toda a equipe.
Capacidade de trabalhar de forma independente. É importante ser um engenheiro autônomo que não requer microgerenciamento. Você deve ser capaz de obter respostas para a maioria das perguntas que tem por conta própria. Não confunda isso com ficar preso em um problema. Se você encontrar um problema que não consegue resolver sozinho (já esgotou todas as opções disponíveis), entre em contato com seu gerente ou mentor para obter ajuda.
Capacidade de pedir e receber feedback. Antes de tomar decisões importantes ao trabalhar em um projeto, considere diferentes abordagens e liste os prós e contras de ambas. Mostre seus pensamentos aos seus colegas e descubra o que eles acham disso.
Capacidade de transmitir informações. Em qualquer estágio da sua carreira, você terá que realizar discussões e sugerir suas ideias para diferentes pessoas. É importante ser capaz de transmitir seu ponto de vista de forma concisa e clara. Melhor ainda se você puder documentá-lo bem por escrito.
Habilidades Técnicas
Design de sistemas. Ao trabalhar em um projeto maduro, tente entender como o sistema funciona como um todo e quais foram as razões para todas as decisões-chave. O Design de Arquitetura de Sistema é uma das habilidades mais essenciais para um Engenheiro de Software. Você faz cache de dados? Como é feito o balanceamento de carga? O que acontece se um dos seus servidores cair?
Processo de implantação. A implantação é uma parte muito importante do processo de desenvolvimento. Como você pode implantar o sistema de forma que seu serviço não pare de processar as solicitações dos clientes?
Teste de estresse. O teste de estresse é muito útil para sistemas de alta carga. Se você está trabalhando em um desses, recomendo que aprenda mais sobre este tópico.
Análise de logs. Isso geralmente não é ensinado nas universidades, mas é uma habilidade muito importante. Por que seu sistema está dando resultados incorretos em algumas entradas? Como entender onde está o erro? Como analisar logs e processá-los corretamente?
Adaptando-se ao Japão
Minha primeira empresa no Japão (Rakuten) é considerada uma das principais empresas japonesas em termos de criação de um ambiente de trabalho internacional. Portanto, a adaptação à cultura japonesa foi muito mais fácil para mim do que se eu trabalhasse em uma empresa japonesa típica (ouvi dizer que é bem ruim lá).
Apesar disso, ainda me deparei com a gestão japonesa ineficiente. Aqui estão algumas características negativas da cultura de trabalho japonesa, na minha opinião:
Sistema hierárquico forte. O chefe está sempre certo.
O foco não está no resultado, mas no processo. Isso leva ao fato de que as pessoas ficam no trabalho por 12 horas, trabalhando de forma muuuuito ineficiente. Muitas pessoas ficam no escritório do amanhecer ao anoitecer.
Responsabilidade pouco clara. Na cultura de trabalho japonesa, é muito difícil fazer com que uma pessoa assuma a responsabilidade por qualquer coisa.
Apesar disso, também há vantagens:
Trabalho de alta qualidade. Os japoneses farão tudo como lhes é dito, seguem rigorosamente as instruções. Provavelmente será lento, mas verificado 100 vezes.
Menos disputas, já que as decisões da gerência geralmente são definitivas.
Eu pessoalmente encontrei todos os problemas acima, mas graças à Rakuten, de uma forma mais branda.
Falando sobre o trabalho em si, não posso identificar nenhum problema. Não havia nada extraordinário que diferisse do meu trabalho no Mail Ru. O único inconveniente foi que tive que me adaptar a trabalhar em inglês.
Vale dizer que em empresas grandes como Rakuten, Amazon e Mail Ru, muito depende da equipe em que você é colocado. Em duas equipes dentro do mesmo departamento, tudo pode ser organizado de maneira completamente diferente.
No caso da Amazon, a situação é totalmente diferente. Como trabalho em um departamento com sede no Vale do Silício, temos uma atmosfera muito ocidental. Não vi nenhum sinal da cultura de trabalho japonesa descrita acima.
Meu dia típico na Amazon
Horário de trabalho. Antes de toda a história com o coronavírus começar, eu costumava trabalhar das 11h às 19h-20h. Duas vezes por semana, tínhamos reuniões matinais com parte da nossa equipe do Silicon Valley, então começávamos às 9h.
O total de horas trabalhadas geralmente depende dos prazos do projeto. Em geral, o dia de trabalho é de 9-10 horas (incluindo o almoço), mas se os prazos estiverem apertados, pode chegar a 12-15 horas e trabalho extra nos fins de semana. Novamente, muito depende da equipe com a qual você trabalha.
Reuniões. No momento, nossa equipe tem apenas 2 reuniões semanais, durante uma das quais relatamos o status atual das tarefas em que estamos trabalhando. Usamos um Quadro Kanban (como o Trello) para visualização, e algumas tarefas também são divididas em sprints scrum.
Durante a segunda reunião, praticamos o compartilhamento de conhecimento, que pode ser útil para outros colegas. Frequentemente discutimos possíveis soluções para problemas que afetam todos os membros da equipe.
Além disso, tenho reuniões individuais semanais com meu gerente e mentor, onde podemos discutir qualquer coisa, desde o clima de hoje até o plano do próximo ano para ser promovido.
Responsabilidades de trabalho. Todas as equipes são estruturadas de forma diferente, mas no meu caso, cada desenvolvedor trabalha em seu próprio projeto, ou às vezes 2 desenvolvedores em um projeto. Além disso, temos responsabilidades que são divididas igualmente entre todos os membros da equipe. Por exemplo, atualizar a configuração de alguns sistemas.
Cada equipe da Amazon tem algo chamado "oncall" - uma pessoa responsável por processar todas as solicitações recebidas pela equipe. Pode ser explicar como seu sistema funciona ou verificar por que um de seus componentes falhou. Geralmente, o dever de oncall é rotacionado semanalmente entre todos os membros da equipe.
Academia. Tento ir à academia antes do trabalho 2-3 vezes por semana. Felizmente, moro a 12 minutos a pé do escritório e há uma academia no caminho, então não gasto muito tempo com deslocamento (esse foi um dos principais critérios para escolher um apartamento).
Refeitórios. Bem, a comida no Japão é muito deliciosa e baixa em calorias. Portanto, geralmente como em dois refeitórios internos em nosso escritório (disponíveis apenas para funcionários).
Horário. O horário é totalmente livre. A principal coisa que é exigida de você é o resultado do seu trabalho. Desde que você cumpra todas as suas responsabilidades, ninguém vai forçá-lo a seguir um horário rígido.
Claro, é desejável que você se encontre com seus colegas durante o trabalho, pois você pode ser necessário para discutir urgentemente algumas questões de trabalho. Além disso, seria bom manter boas relações com seus colegas e passar mais tempo com eles!
Salário
Não posso revelar o valor exato, mas para Tóquio, uma faixa salarial bastante precisa pode ser encontrada no Japan Dev. Se você estiver interessado em outras cidades, eu recomendaria verificar os salários no Glassdoor.
O salário é suficiente para uma vida confortável para mim e minha esposa em Tóquio. Isso inclui aluguel em uma das áreas centrais, encontros semanais com amigos, idas a cafés e karaokê :) Ao mesmo tempo, durante os meses sem grandes despesas, você pode economizar até 30-40% do seu salário.
Diversidade na Amazon
Às vezes, tenho a sensação de que apenas estrangeiros trabalham na Amazon Japão, especialmente entre os Engenheiros de Software (no lado comercial, é claro, há muitos japoneses). Por exemplo, no nosso departamento de busca, há apenas 5 japoneses entre cerca de 40 pessoas. Há um ano, quando comecei a trabalhar na Amazon, havia 5 desenvolvedores que falavam russo no nosso departamento.
Prós e contras
O que eu mais gosto no meu trabalho é o fato de que aprendo algo novo todos os dias. Não são necessariamente tecnologias inovadoras, mas frequentemente aprendo habilidades interpessoais muito importantes - gerenciamento de projetos, habilidades de negócios, comunicação entre membros da equipe para obter o resultado mais eficiente.
Além disso, você sempre pode tomar a iniciativa de escolher os projetos em que deseja trabalhar. Interessado em sistemas de alta carga? O gerente tentará encontrar a tarefa mais adequada para você e, em alguns casos, apoiará você na mudança para outra equipe dentro da empresa.
Acho que, como todo mundo, não gosto muito de trabalhar em tarefas repetitivas às quais tenho que dedicar uma certa quantidade de tempo semanalmente. Essas são as tarefas que são bastante difíceis de automatizar.
Além disso, em situações em que você está trabalhando em projetos importantes, pode encontrar burocracia de uma forma ou de outra, o que sem dúvida atrasa seu trabalho.
Últimas palavras de conselho
Você precisa entender o que lhe interessa e exatamente o que quer construir. Pensar em termos de qual linguagem deve ser aprendida primeiro não é totalmente correto. Você gosta de websites? Comece criando uma página simples! Sempre quis ser um desenvolvedor de jogos? Tente implementar um jogo simples. Agora há tanta informação na Internet, você só precisa querer usá-la!