Cet article parle de mon expérience de recherche d'emploi au Japon, des difficultés d'adaptation, et donne quelques conseils utiles pour les programmeurs débutants !
Formation
J'ai obtenu mon diplôme de licence à l'Université d'État de Moscou, au sein de la Faculté Lomonosov de Mathématiques Computationnelles et de Cybernétique. Ce programme est une sorte d'hybride entre une formation en mathématiques et en informatique.
Les deux premières années couvrent de manière très approfondie les bases des mathématiques supérieures et de la programmation. Une orientation plus spécifique est choisie en troisième année lors de l'admission dans l'un des 16 programmes. Quand mon tour est venu, j'ai choisi un peu par hasard le Département de Programmation Système, où nous avons suivi des cours tels que : systèmes d'exploitation, bases de données, compilateurs, traitement du langage naturel, programmation web, apprentissage automatique et infographie.
Expérience professionnelle avant Amazon
Mail Ru Group en Russie : 1,5 ans. À temps partiel, car je combinais travail et études pendant mes années de licence et de master. C'est là que j'ai acquis l'expérience nécessaire en tant que développeur débutant, ce qui m'a aidé par la suite dans ma carrière.
Rakuten au Japon : 6 mois. Je n'ai travaillé chez Rakuten que pendant six mois et je peux honnêtement dire que j'ai fait une erreur avec l'équipe dans laquelle je me suis retrouvé. Mais on peut toujours apprendre quelque chose de chaque situation !
Postuler chez Amazon
Processus de candidature
Le processus de candidature était assez standard - j'avais mon CV, j'ai créé un profil LinkedIn et j'ai commencé à ajouter mes amis et leurs connaissances de mon secteur comme contacts. J'ai finalement été contacté par une agence de recrutement et j'ai commencé le processus de soumission de mon CV à Amazon et Indeed. En plus de cela, j'ai également postulé chez Google via leur site officiel.
Ma recommandation générale ici est de créer des connexions dans votre secteur, car elles vous aideront à l'avenir.
Pour les grandes entreprises, il est recommandé de postuler via des recommandations (recommandations d'employés internes), car cela aide votre CV à passer le filtrage automatique initial.
Préparation à l'entretien
L'étape suivante est l'entretien, qui se compose généralement de 3 parties :
Exercices de programmation
Conception de systèmes
Questions sur les compétences non techniques
Programmation. Le livre Cracking the Coding Interview est bien adapté pour se préparer à ce type d'entretien, ainsi que la résolution de problèmes sur leetcode (section "Top interview questions"). Vous pouvez également consulter codeforces, algoexpert (payant). De plus, il existe de nombreuses chaînes YouTube où les algorithmes sont expliqués.
Conception de systèmes. C'est plus compliqué. Encore une fois, vous pouvez consulter le livre Cracking the Coding Interview, mais j'ai surtout fini par chercher sur Google des défis pour les entretiens de conception de systèmes.
Compétences non techniques. Ici, je vous conseille de décrire tous vos projets importants selon la méthodologie STAR, afin de pouvoir donner rapidement des exemples de différentes situations de votre expérience professionnelle. Exemples de questions : "Parlez-moi d'une fois où vous n'étiez pas d'accord avec un manager.", "Parlez-moi d'une fois où vous aviez des délais très serrés et que vous n'aviez pas le temps de terminer un projet." etc.
Entretien
Le processus d'entretien est assez standard pour toutes les grandes entreprises internationales (FAANG) et se compose de :
Appel avec un recruteur pour discuter de votre situation actuelle, de ce que vous faites maintenant, des pays que vous envisagez, des domaines de travail qui vous intéressent.
Test en ligne. Généralement, on vous donne 1h30, pendant lesquelles vous devez résoudre 2 tâches de programmation compétitive. Un exemple de site sur lequel vous serez dirigé est codility.
Entretien vidéo (entretien téléphonique). L'entretien dure 45-60 minutes. Pendant l'entretien, on vous donne deux tâches, et vous devez expliquer votre raisonnement, décrire la solution, nommer les complexités correctes de votre algorithme et écrire le code. Amazon pose également des questions sur les compétences non techniques pendant 15-20 minutes.
Entretiens en face à face (sur site). Vous venez au bureau de l'entreprise pendant l'un des jours ouvrables et passez 4-5 entretiens d'affilée avec une pause déjeuner après le 2ème entretien. Le plus souvent, l'un des entretiens porte sur la conception de systèmes, et tous les autres sont assez similaires à l'entretien téléphonique, sauf que cette fois c'est en face à face. Pour le déjeuner, vous serez pris en charge par l'un des employés, à qui vous pourrez poser toutes les questions sur l'entreprise.
Un autre point important :
Interrogez votre employeur potentiel. Je n'y avais pas beaucoup réfléchi jusqu'à présent, mais l'entretien est un processus à double sens. Non seulement l'entreprise essaie de déterminer si vous êtes le bon candidat pour eux, mais vous devez également déterminer si vous voulez travailler pour cette entreprise. Réfléchissez bien aux questions que vous poserez à votre potentiel manager. Vous voulez comprendre si les employés de cette entreprise sont qualifiés ? L'environnement de travail est-il confortable ? Les processus au sein de l'entreprise sont-ils bien rodés ?
Compétences à développer
Compétences relationnelles
Capacité à voir la cause profonde du problème, et ne pas essayer aveuglément de résoudre la tâche qui vous a été confiée. Pourquoi votre tâche est-elle même apparue ? Peut-être vise-t-elle à résoudre un cas particulier que vous pouvez généraliser pour résoudre un groupe de problèmes à la place ? Ne limitez pas votre réflexion à la tâche que votre responsable vous a confiée.
Communication en temps opportun. N'oubliez pas que vous travaillez en équipe, et il est très important de communiquer l'état de votre tâche en temps voulu. Sinon, vous risquez de ralentir toute une équipe.
Capacité à travailler de manière autonome. Il est important d'être un ingénieur autonome qui ne nécessite pas de micromanagement. Vous devriez être capable de trouver les réponses à la plupart des questions que vous vous posez par vous-même. Ne confondez pas cela avec le fait de rester bloqué sur un problème. Si vous rencontrez un problème que vous ne pouvez pas résoudre seul (vous avez déjà exploré toutes les options à votre disposition), alors contactez votre responsable ou votre mentor pour obtenir de l'aide.
Capacité à demander et à recevoir des retours. Avant de prendre des décisions clés lors du travail sur un projet, envisagez différentes approches et listez les avantages et les inconvénients de chacune. Montrez vos réflexions à vos collègues et découvrez ce qu'ils en pensent.
Capacité à transmettre l'information. À n'importe quelle étape de votre carrière, vous devrez mener des discussions et proposer vos idées à différentes personnes. Il est important d'être capable de transmettre votre point de vue de manière concise et claire. C'est encore mieux si vous pouvez bien le documenter par écrit.
Compétences techniques
Conception de systèmes. Lorsque vous travaillez sur un projet mature, essayez de comprendre comment le système fonctionne dans son ensemble, et quelles ont été les raisons de toutes les décisions clés ? La conception de l'architecture du système est l'une des compétences les plus essentielles pour un ingénieur logiciel. Mettez-vous les données en cache ? Comment se fait l'équilibrage de charge ? Que se passe-t-il si l'un de vos serveurs tombe en panne ?
Processus de déploiement. Le déploiement est une partie très importante du processus de développement. Comment pouvez-vous déployer le système de manière à ce que votre service ne cesse pas de traiter les requêtes des clients ?
Tests de charge. Les tests de charge sont très utiles pour les systèmes à forte charge. Si vous travaillez sur l'un d'entre eux, je vous recommande d'en apprendre davantage sur ce sujet.
Analyse des logs. Ce n'est généralement pas enseigné dans les universités, mais c'est une compétence très importante. Pourquoi votre système donne-t-il des résultats incorrects sur certaines entrées ? Comment comprendre où se trouve l'erreur ? Comment analyser les logs et les traiter correctement ?
S'habituer au Japon
Ma première entreprise au Japon (Rakuten) est considérée comme l'une des principales entreprises japonaises en termes de création d'un environnement de travail international. Par conséquent, l'adaptation à la culture japonaise a été beaucoup plus facile pour moi que si j'avais travaillé dans une entreprise japonaise typique (j'ai entendu dire que c'est assez difficile là-bas).
Malgré cela, j'ai quand même rencontré une gestion japonaise inefficace. Voici quelques caractéristiques négatives de la culture de travail japonaise selon moi :
Système hiérarchique fort. Le patron a toujours raison.
L'accent est mis sur le processus plutôt que sur le résultat. Cela conduit au fait que les gens restent au travail pendant 12 heures, travaillant de manière très inefficace. Beaucoup de personnes restent au bureau du matin au soir.
Responsabilité floue. Dans la culture de travail japonaise, il est très difficile d'obtenir qu'une personne prenne la responsabilité de quoi que ce soit.
Malgré cela, il y a aussi des avantages :
Travail de haute qualité. Les Japonais feront tout comme on leur dit, ils suivent strictement les instructions. Ce sera probablement lent, mais vérifié 100 fois.
Moins de conflits, car les décisions de la direction sont généralement gravées dans le marbre.
J'ai personnellement rencontré tous les problèmes mentionnés ci-dessus, mais grâce à Rakuten sous une forme plus atténuée.
En ce qui concerne le travail lui-même, je ne peux identifier aucun problème. Il n'y avait rien d'extraordinaire qui diffère de mon travail chez Mail Ru. Le seul inconvénient était que je devais m'adapter au travail en langue anglaise.
Il convient de dire que dans de grandes entreprises comme Rakuten, Amazon et Mail Ru, beaucoup dépend de l'équipe dans laquelle vous êtes placé. Dans deux équipes au sein du même département, tout peut être organisé de manière complètement différente.
Dans le cas d'Amazon, la situation est totalement différente. Comme je travaille dans un département dont le siège est dans la Silicon Valley, nous avons une atmosphère très occidentale. Je n'ai vu aucun signe de la culture de travail japonaise décrite ci-dessus.
Ma journée typique chez Amazon
Heures de travail. Avant que toute l'histoire du coronavirus ne commence, je travaillais généralement de 11h à 19h-20h. Deux fois par semaine, nous avions des réunions matinales avec une partie de notre équipe de la Silicon Valley, donc nous devions commencer à 9h.
Le nombre total d'heures de travail dépend généralement des délais du projet. En général, la journée de travail est de 9-10 heures (déjeuner inclus), mais si les délais sont serrés, cela peut aller jusqu'à 12-15 heures et du travail supplémentaire le week-end. Encore une fois, beaucoup dépend de l'équipe avec laquelle vous travaillez.
Réunions. Actuellement, notre équipe n'a que 2 réunions hebdomadaires, durant l'une desquelles nous faisons un rapport sur l'état actuel des tâches sur lesquelles nous travaillons. Un tableau Kanban (comme Trello) est utilisé pour la visualisation, et certaines tâches sont également divisées en sprints scrum.
Pendant la deuxième réunion, nous pratiquons le partage de connaissances, qui peut être utile aux autres collègues. Nous discutons souvent de solutions possibles aux problèmes qui affectent tous les membres de l'équipe.
De plus, j'ai des réunions individuelles hebdomadaires avec mon manager et mon mentor, où nous pouvons discuter de tout, de la météo du jour au plan de l'année prochaine pour obtenir une promotion.
Responsabilités professionnelles. Toutes les équipes sont structurées différemment, mais dans mon cas, chacun des développeurs travaille sur son propre projet, ou parfois 2 développeurs sur un projet. De plus, nous avons des responsabilités qui sont réparties équitablement entre tous les membres de l'équipe. Par exemple, la mise à jour de la configuration de certains systèmes.
Chaque équipe Amazon a ce qu'on appelle un "oncall" - une personne responsable du traitement de toutes les demandes reçues par l'équipe. Il peut s'agir d'expliquer comment votre système fonctionne, ou de vérifier pourquoi l'un de vos composants a échoué. Généralement, le service d'oncall est alterné une fois par semaine entre tous les membres de l'équipe.
Salle de sport. J'essaie d'aller à la salle de sport avant le travail 2-3 fois par semaine. Heureusement, j'habite à 12 minutes à pied du bureau et il y a une salle de sport sur le chemin, donc je ne passe pas beaucoup de temps en déplacement (c'était l'un des principaux critères pour choisir un appartement).
Cafétérias. Eh bien, la nourriture au Japon est très délicieuse et pauvre en calories. Par conséquent, je mange généralement dans deux cafétérias internes de notre bureau (disponibles uniquement pour les employés).
Emploi du temps. L'emploi du temps est totalement libre. La principale chose qui est exigée de vous est le résultat de votre travail. Tant que vous remplissez toutes vos responsabilités, personne ne vous imposera un emploi du temps.
Bien sûr, il est souhaitable que vous rencontriez vos collègues pendant le travail, car on peut avoir besoin de vous pour discuter urgemment de certaines questions de travail. De plus, ce serait bien d'entretenir de bonnes relations avec vos collègues et de passer plus de temps avec eux !
Salaire
Je ne peux pas divulguer le montant exact, mais pour Tokyo, vous pouvez trouver une fourchette de salaire assez précise sur Japan Dev. Si vous êtes intéressé par d'autres villes, je vous recommande de consulter les salaires sur Glassdoor.
Le salaire est suffisant pour mener une vie confortable pour moi et ma femme à Tokyo. Cela comprend le loyer dans l'un des quartiers centraux, des rencontres hebdomadaires avec des amis, des sorties dans des cafés et au karaoké :) En même temps, pendant les mois sans grosses dépenses, vous pouvez économiser jusqu'à 30-40% de votre salaire.
La diversité chez Amazon
Parfois, j'ai l'impression que seuls des étrangers travaillent chez Amazon Japon, surtout parmi les ingénieurs logiciels (côté business, bien sûr, il y a beaucoup de Japonais). Par exemple, dans notre département de recherche, il n'y a que 5 Japonais sur environ 40 personnes. Il y a un an, quand j'ai commencé à travailler chez Amazon, il y avait 5 développeurs russophones dans notre département.
Avantages et inconvénients
Ce que j'aime le plus dans mon travail, c'est le fait que j'apprends quelque chose de nouveau chaque jour. Il ne s'agit pas nécessairement de technologies innovantes, mais souvent on acquiert des compétences non techniques très importantes - gestion de projet, compétences commerciales, communication entre les membres de l'équipe pour un résultat optimal.
De plus, vous pouvez toujours prendre l'initiative de choisir les projets sur lesquels vous voulez travailler. Intéressé par les systèmes à forte charge ? Le manager essaiera de trouver la tâche la plus adaptée pour vous, et dans certains cas, vous soutiendra si vous souhaitez changer d'équipe au sein de l'entreprise.
Je pense que, comme tout le monde, je n'aime pas vraiment travailler sur des tâches répétitives auxquelles je dois consacrer un certain temps chaque semaine. Ce sont des tâches qu'il est assez difficile d'automatiser.
Aussi, dans les situations où vous travaillez sur des projets importants, vous pouvez vous heurter à la bureaucratie sous une forme ou une autre, ce qui ralentit indéniablement votre travail.
Derniers conseils
Vous devez comprendre ce qui vous intéresse et ce que vous voulez exactement créer. Réfléchir en termes de quel langage apprendre en premier n'est pas tout à fait correct. Vous aimez les sites web ? Commencez par créer une page simple ! Vous avez toujours voulu être développeur de jeux ? Essayez de créer un jeu simple. Il y a tellement d'informations sur Internet aujourd'hui, il suffit juste d'avoir envie de les utiliser !