Problemas algorítmicos en la interfaz. Yandex ejemplos y competencia

Ayer, se lanzó un nuevo Yandex.Blitz, esta vez la competencia será interesante para los desarrolladores de interfaces. Para los titulares del primer al quinto lugar, le ofreceremos llegar a nosotros de acuerdo con un esquema simplificado: una sección de entrevista en lugar de cuatro. Por lo tanto, Blitz sigue siendo la forma más rápida de llegar a Yandex.

Las tareas de la competencia están nuevamente cerca de las tareas de producción de combate: necesitará no solo habilidades de front-end, sino también conocimiento de algoritmos. Regístrese aquí para participar en la ronda de calificación.



Blitz es una buena razón para hablar sobre la historia de los problemas algorítmicos que surgen en el front-end industrial y cómo difieren de los de la competencia.

Sobre tareas


Siempre han surgido tareas saturadas algorítmicamente en el desarrollo de interfaces en Yandex. Puedo recordar ejemplos de 2005-2006. Una de estas tareas era un sistema de trabajo con eventos abstractos. Era necesario hacer un núcleo que permitiera adjuntar controladores (especificados por una función) a eventos arbitrarios (especificados por una cadena), después de lo cual desencadenaría un evento específico y eliminaría el enlace del controlador. Una complicación adicional fue que las tres operaciones principales enumeradas deberían haberse llevado a cabo lo más rápido posible. Acerca de esto, incluso hay una sección en uno de los informes anteriores .

Otra tarea interesante fue la ubicación de las miniaturas en Yandex. Resultados de la búsqueda de imágenes. Era necesario alinear el flujo de objetos rectangulares de la misma altura y diferentes anchos en el borde derecho. En el caso general, este problema no tiene solución, por lo que se le permitió cambiar el tamaño original de la imagen (reducir y recortar), pero la pérdida de información no excede un umbral razonable determinado en porcentaje.

También hubo tareas asociadas con el desarrollo del motor de plantillas Yandex, conocido por las palabras clave XJST y BEMTHML. La principal dificultad era hacerlo lo suficientemente rápido, mientras se conserva la expresividad semántica deseada. Se pueden encontrar detalles sobre esto en numerosos informes. Estos son algunos de los primeros informes con detalles: events.yandex.ru/lib/talks/43 y events.yandex.ru/lib/talks/329 , hay muchos otros.

Todo tipo de sistemas de procesamiento en tiempo real, por ejemplo, al desplazarse y arrastrar con el mouse, a menudo también se ven obligados a reflexionar. Debe crear diferentes trucos algorítmicos para que la interfaz, al menos subjetivamente para el usuario, se vea rápida si las acciones reales se realizan de manera objetiva durante mucho tiempo.

Por ejemplo, en una de las primeras versiones de Yandex.Mail, fue posible arrastrar casi todos los elementos clave entre sí: letras a carpetas, etiquetas en letras, letras en etiquetas e incluso carpetas en letras. En el proceso, mientras el usuario sostenía el objeto "en su mano" y lo conducía por la pantalla, era necesario resaltar aquellos elementos en los que era posible "restablecerlo". La realización ingenua "en la frente" se redujo a la imposibilidad.

Diferencias entre tareas reales y competitivas.


Las tareas dentro de Yandex, por regla general, se resuelven en modo equipo. El hombre no se deja solo, como en un concurso. Puede obtener ayuda de colegas y debe hacer coincidir el camino de su decisión con los intereses de otros participantes en el proceso.

Puede resultar que haya escrito una versión rápida, pero la mayoría de sus colegas consideran que el código es excesivamente difícil de comprender, desarrollar y respaldar en el futuro. En tales casos, se deben buscar compromisos. Muy a menudo, la interacción del equipo se diseña como una adición secuencial de algo a una solución o como un proceso simultáneo de programación de pares. Casi nunca hacemos lo mismo en paralelo, para luego comparar y elegir lo mejor.

Otra diferencia importante es que el código real que escribimos existe y continúa siendo compatible durante mucho tiempo. Este no es un proceso de "olvido" y si solo pasan las pruebas. Es importante recordar que su código puede continuar vivo, no solo ejecutado, sino también editado, durante muchos años después de la escritura.

Sobre otros concursos frontend


Puede encontrar fácilmente en los sitios de Internet tareas solo en JavaScript. Esta es esencialmente la misma programación deportiva, solo en un lenguaje específico. Además, hay un formato de "código en la oscuridad", cuando el diseño se impone sin ver el resultado, a ciegas, solo se ve el código. Las competiciones como la nuestra no están particularmente extendidas porque, debido a los detalles del desarrollo de la interfaz, es muy difícil recoger buenas tareas y hacer una verificación automática de ellas. Históricamente, Yandex ha desarrollado una sólida escuela de pruebas automáticas del front-end, que incluye el uso de la comparación de capturas de pantalla de navegadores reales. En base a estos desarrollos, buscamos hacer verificaciones de tareas en la competencia. Esto también es un experimento para nosotros, pero estamos seguros de que funcionará, y ya nos estamos preparando para desarrollar el tema aún más.

Source: https://habr.com/ru/post/es426587/


All Articles