De hecho, diré que la programación y la investigación competitivas están tan lejos unas de otras como el este del oeste (excepto, por supuesto, con muy, muy pocas excepciones).
Los problemas de programación competitiva son problemas bien definidos que tienen una solución conocida y (posiblemente) simple.
La investigación, por otro lado, consiste en tratar de resolver nuevos problemas que no tienen una solución conocida. Si la investigación se trata de resolver problemas reales, la programación competitiva se trata de resolver problemas de “juguetes”.
- ¿Por qué el parámetro predeterminado en csrankings.org es "EE. UU. Solamente" aunque el sitio web se llame "Clasificación de informática"?
- ¿Cuáles son los mejores grupos de investigación de geometría computacional en los Estados Unidos?
- ¿Qué profesores y laboratorios de investigación en la India están trabajando en el procesamiento del lenguaje natural?
- ¿Cuál es la mejor manera de leer documentos de investigación de CS?
- ¿Es posible detectar líquido con visión artificial?
Steven Skiena habló sobre esto en su presentación a los ganadores del topcoder hace algunos años 2005 TopCoder Collegiate Challenge
No me malinterpreten, no digo que la programación competitiva sea inútil. Te ayuda a comenzar, así que no es inútil (¡as entrevistas de trabajo!). Además, la exposición a la programación competitiva es algo útil para aprender sobre algoritmos. Pero es importante saber que todavía se trata de resolver problemas con técnicas bien conocidas.
La mayor parte de la investigación de algoritmos (y TCS en general) hoy en día se trata de usar herramientas bien conocidas de la teoría de la probabilidad y muchas otras herramientas en informática teórica (y crear nuevas herramientas también). Por lo tanto, es algo similar a la programación competitiva a este respecto.
En general, puedo resumir la similitud de la siguiente manera.
Tanto la programación competitiva como la investigación tienen que ver con el uso de herramientas bien conocidas, es solo que las herramientas en ambos casos son muy diferentes. En particular, las herramientas de investigación son herramientas que se utilizan para crear más herramientas.
Por lo tanto, es muy posible ser un buen programador competitivo sin ser un buen investigador y viceversa.