02 marzo 2013

Google CodeJam: Diez días

Faltan 10 días para que comience el "Google CodeJam", el segundo gran concurso de programación del año.

La HackerCup de Facebook no me dejó un buen sabor de boca. Eso de "Programa a toda prisa, aunque sea mal" no acaba de coincidir con mi forma de ser, ni con mi forma de programar. Al menos es consecuente con la filosofía oficial de Facebook. Ellos mismos dicen

We have a saying: “Move fast and break things.” The idea is that if you never break anything, you’re probably not moving fast enough. At Facebook, we’re less afraid of making mistakes than we are of losing opportunities.

Que se podría traducir como

Tenemos un dicho: "Muévete deprisa y rompe las cosas". La idea es que si nunca rompes nada, probablemente no te estás moviendo lo suficientemente rápido. En Facebook, tenemos menos miedo a cometer errores que a perder oportunidades.
(Esto se puede leer en su propia web oficial, en el apartado de empleo: https://es-es.facebook.com/careers/ )

A nivel de política de empresa me parece arriesgado. Mucha gente, especialmente gente mayor, tiene una cierta resistencia al cambio, y los continuos cambios de interfaz de Facebook desesperan a mucha gente. A nivel de concurso de programación me resulta... desconcertante. Hubo dos cosas que me parecieron fuera de lugar:

  • La puntuación dependía básicamente (al menos en la primera ronda) del tiempo que se tardara en entregar los resultados. Cuanto más rápido, menos penalización. Daba igual si lo que entregabas funcionaba o no. Bastaba con entregar algo y rápido. Para un concurso que empieza a las dos de la madrugada (hora europea), eso supone una clara desventaja, porque era habitual comenzar con cerca de 8 horas de retraso. Entiendo que a ellos les dé igual si los europeos obtenemos más o menos puntos, porque es un concurso que en buena parte está orientado a reclutar gente competente, y es natural que prefieran reclutar "gente cercana". Pero están obteniendo resultados sesgados.
  • Seis minutos desde que descargas el fichero de datos hasta que entregas tus resultados es un tiempo irracionalmente corto. En mis programas, en la mayoría de los casos había un "try-catch" que salía a equivaler a "y si hay problemas, di que la solución es cero... pero al menos di algo". ¿Es bueno responder algo, aunque sean datos inventados?
En mi opinión, esa no es la forma correcta de programar, debería ponderarse también la cantidad de soluciones correctas, y eso debería pesar más que el tiempo empleado, no al revés. Yo valoraría más un "tengo la respuesta correcta en 3 horas" que un "respondo datos de mentira en 5 segundos". Espero que en fases superiores sí den más peso a ese tipo de cosas.

Google suele ser más transparente y más racional con su CodeJam. Hay muchos ejercicios de años anteriores propuestos en su web (y, como siempre, puedes mirar alguno en el apartado de retos de mi web). En cada ejercicio hay dos bloques de datos de prueba: un conjunto pequeño y un conjunto grande, de modo que la puntuación obtenida depende de cómo de bien se comporte tu solución.

Si te gustan la programación y los retos, deberías probar. Lo natural es que no te clasifiques entre los mejores del mundo, no te lleves los 15.000 dólares de premio ni te ofrezcan trabajar en Google. Pero los retos vienen bien para desengrasar las neuronas, y quizá, si eres un fuera de serie (y además tienes suerte), te lleves algo más...  ;-)