A finales de mayo, comenzará nuestro
campeonato de programación . Se llevará a cabo en línea y le permitirá probarse en una de cuatro áreas: desarrollo de backend o frontend, aprendizaje automático o análisis de datos. Las tareas para las secciones se desarrollaron en la gestión de inteligencia artificial e investigación, búsqueda y geoservicios.

Todos los participantes primero deberán superar la ronda de calificación. Después de aplicar, usted elegirá cuándo tomarlo. La calificación es de 4 horas e incluye de 4 a 6 tareas. Invitaremos a los mejores a participar en las finales, que se celebrarán el 1 de junio, también en línea. Los resultados se anunciarán el 5 de junio. Los ganadores en cada dirección recibirán 300 mil rublos, el segundo lugar - 150 mil rublos, el tercero - 100 mil. La inscripción está
abierta y durará hasta el último día de la ronda de calificación: 26 de mayo, pero es mejor enviar la solicitud con anticipación.
En esta publicación compartiremos la experiencia de realizar tales competiciones, en términos de audiencia y preparación de problemas algorítmicos complejos.
* * *
El campeonato es un desarrollo de la idea que implementamos en 2017-2018 en la serie Yandex.Blitz. La diferencia es que Blitz fue solo una serie de concursos separados en diferentes direcciones. Estaban unidos solo por el formato, y tuvieron lugar en momentos completamente diferentes. Asegúrese de leer habrastati con análisis de tareas para cada competencia: en
aprendizaje automático ,
backend ,
frontend y
desarrollo móvil .
Al preparar el campeonato y esta publicación, hablamos mucho con aquellos que ocuparon un lugar destacado en Blitz y luego consiguieron un trabajo en Yandex. Era importante tener en cuenta la experiencia real de los muchachos, la opinión del participante, para que la competencia fuera aún más transparente e interesante.
¿Por qué vale la pena participar?
El campeonato, como el pasado Blitz, es un camino corto para la empresa: los participantes de la parte superior podrán venir a trabajar de acuerdo con un esquema de entrevista simplificado. Pero estamos esperando no solo a aquellos que buscan trabajo y están considerando Yandex. Esperamos que a la competencia se unan representantes de dos categorías más de desarrolladores. La primera categoría es aquellos que están interesados en algoritmos, participan en la programación deportiva y también participan mucho (o participaron) en olimpiadas y otras competiciones. Vamos a ofrecer a esas personas dignas de sus tareas de nivel y experiencia interesante en una alcancía.
La segunda categoría son programadores y analistas experimentados. Tendrán la oportunidad de demostrar su experiencia y antecedentes. El hecho es que hemos compilado tareas muy diversas. Esto distingue el campeonato de las competiciones en Kaggle: no para bien o para mal, solo Kaggle ofrece algunas otras posibilidades. Allí, los compiladores generalmente brindan tales condiciones y datos que le permiten probarse en un área específica (si lo desea, los participantes tienen tiempo para estudiarlo). Las rondas de nuestro campeonato pasan en cuestión de horas y registran los conocimientos actuales. No puede entender, por ejemplo, en tecnologías de voz o visión por computadora, pero muestre tal pensamiento que en el futuro le permitirá sumergirse rápidamente en cualquier tema. Por supuesto, una comparación con Kaggle es relevante solo para la pista ML del campeonato.
De producción
Por lo tanto, la idea principal permanece sin cambios: ofrecer a los participantes tareas cercanas a las militares, aquellas con las que realmente se encuentran los desarrolladores y analistas de Yandex. Para que pueda comprender el nivel y la especificidad de estas tareas, ver qué problemas tiene que enfrentar en su trabajo si consigue un trabajo en una empresa. Además, las tareas que configuramos para el concurso ayudarán a los participantes a evaluar qué tan bien han bombeado en áreas específicas, si tienen ideas que realmente se puedan convertir en servicios y aplicaciones mejorados.
Aquellos que participaron en el Blitz de 2017 y 2018 vieron que las tareas fueron dictadas en parte por su código fuente de los proyectos de combate. Pero los matices de combate del desarrollo en una empresa a menudo radican en la necesidad de comprender algoritmos, incluso en áreas que, a primera vista, están lejos de los algoritmos, como el desarrollo front-end y móvil. Por lo tanto, los concursos dedicados a estos dos temas a menudo eran considerados por los participantes como cercanos a la lucha. Pero otros dos concursos, en programación algorítmica y aprendizaje automático, requerirían una comprensión de los algoritmos, incluso sin ningún subtexto de "combate". También tenían ese subtexto, pero no siempre era posible discernirlo según las condiciones de las tareas. Sin embargo, esto no impidió que los participantes compitieran, sino para nosotros: implementar la idea principal de Blitz.
Ideas ideas
Cuando las tareas para la competencia en la programación deportiva no se compilan por sí mismas, sino que se basan en las tareas que realmente surgen en los servicios, el proceso de compilación es completamente diferente. La razón es que en los servicios, el líder o colega lleva la tarea al desarrollador en una redacción diferente, en un contexto diferente que cuando la condición proviene de los organizadores de la competencia a sus participantes. Un programador a tiempo completo o incluso un interno, especialmente si trabajó en la empresa durante algún tiempo, está mucho más inmerso en los procesos de su departamento que un desarrollador externo (incluso con mucho talento). No pueden formular el problema de la misma manera, especialmente porque el postor debe encontrar una solución en mucho menos tiempo. Su entorno de desarrollo también es diferente: solo hay un archivo de entrada y salida, y el empleado trabaja en el repositorio, en la interfaz interna, con todas las herramientas, etc.
Condiciones de "limpieza"
Entonces tomamos las tareas del entorno militar, pero siempre nos preguntamos: ¿entenderán sus participantes? A veces resultó: para que la condición sea comprensible para una amplia audiencia de desarrolladores, debe escribir un gran preámbulo, introducir una terminología con la que el especialista en la empresa haya estado familiarizado durante mucho tiempo, etc. Tal enfoque no siempre funcionaría: en una competencia es importante que la condición sea amplia para que pueda leerlo rápidamente e ir a lo más importante: desarrollar una solución. Por lo tanto, en los casos en que, junto con el preámbulo, la condición se volvería demasiado engorrosa, tratamos de reformularla y eliminar la necesidad de un preámbulo. A menudo se requería otra redacción también porque la tarea original contenía información interna de Yandex que no debía divulgarse fuera de la empresa. Como resultado, la tarea podría volverse más abstracta, ya no tan similar a los análogos en la producción de combate.
Es interesante que la situación opuesta, cuando la condición fue capaz de formular de manera sucinta y no perder proximidad a la producción, a menudo condujo al hecho de que la tarea resultó ser difícil. Por ejemplo, esto se vio en el final de Blitz del aprendizaje automático, en tareas relacionadas con el reconocimiento de imágenes. El campeonato de este año no es la excepción. Los participantes, entre otras cosas, esperan tareas sobre la traducción automática: bien formulado, difícil de implementar y realmente tomado de un proyecto de combate (Yandex.Translate).
Lo que comprobamos
Se plantea la pregunta: si hacemos la tarea abstracta en comparación con la producción, ¿no la estamos simplificando? En cierto modo, sí, lo simplificamos: resolverlo ya no requiere experiencia con la infraestructura interna de Yandex, así como comunicación preliminar con colegas. No necesitamos estar familiarizados con el proceso de revisión del código, no necesitamos hacer que el código sea hermoso, etc. Pero mantenemos la parte más informativa de cada tarea que requiere un pensamiento algorítmico. Y si lo resuelve, incluso en una forma algo simplificada, significará que es un excelente programador. Y un excelente programador se familiarizará rápidamente con la infraestructura interna, profundizará en el proceso de revisión del código y cambiará de un modo deportivo de escribir código a uno industrial. Es como en el baloncesto: lo principal para el jugador son las dimensiones y una buena comprensión del juego, y se puede enseñar el lanzamiento.
Mencionamos el pensamiento algorítmico, en el sentido de que necesita poder implementar el algoritmo deseado utilizando el idioma elegido: sin bibliotecas adicionales. Lo más probable es que, en el trabajo real (tanto antes como después de la competencia), use varias bibliotecas adicionales que simplemente llamen a los algoritmos necesarios y reduzcan en gran medida la cantidad de código. La capacidad de conectarlos es solo de la categoría de lo que "se puede enseñar". Es más interesante para nosotros asegurarnos de que cuando llame a alguna biblioteca, entienda qué y cómo funciona. Conociendo los algoritmos desde adentro, los aplicará de manera más efectiva, ya sin la necesidad de implementarlos usted mismo.
Competencia analítica
Hablando sobre los objetivos del campeonato en esta publicación, a menudo recordamos Yandex.Blitz. Pero ahora, los participantes pueden elegir la dirección del análisis de datos, en el que no realizamos Blitz. Esta es una nueva pista con sus propios detalles. Si lo elige, el conocimiento de los algoritmos también será una ventaja, pero en menor medida que en el aprendizaje automático o las pistas de desarrollo de back-end.
La idea general aquí es la misma que en otras áreas: verificar las habilidades que usan los especialistas en Yandex. Entonces la pregunta es, ¿qué habilidades pueden ser útiles?
Las habilidades clave de un buen analista en Yandex son la capacidad de generar hipótesis, extraer una señal útil a partir de condiciones de tarea confusas, datos ambiguos o ruidosos. Nuestros analistas generalmente escriben en Python y trabajan con grandes flujos de datos, por ejemplo, con registros de Yandex.Metrica, sesiones de usuario, registros técnicos del servidor, etc.
Para resolver problemas analíticos en el marco del campeonato, así como para seguir trabajando en Yandex, es muy útil conocer los conceptos básicos de estadística matemática y teoría de la probabilidad. Este es el conocimiento básico que ayuda a sacar conclusiones correctas basadas en datos sobre los procesos.