Fin mai, notre
championnat de programmation commencera. Il se déroulera en ligne et vous permettra de vous tester dans l'un des quatre domaines suivants: développement backend ou frontend, apprentissage automatique ou analyse de données. Les tâches des sections ont été développées dans la gestion de l'intelligence artificielle et de la recherche, de la recherche et des géoservices.

Tous les participants devront d'abord surmonter le tour de qualification. Après avoir postulé, vous choisirez quand le prendre. La qualification est de 4 heures et comprend de 4 à 6 tâches. Nous inviterons les meilleurs à participer à la finale, qui se tiendra le 1er juin, également en ligne. Les résultats seront annoncés le 5 juin. Les gagnants dans chaque direction recevront 300 mille roubles, la deuxième place - 150 mille roubles, la troisième - 100 mille. L'inscription est
ouverte et durera jusqu'au dernier jour du tour de qualification - le 26 mai, mais il est préférable d'envoyer la candidature tôt.
Dans ce post, nous partagerons l'expérience de l'organisation de telles compétitions - en termes d'audience et de préparation de problèmes algorithmiques complexes.
* * *
Le championnat est le développement de l'idée que nous avons mise en œuvre en 2017-2018 dans la série Yandex.Blitz. La différence est que Blitz n'était qu'une série de concours distincts dans des directions différentes. Ils n'étaient unis que par le format, et ils ont eu lieu à des moments complètement différents. Assurez-vous de lire habrastati avec l'analyse des tâches pour chaque compétition: en
apprentissage automatique ,
backend ,
frontend et
développement mobile .
Lors de la préparation du championnat et de ce post, nous avons beaucoup discuté avec ceux qui ont pris une place élevée à Blitz puis ont obtenu un emploi chez Yandex. Il était important de prendre en compte l'expérience réelle des gars, le point de vue du participant, pour rendre la compétition encore plus transparente et intéressante.
Pourquoi cela vaut-il la peine de participer?
Le championnat, comme le dernier Blitz, est un court chemin vers l'entreprise: les participants d'en haut pourront venir nous voir pour travailler selon un schéma d'entretien simplifié. Mais nous attendons non seulement ceux qui recherchent du travail et envisagent Yandex. Nous prévoyons que le concours sera rejoint par des représentants de deux autres catégories de développeurs. La première catégorie est celle qui s'intéresse aux algorithmes, est engagée dans la programmation sportive et participe également beaucoup (ou a participé) à des olympiades et à d'autres compétitions. Nous proposerons à ces personnes des activités dignes de leur niveau et une expérience intéressante dans une tirelire.
La deuxième catégorie est constituée de programmeurs et d'analystes expérimentés. Ils auront l'occasion de démontrer leur expérience et leurs antécédents. Le fait est que nous avons compilé des tâches très diverses. Cela distingue le championnat des compétitions à Kaggle - pas pour le meilleur ou pour le pire, juste Kaggle offre quelques autres possibilités. Là, les compilateurs donnent généralement des conditions et des données qui vous permettent de vous tester dans un domaine spécifique (si vous le souhaitez, les participants ont le temps de l'étudier). Les tours de notre championnat passent en quelques heures et enregistrent les connaissances actuelles. Vous ne pouvez pas comprendre, par exemple, la technologie vocale ou la vision par ordinateur, mais faites preuve d'une telle pensée qu'à l'avenir, vous pourrez vous plonger rapidement dans n'importe quel sujet. Bien sûr, une comparaison avec Kaggle n'est pertinente que pour la piste ML du championnat.
Similaire à la production
Ainsi, l'idée principale reste inchangée: offrir aux participants des tâches proches de celles militaires - celles que les développeurs et analystes Yandex rencontrent vraiment. Ainsi, vous pouvez comprendre le niveau et la spécificité de ces tâches, voir quels problèmes vous devez affronter dans votre travail si vous obtenez un emploi dans une entreprise. De plus, les tâches que nous avons mises en place pour le concours aideront les participants à évaluer dans quelle mesure ils ont pompé dans des domaines spécifiques, s'ils ont des idées qui peuvent vraiment être converties en services et applications améliorés.
Ceux qui ont participé au Blitz de 2017 et 2018 ont vu que les tâches étaient en partie dictées par leur code source issu de projets de combat. Mais les connotations de combat du développement dans une entreprise résident souvent dans la nécessité de comprendre les algorithmes - même dans des domaines qui, à première vue, sont loin des algorithmes, tels que le développement frontal et mobile. Ainsi, les concours consacrés à ces deux sujets ont souvent été jugés par les participants comme proches des combats. Mais deux autres concours - en programmation algorithmique et en machine learning - nécessiteraient une compréhension des algorithmes, même sans aucun sous-texte de «combat». Ils avaient également un tel sous-texte, mais il n'était pas toujours possible de le discerner en fonction des conditions des tâches. Cependant, cela n'a pas empêché les participants de concourir, mais pour nous - pour mettre en œuvre l'idée principale de Blitz.
Idées idées
Lorsque les tâches de la compétition dans la programmation sportive ne sont pas compilées par elles-mêmes, mais sur la base des tâches qui se posent réellement dans les services, le processus de leur compilation est complètement différent. La raison en est que dans les services, le chef de file ou le collègue confie la tâche au développeur dans un libellé différent, dans un contexte différent que lorsque la condition vient des organisateurs du concours à leurs participants. Un programmeur à temps plein ou même un stagiaire, surtout s'il a travaillé dans l'entreprise pendant un certain temps, est beaucoup plus plongé dans les processus de son département qu'un développeur externe (même très talentueux). Ils ne peuvent pas formuler le problème de la même manière, d'autant plus que le soumissionnaire doit trouver une solution en beaucoup moins de temps. Son environnement de développement est également différent: il n'y a qu'un fichier d'entrée et de sortie, et l'employé travaille dans le référentiel, dans l'interface interne, avec tous les outils, etc.
Conditions de "nettoyage"
Nous avons donc pris les tâches de l'environnement militaire, mais ensuite nous nous sommes toujours demandé - leurs participants comprendront-ils? Parfois, cela s'est avéré: pour rendre la condition compréhensible pour un large public de développeurs, vous devez lui écrire un grand préambule, introduire une terminologie que le spécialiste de l'entreprise connaît depuis longtemps, etc. Une telle approche ne fonctionnerait pas toujours: dans un concours, il est important que la condition soit volumineuse. afin que vous puissiez le lire rapidement et passer à la chose la plus importante - développer une solution. Par conséquent, dans les cas où, avec le préambule, la condition deviendrait trop lourde, nous avons essayé de la reformuler et de supprimer la nécessité d'un préambule. Une autre formulation était souvent requise également parce que la tâche d'origine contenait des informations internes à Yandex qui ne devaient pas être divulguées à l'extérieur de l'entreprise. En conséquence, la tâche pourrait devenir plus abstraite, plus semblable aux analogues de la production de combat.
Il est intéressant de noter que la situation inverse - lorsque la condition a été immédiatement en mesure de se formuler succinctement et de ne pas perdre la proximité avec la production - a souvent conduit au fait que la tâche s'est avérée difficile. Par exemple, cela a été vu dans la finale Blitz de l'apprentissage automatique, dans les tâches liées à la reconnaissance d'image. Le championnat de cette année ne fait pas exception. Les participants, entre autres, attendent des tâches sur la traduction automatique - bien formulées, difficiles à mettre en œuvre et réellement tirées d'un projet de combat (Yandex.Translate).
Ce que nous vérifions
La question se pose: en rendant la tâche abstraite par rapport à la production, ne la simplifions-nous pas? D'une certaine manière, oui, nous le simplifions - pour le résoudre, il ne nécessite plus d'expérience avec l'infrastructure interne de Yandex, ainsi qu'une communication préliminaire avec des collègues. Nous n'avons pas besoin de nous familiariser avec le processus de révision du code, nous n'avons pas besoin de rendre le code beau, etc. Mais nous gardons la partie la plus informative de chaque tâche qui nécessite une réflexion algorithmique. Et si vous le résolvez, même sous une forme quelque peu simplifiée, cela signifie toujours que vous êtes un excellent programmeur. Et un excellent programmeur se familiarisera rapidement avec l'infrastructure interne, se plongera dans le processus de révision du code et passera d'un mode sportif d'écriture de code à un mode industriel. C'est comme au basket: l'essentiel pour le joueur est les dimensions et une bonne compréhension du jeu, et le lancer peut être enseigné.
Nous avons mentionné la pensée algorithmique - dans le sens où vous devez être en mesure de mettre en œuvre l'algorithme souhaité en utilisant votre langue choisie: sans bibliothèques supplémentaires. Très probablement, dans le travail réel (avant et après la compétition), vous utiliserez diverses bibliothèques supplémentaires qui appellent simplement les algorithmes nécessaires et réduisent considérablement la quantité de code. La capacité de les relier vient simplement de la catégorie de ce qui «peut être enseigné». Il est plus intéressant pour nous de nous assurer que lorsque vous appelez une bibliothèque, vous comprenez quoi et comment elle fonctionne. Connaissant les algorithmes de l'intérieur, vous les appliquerez plus efficacement - déjà sans avoir besoin de les implémenter vous-même.
Concours d'analyse
En parlant des objectifs du championnat dans ce post, on se souvient souvent de Yandex.Blitz. Mais maintenant, les participants peuvent choisir la direction de l'analyse des données, dans laquelle nous n'avons pas effectué de Blitz. Ceci est une nouvelle piste avec ses propres spécificités. Si vous le choisissez, la connaissance des algorithmes sera également un plus, mais dans une moindre mesure que dans les pistes d'apprentissage automatique ou de développement backend.
L'idée générale ici est la même que dans d'autres domaines: vérifier les compétences utilisées par les spécialistes de Yandex. La question est donc de savoir quelles compétences peuvent être utiles?
Les compétences clés d'un bon analyste de Yandex sont la capacité de générer des hypothèses, d'extraire un signal utile de conditions de tâche floues, de données ambiguës ou bruyantes. Nos analystes écrivent généralement en Python et travaillent avec des flux de données volumineux, par exemple, avec les journaux Yandex.Metrica, les sessions utilisateur, les journaux techniques du serveur, etc.
Pour résoudre des problèmes analytiques dans le cadre du championnat, ainsi que pour d'autres travaux sur Yandex, il est très utile de connaître les bases de la statistique mathématique et de la théorie des probabilités. Il s'agit des connaissances de base qui permettent de tirer des conclusions correctes et basées sur des données sur les processus.