¿Es realmente necesaria la programación competitiva para campos como la ciencia de datos o el aprendizaje automático y para solicitar gigantes tecnológicos?

Esta es una gran pregunta ya que muchas personas me han preguntado si la programación competitiva es realmente necesaria para conseguir un trabajo en tecnología. La respuesta corta es que no es necesario. Hay tantas personas que he visto y con las que he trabajado que no son ganadores de programación competitivos.

Sin embargo, la respuesta larga es más interesante de la siguiente manera. La verdad es que, aunque la mayoría de los buenos ingenieros no son ganadores competitivos de programación, más o menos tienen algo de experiencia en competencias de programas. Por ejemplo, pueden haber asistido al menos a una competencia en el pasado, o algunos de ellos tienen calificaciones en TopCoder (probablemente no alto).

Por lo tanto, lo que recomendaría es que no necesita ser un experto en programación competitiva para obtener un trabajo de gigantes tecnológicos, pero será mejor que lo intente. Puedes jugar con TopCoder o practicar con competiciones pasadas. Hay un par de beneficios al hacerlo:

  • Hay mucho en común entre la competencia del programa y la codificación de entrevistas, como limitación de tiempo, preguntas relacionadas con algoritmos, etc. Así que esto definitivamente puede ayudarlo a estar mejor preparado para las entrevistas.
  • Aunque la programación competitiva parece irrelevante para el aprendizaje automático / ciencia de datos, le ayuda a comprender mejor la programación y los algoritmos, que son realmente la base de todos los campos relacionados con la informática. Por ejemplo, sin buenas estimaciones de la eficiencia de un programa, no podrá comprender los algoritmos de ML profundamente.

Compartí más consejos en este artículo: ¿es útil la programación competitiva para obtener un trabajo en tecnología? En resumen, animo a la gente a que pruebe la programación competitiva, aunque no es necesario. No duele si no eres bueno en absoluto, ya que no perderás nada. Sin embargo, existe una gran posibilidad de que se beneficie mucho.

Ray y Santosh han dado una buena perspectiva sobre la programación competitiva y su conexión con el aprendizaje automático y la ciencia de datos. Soy un gran creyente de las habilidades transferibles, y creo que hasta cierto punto la programación competitiva ayudará, si no garantiza.

Las habilidades que lo ayudarán en la programación competitiva incluyen

  1. Ser capaz de comprender el problema de una manera estructurada y mapearlo a una de las formas conocidas de resolver el problema. Todavía recuerdo a mi maestro de Algoritmos hablando sobre la reducción y cómo resolver cualquier problema, necesita dos cosas: 1. Definición del problema 2. Reducir un problema desconocido a un problema conocido. Esta habilidad te ayudará a mapear los problemas en uno de tus favoritos. aprendizaje automático / técnicas de ciencia de datos.
  2. Capacidad para pensar y manejar casos extremos. En la programación competitiva, pensar en casos límite y saber cómo resolverlos puede marcar una gran diferencia. En el aprendizaje automático, hacer un análisis de errores sobre por qué el algoritmo ML no maneja casos extremos puede ayudar.

Habilidades que necesitará para desarrollar ML / Data Science que probablemente CP no ayudará a incluir

  1. Hacer análisis de datos exploratorios y descubrir estrategias para manejar datos faltantes o no balanceados
  2. Tener una intuición de qué característica podría funcionar y qué no
  3. Elegir los modelos correctos para sus tareas de ML / Data Science
  4. Evaluación e interpretación de sus algoritmos ML

Para ML y Data Science en cualquier empresa, no es necesario practicar CP. Esos son campos completamente diferentes en CS. Pero simplemente usar herramientas y bibliotecas no te ayudará mucho y tienes que saber cómo funcionan las cosas internamente, especialmente las matemáticas.

Y si está preguntando cómo CP ayuda a entrar en gigantes tecnológicos (cualquier otra área), mi respuesta sería que ayuda mucho. Acelera tus habilidades de pensamiento y resolución de problemas. Si practica muy bien, puede abordar cualquier pregunta que se haga en estas entrevistas. Y no solo entrevistas, lo ayudan a formular soluciones para el campo del desarrollo de software. CP también es un tipo de deporte donde compites contra los mejores en esta área. Hay varios concursos en todo el mundo en los que puedes participar y mostrar tus habilidades.
Pero entonces, qué tan en serio tomas la CP depende de ti. Puede usarlo para repasar sus habilidades algorítmicas o llevarlo más allá para ser un habitual en este campo.

Pero hay personas a las que les va bien incluso sin PC. Si no encuentra útil el CP, ciérrelo e intente otra cosa. Contribución de código abierto o cualquier otro tipo de desarrollo de software que lo ayude a crecer.
CP vs SD es siempre un duelo interesante. Cada uno tiene sus propios méritos. Elija estos méritos según sus necesidades.

La programación competitiva casi no tiene nada que ver con ser un científico de datos o un empleado de tecnología gigante. Este es el por qué:

  • A los jueces no les importa lo desordenado que sea su código siempre que tenga poca complejidad de tiempo y espacio. Pero su futuro jefe querrá que su código siga los estándares de la compañía, con abundante documentación y comentarios que expliquen el código.
  • La programación competitiva a menudo consiste en utilizar un concepto complejo como la programación dinámica para resolver un problema muy difícil que rara vez verá en escenarios del mundo real.
  • CP no le enseña nada sobre el desarrollo ágil (es decir, las mejores prácticas en TI), seguir instrucciones o habilidades de comunicación.
  • Se trata de resultados inmediatos en CP: sabrás si ganaste o no momentos después de que termine la competencia. Pero en una empresa puede pasar más de un año antes de que vea los frutos de su trabajo, algo que puede desanimar a algunos programadores.

En resumen, el objetivo de CP y ser un empleado son bastante distintos. Uno se trata de la gloria personal, mientras que el otro se trata de proporcionar valor al cliente. No importa cuántos algoritmos brillantes se le ocurran, si no puede satisfacer al cliente, habrá fallado. A lo sumo, puede mencionar los logros de CP en su currículum en una línea, y hablar sobre cómo le ayudó a mejorar como codificador. Definitivamente, también te ayudaría a completar la ronda técnica de la entrevista.

Te daré la perspectiva de un gerente de contratación. Lo encontraré interesante, tal vez incluso lo discuta brevemente con usted por mi propia curiosidad, trate de entenderlo y conocerlo mejor, pero en lo que respecta a mi decisión, es totalmente irrelevante.

La programación competitiva puede ayudarlo en la tarea de prueba, pero dudo que lo note cuando lo revise.

Lo que debe tener en cuenta es que los gerentes de contratación buscan dos cosas:

  1. ¿Existe evidencia suficiente de que esta persona puede realizar las tareas en la descripción del trabajo?
  2. ¿Estoy seguro de que esta persona encajará en un buen equipo?

Por lo tanto, la programación competitiva es directamente irrelevante para mi decisión, a menos que sea un equipo de programación competitivo o haya muchos miembros del equipo de programación competitiva.

De ningún modo. Pero sí ayuda a mejorar su forma de pensar sobre un problema. Eso es todo. Aparte de eso, no hay necesidad.