
Inscription pour chez Yandex est ouverte. Elle se déroule dans cinq domaines : le backend, le ML, le développement mobile, le frontend et l'analyse. Dans ce blog, ainsi que dans d'autres blogs sur Habr et au-delà, vous pouvez trouver de nombreuses informations sur le déroulement du stage. Cependant, beaucoup de choses dans ce processus restent un mystère pour ceux qui ne travaillent pas dans l'entreprise. En considérant cela du point de vue des responsables du développement, encore plus de questions se posent. Comment bien organiser un stage, comment maximiser l'utilité mutuelle avec le stagiaire, comment apprendre à le connaître en trois mois et lui enseigner tout ce qui est nécessaire pour continuer à travailler ?
Nous avons préparé cet article à cinq. Permettez-nous de nous présenter : Ihnat Kolesnichenko du service des technologies de calcul distribué, Misha Levin du service d'intelligence artificielle de Market, Denis Malykh du service de développement d'applications, Sergey Berezhnoy du département de développement des interfaces de recherche et Dima Cherkasov du groupe de développement anti-fraude. Chacun d'entre nous représente son domaine de stage. Nous sommes tous des responsables, nous avons besoin de stagiaires, et nous avons une certaine expérience de travail avec eux. Laissez-nous vous parler un peu de cette expérience.
Entretien avant le stage
Les candidats attendent plusieurs entretiens techniques. Le succès lors de l'entretien dépend moins des soft skills (capacité à communiquer efficacement) et davantage des hard skills (compétences en mathématiques et en programmation). Cependant, les responsables évaluent les deux.
Ihnat :
Même si une personne est très talentueuse, mais absolument peu communicative, elle ne pourra pas appliquer toutes ses compétences. Nous y prêtons bien sûr attention, mais ce n'est pas une raison pour ne pas prendre quelqu'un en stage. En trois mois, tout peut changer, et de plus, votre première impression peut s'avérer incorrecte. Et si tout est vrai - il faudra expliquer à la personne et chercher d'autres équipes pour elle. Pour les stagiaires, la communication n'est certainement pas un facteur clé. Les compétences professionnelles sont tout de même beaucoup plus importantes.
Denis :
J'apprécie les personnes qui racontent des anecdotes — dans le bon sens. Une personne capable de partager comment elle et son équipe ont héroïquement géré un échec est intéressante. Je commence à poser des questions supplémentaires lorsque cette histoire surgit. Mais cela arrive rarement si l'on demande simplement de « parler de quelque chose d'intéressant dans tes projets ».
Un candidat a un jour prononcé une phrase remarquable que j'ai même notée : « J'ai réussi à éviter d'aborder des tâches ennuyeuses ».

Comme le temps de communication est limité, l'intervieweur essaie chaque minute de la rencontre d'obtenir des informations utiles sur le candidat. C'est super si le stagiaire a réfléchi à quelles parties de son expérience (autres que celles mentionnées dans le CV) il pourrait partager. Cela doit être un récit court et pertinent.
Denis :
Je fais attention quand une personne raconte qu'elle a essayé plusieurs langages et approches. Les personnes ayant une vision plus large trouvent des solutions plus élégantes en situation réelle. Mais cela peut aussi être un avantage ambigu. On peut effleurer les sujets sans vraiment apprendre quoi que ce soit.
Le temps pour les histoires décrites par Denis ne reste généralement que pour l'entretien final. D'ici là, il faut démontrer les connaissances fondamentales et pratiques qui seront la base du travail futur. Et, bien sûr, il sera nécessaire d'écrire du code sur un tableau ou sur une feuille de papier.
Micha :
Nous vérifions les connaissances en théorie des probabilités et en statistiques mathématiques. Nous regardons si la personne a de l'expérience avec les métriques, les algorithmes d'apprentissage automatique, leur réglage, le surapprentissage, etc. Nous attendons que la personne puisse écrire du code à un niveau suffisant pour être analyste.
Denis :
Ceux qui viennent aux entretiens connaissent principalement les langages : nous avons à Ekaterinbourg une bonne école des langages fondamentaux, de bonnes universités. Mais honnêtement, un candidat à un stage avec de bonnes compétences techniques est un rare phénomène, du moins dans notre voisinage epsilon. Prenons par exemple Swift. Les opérations sur les chaînes y sont très complexes, et peu de gens peuvent les manipuler rapidement de mémoire. On les remarque tout de suite. Je donne souvent aux entretiens une tâche liée au traitement des chaînes. Et en tout temps, une seule personne a réussi à écrire un tel code Swift sur une feuille. Après cela, je racontais à tout le monde qu'enfin quelqu'un avait réussi à résoudre cette tâche en Swift sur papier.
Vérification des algorithmes lors de l'entretien
C'est un sujet à part, car les candidats se posent toujours la question : pourquoi évaluons-nous systématiquement la connaissance des algorithmes et des structures de données ? Même les futurs développeurs mobiles et développeurs front-end passent par cette vérification.
Micha :
Lors de l’entretien, nous donnons toujours une tâche algorithmique. Le candidat doit réfléchir à la manière de l’implémenter en Python, de préférence sans erreurs. Il faut comprendre comment vérifier son programme et le corriger de manière autonome.

L'expérience en algorithmes sera utile pour trois raisons. Tout d'abord, elle sera nécessite dans des tâches algorithmiques — qui ne se présentent pas souvent, mais qui existent tout de même. Deuxièmement, le développeur pourra résoudre plus efficacement des tâches liées aux algorithmes, même si celles-ci ne nécessitent pas d'approfondir les algorithmes eux-mêmes (et il y en a déjà pas mal). Enfin, si vous n'avez pas étudié les algorithmes à l'université, mais que vous savez quand même les utiliser, cela vous caractérise comme quelqu'un de curieux et augmentera votre autorité aux yeux de l'intervieweur.
Denis :
La majeure partie du développement mobile consiste à « transférer du JSON ». Mais une fois tous les six mois, il y a des cas où les algorithmes sont nécessaires. Je suis actuellement en train de dessiner de belles cartes pour Yandex.Météo. Et en une semaine, j'ai dû mettre en œuvre un algorithme de lissage, l'algorithme de Sutherland-Hodgman et l'algorithme de Martinez. Si quelqu'un ne savait pas ce qu'est un hashmap ou une file d'attente prioritaire, il serait resté bloqué longtemps sur ce sujet, et il n'est pas sûr qu'il aurait réussi sans aide extérieure.
Les algorithmes sont la base du développement. C'est ce qui permet au développeur d'être développeur. Peu importe ce que vous faites. Ils sont nécessaires même dans des projets simples, où le travail principal consiste à « manipuler du JSON ». Même si vous n'écrivez pas vous-même d'algorithmes, mais que vous utilisez implicitement des structures de données, il est préférable de les comprendre. Sinon, vous vous retrouverez à créer des applications qui fonctionnent lentement ou de manière incorrecte.
Il existe des programmeurs qui sont entrés dans le développement de manière académique : ils sont allés à l'université, ont étudié honnêtement pendant cinq ans et ont obtenu un diplôme. Ils connaissent les algorithmes, car on les leur a enseignés. Mais cette connaissance des algorithmes ne caractérise pas nécessairement l'ouverture d'esprit d'une personne, il faut vérifier cette ouverture d'esprit d'une autre manière.
Et il y a les autodidactes, dont je fais partie. Oui, j'ai formellement une formation en IT, un diplôme d'ingénieur-programmateur. Mais les autodidactes ont appris à programmer « malgré tout ». Ils n'avaient pas de programme universitaire. Généralement, ils ne connaissent pas les algorithmes, car ils n'ont jamais eu besoin de les étudier. Et quand une telle personne comprend les algorithmes, cela signifie qu'elle a consacré du temps à les étudier. Après avoir terminé l'université, j'ai réalisé que j'avais des lacunes concernant les algorithmes fondamentaux — le fait est que ma spécialisation était appliquée. Je suis allé suivre des cours en ligne de l'Université de Princeton, célèbre Robert Sedgewick. J'ai compris, j'ai fait tous les devoirs. Et quand quelqu'un raconte une histoire similaire lors d'un entretien, cela m'intéresse tout de suite, j'ai envie de travailler avec lui ou du moins de poursuivre la conversation.

Ihnat :
Lorsque vous interviewez un stagiaire, en quelque sorte, vous attendez même plus que d'un développeur expérimenté. Il s'agit de la capacité à résoudre des problèmes algorithmiques, à écrire rapidement un code correct. Le candidat au stage est encore à l'université. Il y a tout juste un an, on lui parlait des algorithmes en détail. On s'attend à ce qu'il puisse les reproduire. Si la personne est raisonnable et a écouté attentivement les cours, elle le saura tout simplement, elle sortira tout ça de sa mémoire.
Quels problèmes résout un stagiaire
En général, le programme de stage peut être prévu et discuté lors des entretiens finaux. Au début de son travail, le stagiaire peut se voir confier des tâches d'entraînement, dont le résultat ne sera pas utilisé en production. De plus, la probabilité d'avoir de telles tâches est faible. La plupart du temps, des projets opérationnels issus du backlog sont attribués, c'est-à-dire considérés comme dignes d’attention, mais non prioritaires et « dissociables » — de sorte que leur réalisation ne dépend pas d'autres composants. Les responsables s'efforcent de les répartir de manière à ce que le stagiaire découvre différentes parties du service et travaille dans le même environnement que les autres membres de l'équipe.
Ihnat :
Ce sont des tâches extrêmement utiles. Peut-être qu'elles n'augmenteront pas l'utilisation du cluster de 10 %, ne permettront pas d'économiser un million de dollars à l'entreprise, mais rendront des centaines de personnes heureuses. Par exemple, nous avons actuellement un stagiaire qui s'occupe d'un client pour lancer des opérations sur nos clusters. Avant le lancement, l'opération doit charger certaines données sur le cluster. Cela prend généralement 20 à 40 secondes, et auparavant, cela se faisait en silence : tu lances dans la console et tu attends, regardant un écran noir. Le stagiaire est venu et en deux semaines a créé une fonction : maintenant, on voit comment les fichiers sont chargés et ce qui se passe. La tâche, d'un côté, est simple à décrire, mais d'un autre, il y a de quoi explorer, quelles bibliothèques consulter. Le plus agréable, c'est que tu l'as fait, une semaine a passé, c'est déjà sur les clusters, les gens l'utilisent. Tu écris un post dans le réseau interne — on te remercie.

Micha :
Les stagiaires préparent des modèles, rassemblent des données pour eux, inventent des métriques et mènent des expériences. Petit à petit, nous commençons simplement à leur donner plus de liberté et de responsabilités — nous vérifions s'ils s'en sortent. Si oui, ils passent au niveau suivant. Nous ne supposons pas qu'un stagiaire sache tout cela à son arrivée. Le responsable l'aide à comprendre, lui fournit un lien vers une ressource interne ou un cours en ligne.
Si le stagiaire se distingue par d'excellentes performances, il peut se voir confier des tâches prioritaires, importantes pour le département ou d'autres services.
Dima:
Notre stagiaire travaille actuellement sur des améliorations hardcore du système antifraude. C'est un système qui lutte contre différents abus et fraudes sur les services de Yandex. Au départ, nous avions pensé donner des tâches pas très complexes et pas très importantes pour la production. Nous essayons de prévoir à l'avance les missions du stagiaire, mais là, nous avons remarqué que ce jeune s'illustre, résolvant rapidement et efficacement les problèmes. En fin de compte, nous lui avons confié le lancement de l'antifraude pour de nouveaux services.
De plus, il existe une petite chance de recevoir une tâche à laquelle les collègues n'ont pas encore eu accès en raison de son ampleur.
Dima:
Il y a un ancien système, et il y a un nouveau, encore inachevé. Il faut effectuer une migration d'un à l'autre. À long terme, c'est un projet important, bien qu'il soit très incertain : il faudra communiquer beaucoup et lire un code legacy incompréhensible. Lors de l'entretien final, nous avons honnêtement dit au stagiaire que la tâche était difficile. Il a répondu qu'il était prêt, il a rejoint notre équipe et il a réussi. Il s'est avéré qu'il avait des qualités non seulement de développeur, mais aussi de manager. Il était prêt à aller lui-même poser des questions, à se renseigner et à relancer les choses.
Mentorat pour le stagiaire
Pour s'immerger dans les processus, le stagiaire a besoin d'un mentor. C'est une personne qui est au courant non seulement de ses propres tâches, mais aussi des tâches du stagiaire. Une communication régulière est établie avec le mentor, et il est toujours possible de lui demander conseil. Le mentor peut être soit le responsable de l'équipe (si c'est une petite équipe), soit un collègue, un membre permanent de l'équipe.
Ihnat :
J'essaie de m'approcher au moins tous les deux jours pour demander comment va le stagiaire. Si je vois qu'il est débordé, j'essaie de l'aider, de lui demander quel est le problème et de l'aider à le résoudre. Il est clair que cela demande de l'énergie de ma part et rend le travail du stagiaire moins efficace au global — je consacre également du temps. Mais cela lui permet de ne pas se perdre et d'atteindre des résultats. Et au final, c'est tout de même plus rapide que si je m'en chargeais moi-même. Il me faudrait environ 5 heures pour la tâche. Le stagiaire mettra 5 jours. Oui, je passerai 2 heures au cours de ces 5 jours à communiquer avec le stagiaire et à l'aider. Mais au moins, je gagnerai 3 heures, et le stagiaire sera content d'avoir reçu des conseils. Globalement, c'est juste une question de communiquer activement, de regarder ce que fait la personne et de ne pas perdre le contact.

Sacha :
Le stagiaire est constamment en contact avec son mentor et communique avec lui plusieurs fois par jour. Le mentor révise le code, fait du pair programming avec le stagiaire et l'aide lorsqu'il rencontre des difficultés. C'est grâce à ce mélange d'aide du mentor et de tâches réelles que nous formons des développeurs front-end.
Dima:
Pour que le stagiaire ne se sente pas abandonné, nous discutons avant l'embauche de qui va le mentorer. Cela représente également une grande opportunité d'apprentissage pour le mentor lui-même : une préparation au rôle de team leader et un test de sa capacité à garder en tête à la fois ses propres tâches et celles du stagiaire. Il y a des réunions régulières, auxquelles je participe parfois moi-même pour rester informé. Mais c'est vraiment le mentor qui communique régulièrement avec le stagiaire. Au début, il passe beaucoup de temps, mais cela en vaut la peine.
Cependant, avoir un mentor ne signifie pas que toutes les questions doivent être résolues par lui.
Micha :
Il est habituel chez nous que les personnes confrontées à un problème demandent des conseils à leurs voisins, collègues et trouvent rapidement de l'aide. Plus une personne grandit rapidement, plus elle doit aller voir ses collègues pour apprendre quelque chose. Il est même utile de se renseigner sur les tâches des autres pour imaginer de nouvelles missions. Quand le stagiaire est capable de se débrouiller seul, de comprendre ce qui est important pour l'autre partie et d'arriver à un résultat en équipe, il grandit beaucoup plus vite que celui pour qui tout cela doit être fait par un responsable.
Sacha :
Il existe de la documentation, mais une grande partie de l'information est disséminée dans l'air. Si tu l'absorbent au début de ta carrière, c'est un avantage supplémentaire et nous pouvons aider la personne à se concentrer sur ce qu'il est nécessaire d'étudier.
Le stagiaire idéal est celui qui effectue un stage de plusieurs mois, devient développeur junior, puis simplement développeur, puis responsable d'équipe, etc. Pour cela, il faut un archétype d'apprenant qui n'hésite pas à poser des questions s'il ne comprend pas quelque chose, mais qui est également capable de travailler de manière autonome. S'il lui est dit qu'il peut lire à ce sujet quelque part, il ira, lira et reviendra réellement avec de nouvelles connaissances. Il peut faire des erreurs, mais il ne doit pas en faire plus d'une, au maximum deux fois au même endroit. Le stagiaire idéal doit se développer, absorber tout comme une éponge, apprendre et grandir. Celui qui reste assis, essaie de tout comprendre par lui-même, s'éternise et ne pose aucune question, a peu de chances de s'intégrer.
Fin du stage
Avant de commencer le travail, nous signons avec chaque stagiaire un contrat à durée déterminée. Évidemment, le stage est rémunéré, est établi conformément au Code du travail de la Fédération de Russie, et le stagiaire bénéficie des mêmes avantages que n'importe quel autre employé de Yandex. Après trois mois, le programme se termine — nous transférons ensuite de nombreux stagiaires dans l'équipe (avec un contrat à durée indéterminée).

D'une part, il est important pour le responsable que le développeur ait accompli son minimum de stage. C'est vers cela qu'il guide le stagiaire, dès l'entretien. Cependant, ce n'est que le début de l'histoire. Pour nous, le stagiaire est toujours un candidat potentiel pour un emploi permanent. Le programme minimum pour le responsable est, dès le début, d'identifier une personne qu'il sera fier de recommander dans d'autres départements après trois mois. Le programme maximum est de le garder dans la même équipe, en l'embauchant. Nous prenons en compte que, même s'il est devenu stagiaire, un étudiant de deuxième ou troisième année devra reprendre ses études universitaires à l'arrivée de l'année universitaire.
Sacha :
Avant tout, les stagiaires représentent pour nous un potentiel de ressources humaines. Nous essayons de former des personnes à l'intérieur de Yandex, afin qu'elles correspondent parfaitement à nos tâches. Nous leur offrons tout, de la culture de communication et d'interaction en équipe aux connaissances encyclopédiques sur tous nos systèmes.
Ihnat :
En recrutant un stagiaire, nous l'intégrons immédiatement dans notre équipe. Et généralement, le seul obstacle est l'absence de poste disponible. Nous essayons de prendre des jeunes talents. Si quelqu'un a cinq ans d'expérience en développement, il arrive chez Yandex et est considéré comme stagiaire, cela signifie malheureusement que, même s'il est talentueux, s'il postule chez Yandex avec cinq ans d'expérience, il ne pourra pas grandir pour devenir développeur senior. Cela vient souvent de la vitesse de progression : une croissance lente dans le passé signifiera une croissance lente pour nous également. Oui, parfois, comprendre que quelqu'un n'est pas à la hauteur ne vient qu'après trois mois. Mais c'est assez rare. Dans plus de la moitié des cas, nous sommes prêts à intégrer des personnes à plein temps. À ma connaissance, il n'y a pas eu de cas où une personne a réussi son stage mais n'a pas pu passer l'entretien pour un poste permanent.
Micha :
À tous les stagiaires qui réussissent, nous proposons de rester dans l'entreprise. Après le stage, nous embauchons généralement plus de la moitié d'entre eux à temps plein. Avec le stage d'été, c'est plus compliqué, car souvent nous accueillons des étudiants, par exemple de troisième année, et il est difficile pour eux de concilier travail et études.
Dima:
Supposons qu'un stagiaire réussisse parfaitement ses tâches et ait beaucoup de potentiel pour devenir un bon développeur - même s'il lui manque actuellement de l'expérience. Et supposons qu'il n'y ait pas de poste permanent disponible. Dans ce cas, c'est simple : je dois aller voir mon responsable et lui dire - voici une personne formidable, nous devons tous les retenir, proposons-lui quelque chose, trouvons un moyen de l'intégrer.
Histoires de stagiaires
Denis :
Une fille qui a commencé un stage chez nous en 2017 venait de Perm. C'est à environ 400 kilomètres à l'ouest de Ekaterinbourg. Et chaque semaine, elle venait chez nous de Perm en train pour le cours de développement mobile. Elle arrivait le matin, étudiait le soir, et repartait tard dans la nuit. Évaluant son ardeur, nous l'avons invitée à travailler, et cela s'est avéré payant.
Ihnat :
Il y a quelques années, nous avons participé à un programme d'échange de stagiaires. Travailler avec des jeunes étrangers était intéressant. Mais les stagiaires de là-bas ne sont pas meilleurs que, par exemple, ceux de ShAD ou de FKN. On pourrait penser que l'EPFL se classe parmi les 20 meilleures universités d'Europe. À ce moment-là — comme encore peu expérimenté dans les entretiens — j'avais une telle attente : incroyable, nous interviewons des personnes de l'EPFL, elles seront super géniales. Mais les personnes qui ont reçu une formation de base en programmation chez nous — y compris dans des universités régionales clés — se révèlent tout à fait à la hauteur.
Ou une autre histoire. Actuellement, j'ai un jeune homme dans mon équipe, tout juste 20 ans. Il travaille à Saint-Pétersbourg, est venu en stage. Il est vraiment très talentueux. Comme d'habitude, tu confies des tâches à une personne, il les résout, et un mois plus tard, il revient et dit : j'ai résolu ça, je regarde, et il semble que votre architecture est mal conçue. Reprenons cela. Le code deviendra plus simple, plus clair. Bien sûr, je l'ai dissuadé : le volume de travail est important, il n'y a aucun avantage pour les utilisateurs, mais l'idée est tout à fait raisonnable. La personne a compris un processus complexe multithread et a proposé des améliorations — peut-être hors de propos, un refactoring pour le refactoring. Mais dès que l'on voudra compliquer ce code, on pourra tout de même réaliser ce refactoring. En fait, plusieurs mois ont passé, et nous avons commencé à nous attaquer à cette tâche. Je l'ai embauché avec plaisir. Nous ne sommes pas tous des génies. On peut venir, comprendre quelque chose et nous signaler nos problèmes. Cela est apprécié.
Micha :
Nous avons des stagiaires parfaits. Malgré leur manque d'expérience, ils voient les tâches non seulement sous un angle technique mais aussi à un niveau global. Ils proposent des améliorations fondamentales. Ils comprennent comment traduire des tâches du monde réel en enjeux techniques sans en perdre le sens. Ils se demandent quelle est l'objectif final, s'il vaut la peine de s'enfoncer dans les détails maintenant ou s'il est possible de changer complètement d'approche face à la tâche ou même de redéfinir la tâche. Cela signifie qu'ils ont le potentiel pour se retrouver plusieurs niveaux au-dessus. Pour franchir ce chemin, ils ont simplement besoin de développer certaines compétences et outils internes. Plus de lancer quelques projets réussis.

Source : habr.com
