Creado por el ingeniero de software Eric Wastl en 2015 como pasatiempo para sus amigos, el desafío ya cuenta con casi 200.000 participantes de todo el mundo que luchan por resolver sus puzles informáticos en segundos. Buscan mejorar sus habilidades, aprender nuevos lenguajes o simplemente disfrutar de la historia y las soluciones de los demás
Era la medianoche del 1 de diciembre de 2015, cuando el ingeniero de software Eric Wastl, arquitecto sénior para TCGPlayer (un mercado online para juegos de cartas coleccionables), lanzó por primera vez su desafío anual de programación Advent of Code (AoC), con la temática de Papá Noel y un acertijo al día. Había 81 personas inscritas, lo que coincidió bastante con su capacidad, planificada para 70 participantes. Wastl pensó que esta diversión podría ser de interés para algunos amigos, amigos de sus amigos y quizás también para algunas personas más.
Pero Wastl no pudo anticipar cómo la viralidad de las redes sociales superaría sus modestas expectativas. En broma, recuerda que el término técnico para lo que sucedió a continuación sería: "¡OH NO!" En 12 horas el número de participantes ya llegaba a 4.000. El servidor estaba a punto de colapsar. A las 48 horas, había 15.000 personas, y al final, el 25 de diciembre, el gran total de 52.000 participantes. Al año siguiente, Wastl lo trasladó todo a Amazon Web Services y desde entonces las cifras no han parado de crecer.
El año pasado, quizás debido a la pandemia, su desafío registró un aumento del tráfico del 50 %, con más de 180.000 participantes en todo el mundo.
Y este año, miles de programadores desde San Francisco (EE. UU.) hasta Eslovenia, estudiantes e ingenieros de software y programadores de competición por igual, ya están contando los días hasta Navidad con Advent of Code. Mientras que los calendarios tradicionales de Adviento ofrecen obsequios diarios de chocolate o juguetes (y algunas versiones alternativas regalan comida para perros, Jack Daniel's, figuras de Lego o incluso delicias digitales a través de distintas apps), Advent of Code muestra problemas matemáticos de forma lúdica y luego escribe miniprogramas informáticos para solucionarlos.
La diversión, en parte, radica simplemente en la tradicional magia de un ritual festivo. Pero también se trata de someterse a una agradable perplejidad. El director de investigación de Google, Peter Norvig, lo encuentra divertido porque confía en que el creador, Wastl, "el tiempo invertido hará que valga la pena", de manera similar a cómo los amantes de crucigramas del New York Times confían en su editor Will Shortz. "Habrá algunos trucos que lo harán más interesante, pero no será demasiado complicado", resalta Norvig.
El placer de programar
A medianoche (hora del este de EE. UU.) todas las noches entre el 1 y el 25 de diciembre, aparece un nuevo acertijo en adventofcode.com, incorporado en las historias de aventuras navideñas escritas de forma inteligente: un jugador lo describió como "un complot que lo justifica todo, si existe algo así".
El de este año tuvo un buen comienzo cuando los elfos de Papá Noel perdieron las llaves del trineo. El problema preparó la escena de la siguiente manera: "¡Estás haciendo algo en un barco en el mar cuando suena la alarma! Rápidamente quieres ver si puedes ayudar. ¡Aparentemente, uno de los elfos tropezó y por accidente se le las llaves del trineo cayeron al océano!"
Afortunadamente, los elfos tenían un submarino a mano para tales emergencias, y desde allí los participantes se han embarcado en una búsqueda submarina de 25 días. Intentan resolver dos acertijos diarios (el segundo con truco o más dificultad), cada uno de los cuales vale una estrella y aplausos: "¡Esa es la respuesta correcta! Estás una estrella de oro más cerca de encontrar las llaves del trineo".
Cada jugador gana una estrella por resolver un problema, pero el primero en conseguir una recibe 100 puntos; el segundo 99 puntos; y así sucesivamente, hasta el puesto 100 que gana solo un punto al encontrar la solución. El responsable de los acertijos explica: "Para salvar la Navidad habrá que conseguir las cincuenta estrellas antes del 25 de diciembre".
Crédito: Ms Tech | AoC
El objetivo de Advent of Code es resolver los acertijos utilizando algún lenguaje de programación (Python es el más popular). Los participantes también usan otras estrategias, como la "locura de Excel", como la describe Wastl, o montones de papel cuadriculado, y un número sorprendente de participantes resuelven los acertijos en Minecraft.
Pero la motivación en general varía de un jugador a otro. Algunos lo tratan como una puesta a punto anual de sus habilidades de programación; otros lo ven como la oportunidad perfecta para aprender a programar o probar un nuevo lenguaje. El creador del lenguaje de programación Elixir, José Valim, transmite en directo sus soluciones de AoC en Twitch.
En la cima de la clasificación mundial, los 100 jugadores con la puntuación total más alta, los programadores buscan velocidad, como el ingeniero de software de seguridad que trabaja en el cifrado de extremo a extremo en Zoom Brian Chen (su alias es "betaveros") y el ingeniero fundador de la start-up Modal (que construye infraestructura y herramientas para equipos de datos) Andrew He ("ecnerwala"). Chen ocupó el primer lugar el año pasado (y el año anterior), mientras que He se quedó muy cerca en segundo puesto.
Chen explica: "Hacerlo rápido es divertido, al igual que optimizar cualquier cosa en la que pueda obtener algún feedback casi de inmediato. Hay muchos pequeños detalles para ajustar y muchos pequeños momentos de orgullo por haber tomado la decisión correcta o haber hecho algo que resultó útil".
Chen y He, ambos antiguos estudiantes de ciencias de la computación del MIT que viven en el Área de la Bahía (EE. UU.), son rivales, pero amigos, y llevan años coincidiendo en distintos desafíos de programación: forman parte del mismo equipo en el Concurso Internacional de Programación Colegiada (ICPC por International Collegiate Programming Contest) y ambos compiten individualmente en Codeforces y Google Code Jam. Este año, Chen está ganando a He otra vez. El perdedor admite: "Para ser honesto, es porque él es un poco mejor que yo [en varios trucos e implementaciones que optimizan la velocidad], "pero no me gusta admitirlo".
La tabla de clasificación está fuera del alcance de la mayoría de los participantes, especialmente a medida que los acertijos se vuelven más difíciles cada día. La jefa del equipo de Operaciones de Ingeniería en Shopify, Kathryn Tang, estaba en el puesto 36 en el primer día, pero el tercero acabó en el 81 y sabía que su permanencia en la tabla de clasificación de los 100 mejores no duraría mucho. Afirma: "Lo hago por diversión usando Google Sheets".
El elemento de la competición se reproduce en Shopify y Google y en muchas empresas grandes y pequeñas, con clasificación particular, así como canales de chat dedicados a este tema donde los jugadores comparten soluciones y comentan los problemas después de haberlos resuelto.
"La competitividad ayuda a la participación", resaltó el ingeniero Alec Brickner, en el canal de Slack de la start-up Primer.ai dedicada al procesamiento de lenguaje natural (Brickner ha logrado estar en la clasificación de los mejores un par de días hasta ahora). Su colega Michael Leikam respondió: "No sé. Para mí la recompensa es el placer de programar". El director científico de Primer, John Bohannon, lo secundó con un emoji: "PIENSO IGUAL".
A Bohannon también le encanta la historia que plantea los problemas, pero la trama tiene poca o ninguna utilidad. "Los solucionadores más veloces ignoran completamente la historia, se centran en las variables del problema a resolver y simplemente llegan a la solución", explica.
La científica de datos e ingeniera en la oficina de Primer en Londres (Reino Unido) Nora Petrova, también participa, pero porque le gusta, no por competir. Cuenta: "Me encanta el drama que se desarrolla en cada rompecabezas". Por ejemplo, el cuarto día, un calamar gigante se pegó al submarino; quería jugar al bingo, por supuesto. Los datos que ofrecía el problema eran un conjunto aleatorio de 100 tableros de bingo, y el desafío consistía en predecir el tablero ganador y dárselo al calamar.
Me encanta XOR lo odio
La principal motivación de Wastl para crear Advent of Code fue ayudar a las personas a programar mejor. Y detalla: "Los principiantes que acaban de empezar en programación son a quienes quiero llegar. La métrica de éxito debería ser: '¿Cuántas cosas nuevas aprendí?', y no '¿Fui una de las personas más rápidas del mundo en resolver este acertijo?'"
El profesor de secundaria en la Academia de Tecnología y Artes De Anza (EE. UU.) Russell Helmstedter utiliza Advent of Code para enseñar Python a sus alumnos de sexto, séptimo y octavo grado. Resolvieron los dos primeros problemas juntos en clase. Desde la perspectiva de la enseñanza, estos acertijos son ejercicios efectivos porque si alguien se equivoca, simplemente puede volver a intentarlo, siguiendo el espíritu del desarrollo de software basado en pruebas.
Helmstedter descubrió que algunos de sus alumnos estaban un poco abrumados con el doble desafío: descifrar el problema y codificar una máquina para resolverlo, pero la mayoría lo intentó. En una encuesta, un alumno confesó: "Me gusta que sea difícil". Otro dijo: "Sinceramente, no hay ningún inconveniente. Me gusta mucho cómo se empieza a trabajar progresivamente hacia la meta". Aunque entre las preguntas de opción múltiple de la encuesta sobre "su opinión" una respuesta era "Lo odio", 41 encuestados eligieron "Me gusta" (en diversos grados) y ocho "Me encanta".
Crédito: Ms Tech | AoC
En la Universidad de Ljubljana (Eslovenia), el científico informático Janez utiliza los problemas de AoC para dar sus clases profesor y para perfeccionar sus propias habilidades (forma parte del equipo central de Orange, el conjunto de herramientas de visualización de datos y aprendizaje automático de código abierto). Demšar explica: "Tengo que practicar con regularidad, como un violinista que toca en una orquesta y enseña, pero todavía necesita piezas pequeñas para practicar. Así que estos son mis ensayos".
Enseña Programación 101 a un grupo heterogéneo de más de 200 estudiantes. Y admite: "Mi mayor preocupación es cómo mantener interesados y ocupados a los que ya saben algo (o mucho) sobre programación. Las tareas de AoC son geniales porque requieren varias habilidades", desde la codificación pura hasta los algoritmos.
El estudiante de tercer año de matemáticas en esta universidad eslovena Gregor Kikelj probó Advent of Code por primera vez en 2019. Lo hizo tan bien que consiguió una beca de prácticas en Comma.ai (trabajando en su software Openpilot, para los sistemas de conducción semiautomáticos), ya que el fundador de la empresa también competía en AoC. Kikelj también pudo subir su nota en la asignatura de programación (con otro profesor), ya que cada problema resuelto valía puntos extra en el examen final, además de puntos extra por lograr entrar en la tabla de clasificación de los mejores 100 participantes.
Kikelj ("grekiki") se levantaba todas las mañanas, a las 6 de la mañana en Eslovenia, para asistir al lanzamiento de los rompecabezas y ocupaba el puesto 52 en la clasificación general, acumulando un total de 23 puntos extra para el examen. "Después de ese año, pusieron el límite a la cantidad de puntos que se podían recibir a 5", recuerda. Pero todavía sigue levantándose al amanecer para descubrir el nuevo acertijo. Este año, su mejor clasificación, en el quinto día, fue el puesto 25; su objetivo es permanecer entre los 100 mejores. Y añade: "Veremos cómo va todo a medida que los problemas se vuelvan más difíciles".
Trucos para entrar en la clasificación
Si quiere aparecer en la tabla de clasificación de los mejores 100 participantes, la competencia es feroz y ser puntual cada día es clave: los jugadores esperan como un halcón a que aparezca el rompecabezas y luego hacen clic en lickety-split para descargarlo. El año pasado, esta "enorme ráfaga de tráfico sincronizado en un solo segundo" (como lo describe Wastl) preocupó incluso a los especialistas de Amazon.
El subreddit de AoC, uno de los muchos grupos sobre AoC en internet, está lleno de bromas internas sobre cómo prevalecer (con soluciones y enlaces de ayuda, así como autocríticas y memes). Pero el mejor recurso es quizás la publicación del blog de Brian Chen sobre "cómo entrar en la tabla de clasificación".
Chen profundiza en los consejos generales como "Cuidado con los bugs". Y "Si hay bugs, se tienen que encontrar pronto". Y "Hay que ser rápido" - "Usa todos los atajos necesarios para escribir el código más rápidamente. Escribe trucos. Puedes copiar y pegar el código. Hardcodea las constantes. Cambia los datos sin reservas. Usa excepciones para controlar el flujo. Convierte los valores booleanos en números enteros y úsalos como indicadores. Representa los datos como cadenas incluso cuando no deberías hacerlo. Hazlo con orgullo".
El autor destaca: "Normalmente nunca deberíamos hacer esto en el código de producción", es decir, en el código destinado a impulsar un producto y terminar frente a un cliente. Pero para AoC, la clave es que solo se necesita que el código sea lo suficientemente bueno. No tiene que ser fuerte ni bonito: los brillantes atajos de hackeos son suficientes.
Al escribir su código, Peter Norvig tiene en cuenta el principio "YAGNI": "No lo vas a necesitar" (You aren’t gonna need it).
Como en los años anteriores, Norvig publica todas sus soluciones para la parte uno y la parte dos de los acertijos en GitHub (no compite por puntos, solo por diversión). Estas publicaciones inevitablemente provocan aplausos en Hacker News y otros lugares similares: "El código de Norvig es oro", escribió un admirador. Otro comentó: "Realmente da gusto leer su código, de la misma manera que se pueden probar algunas demostraciones matemáticas o disfrutar de la prosa de un novelista brillante".
Norvig explica: "Parte de la idea de AoC es que hay que tomar algunas decisiones de diseño para resolver la parte 1 antes de poder ver la descripción de la parte 2. Así que, existe la tensión de querer la solución de la parte 1 para proporcionar componentes generales que se podrían reutilizar en la parte 2, sin acabar siendo víctima de YAGNI".
Además de hacer todo lo posible para programar de forma rápida y clara, el consejo más importante de Chen es básico, pero no trivial: "Estar disponible cuando se publiquen los nuevos desafíos". En 2018, resolvió un acertijo mientras estaba en el karaoke con amigos. Recuerda; "Hice una pausa, abrí mi ordenador portátil, lo terminé en una esquina de la sala y volví al karaoke. Por supuesto, ayudó el hecho de que lo hice rápido", aunque al final quedó segundo. En 2019, el día 17 lo acabó conectado a un wifi bastante irregular durante su vuelo de San Francisco a Taipéi (Taiwán); y el día 22 lo resolvió en su teléfono (discretamente) mientras asistía a la boda de un pariente.
"¡Qué monstruo!", gritó su rival e ingeniero de software en Dropbox Geoffry Song ("goffrie"), que también compite por el primer puesto.
En busca de una ventaja, Song a veces participa en el concurso de velocidad de mecanografía (TypeRacer) para calentar los músculos de sus dedos antes de empezar. Y todos los jugadores serios ponen una alarma diaria unos minutos antes de que aparezca el acertijo, para tener tiempo para prepararse y sentarse cómodamente con el teclado. Incluso así, las cosas pueden salir mal. Este año, en el segundo día, Andrew He saltó cuando sonó su alarma cinco minutos antes. Ya con su ordenador en mano, preparó su plantilla, pero, antes de que darse cuenta, había perdido 10 minutos. He admite: "Fue solo un accidente. Me distraje y comencé cinco minutos más tarde".
Pero todo ya había terminado. Chen resolvió los acertijos de ese día en 66 segundos y 39 segundos, respectivamente. Pero habría perdido muchos puntos. Y añade: "Definitivamente es posible recuperarlos, pero no sé si puedo, es decir, lo intentaré, pero veremos si ocurre". (He señala que Chen el año pasado se perdió un día y aun así ganó cómodamente).
He volvió a la contienda a mediados de diciembre, que es también cuando los jugadores comienzan a caer. A veces, eso se debe a que los acertijos son cada vez más difíciles de resolver, pero también a que, como se señala en un hilo de Hacker News, las fiestas navideñas de la vida real ocupan el tiempo libre de las personas. Uno de los comentarios dice: "La verdad es que no me voy a perder la cena con amigos y familiares para poder resolver algunos problemas adicionales de AoC". A lo que alguien respondió: "Usted solo tiene la culpa si para antes de tiempo por otras prioridades equivocadas".