¿Cómo ayuda la programación del concurso a mi carrera?

Creo que los programadores de concursos adquieren un cierto conjunto de habilidades que son clave para la ingeniería de software, no todas, pero definitivamente muchas.

Ventajas

  • Mejores ubicaciones de la empresa Los programadores de concursos tienen una gran ventaja al ubicarse como empresas consideradas como más elitistas y difíciles de ingresar que otras.
  • Los programadores de Concursos más rápidos suelen ser codificadores más rápidos: están acostumbrados a plazos estrictos, y eso se nota en su ritmo de trabajo profesional.
  • Los programadores de concursos más enfocados generalmente pueden pasar más tiempo enfocados, otro subproducto de la capacitación continua y estricta.
  • Los programadores de Debugging Gods Contest suelen ser depuradores increíbles, ya que este es un aspecto crucial de la programación del concurso. La mayoría de los programadores normales están 90% satisfechos con una solución de trabajo del 99%, pero para los programadores de concursos, siempre ha sido binario: funciona correctamente todo el tiempo o no funciona en absoluto.
  • Los programadores de Concursos humildes y bien expuestos , por naturaleza de su deporte, están expuestos a un grupo de élite de programadores. Comprenden que su lugar les impide ser demasiado confiados, lo cual es más común entre los programadores normales que generalmente se limitan a ver cómo algunos pares en su código universitario.

Desventajas

Un inconveniente que también he observado es que los programadores competitivos, al adquirir destrezas de resolución de problemas y depuración, generalmente sufren en las áreas de diseño e innovación , donde el problema no está lo suficientemente bien especificado como les gusta. Estas cosas también son cruciales para una empresa de ingeniería de software.

Un colega mucho más antiguo mío me dijo una vez que un buen equipo de ingeniería de software es uno con la proporción correcta de 4 habilidades: hackers innovadores , genios de resolución de problemas , personas sociales que unen al grupo y depuradores / perfeccionistas . Los programadores del concurso definitivamente obtienen puntos completos en al menos 2 de esas 4 habilidades y, por lo tanto, son muy deseables para muchas empresas de software.

Creo que es posible que la respuesta de Brian Bi sea solo un caso de sesgo de muestreo. El grupo de programadores no concursantes que ha observado es probablemente una muestra no aleatoria ya muy selectiva. Me siento extraño respondiendo esto dado que no soy un programador competitivo en absoluto.

Sin lugar a dudas, los concursos de programación te hacen un mejor programador. No te hace un buen ingeniero.

Muchas de las publicaciones aquí (lo siento amigos) no responden la pregunta central sobre la carrera en general o solo hablan con aquellos que han competido a un nivel muy alto. He entrenado en grandes escuelas para programación competitiva (y he ido al ICPC varias veces), así que espero poder responder esta pregunta de manera más general:

  1. Le ayudará a hacerse notar / a encontrar oportunidades .
    • Si compitió a un alto nivel, tendrá compañías que lo buscan. Desde mi propia experiencia, Google, Facebook, IBM, Microsoft y otros me han contactado debido a mi historial de competencia.
    • Incluso si no adelantaste a los regionales anteriores, las empresas buscan personas que disfruten de la programación y a menudo lo equiparen a habilidades de ingeniería (tal vez incorrectamente). Muchos ingenieros / reclutadores senior estaban en posiciones similares cuando eran estudiantes. Encontrar puntos en común con la persona que lo entrevista le ayuda a ser contratado.
    • En general, las entrevistas para la mayoría de los puestos de ingeniería serán similares en formato a su experiencia de programación competitiva. Quieren que resuelvas un problema con el código. Esa es una programación bastante competitiva.
    • Para la investigación, desde mi experiencia, existe un gran sesgo positivo para los estudiantes con experiencia en concursos de programación.
    • Para cualquier cosa que no sea de ingeniería: realmente te distingue de otros candidatos. Si bien cada importante empresa se ha internado en algún lugar, ¿cuántos pueden decir que compitieron en un concurso de programación?
  2. Conoces a mucha gente inteligente.
    • Algunas personas se aprovechan de esto. Mucha gente no lo hace. Conocer a las personas adecuadas y forjar las relaciones correctas puede hacer maravillas en su carrera. Muchas de las personas que conoces en estos concursos, sin importar cómo se desempeñen, son brillantes y / o ocuparán altos cargos en grandes empresas.
  3. De alguna manera, te hace un mejor ingeniero. En otros, peor.
    • Esta es más opinión, así que tómala como quieras:
    • Muchas de las habilidades en los concursos de programación no se traducen. Es muy raro que codifique algo más complicado que la primera búsqueda en la mayoría de los trabajos de ingeniería. Aunque serás más hábil en cosas algorítmicas; Si su equipo necesita a alguien para construir lógica de negocios, motores de reglas simples o análisis, lo que sea, su experiencia en el concurso de programación le permitirá desarrollarlo más rápido y mejor que cualquier otra persona en su equipo.
    • He visto a algunos programadores realmente buenos (medallistas Gold IOI o ACM-ICPC) luchar en trabajos de ingeniería porque solo están acostumbrados a resolver problemas bien definidos a corto plazo. Mientras que el mundo real consiste en gran medida en problemas abiertos a largo plazo. Conduce al problema de gratificación a corto plazo versus a largo plazo, entre otros.
    • Si bien los concursos de programación están en equipos de 3, no fomenta demasiada colaboración y habilidades sociales. Este concurso enfatiza más esfuerzos individuales que esfuerzos grupales. Debes llevarte bien con un máximo de 2 personas (y puedes alejarte del equipo si no te gustan). Así no es como trabajan la mayoría de los equipos de ingeniería. Esto no es necesariamente negativo, ya que tienes que aprender a ser independiente para muchos trabajos de ingeniería. Solo tienen que poder comunicarse y depender el uno del otro a veces.
    • Creo que siempre y cuando reconozcas cómo los concursos de programación son diferentes a los de la vida real (y no todos lo hacen), no debería impactarte negativamente demasiado.

Algunas cosas que me vienen a la mente:

1. (este es probablemente el más pasado por alto): cavar y clasificar la gran cantidad de jueces en línea es una muy buena práctica para comprender temas / áreas con los que uno no está familiarizado.
2. Te enseña a trabajar rápido y bajo presión, bastante útil para cualquier cosa que implique plazos.
3. Un resultado secundario de los dos anteriores es una “primera reacción” más refinada (ya menudo inusual) en muchos problemas.
4. La correlación entre las buenas actuaciones en los concursos y otras cosas suele hacerse notar. Sin embargo, las personas menos familiarizadas con los concursos extrapolan mucho más en base a estos …
5. (más específico para la investigación): te enseña cómo terminar los problemas. Mi impresión es que esta etapa de resolución de problemas ocurre aproximadamente 50 ~ 100 veces en un currículo típico de CS de pregrado. Los concursos le permiten ver otros 1000 problemas terminados durante ese mismo período de tiempo.
6. Te pone en contacto con otras personas con intereses similares. Aparentemente, entrenar para golpearse entre sí es una experiencia común con la que la mayoría de los concursantes pueden relacionarse, y esto condujo a una comunidad bastante única.

Le ayuda a conseguir trabajos en empresas de ingeniería de software selectivas. Pero eso es todo: no he observado que los ingenieros con experiencia en concursos sean mejores o peores en promedio que los que no lo tienen.

Estoy de acuerdo con Calvin. Asistir a concursos de programación es una excelente manera de hacerse notar por los empleadores, especialmente si no se graduó de una universidad prestigiosa, si tiene poca experiencia laboral o si es (algo) autodidacta. Por supuesto, no podrás mostrar la más amplia gama de habilidades que tienes durante un concurso. Tendrá que ser inteligente, rápido, eficiente e imaginativo para realizar. Sin embargo, el simple hecho de participar, correr el riesgo de desafiarse a sí mismo con los demás, perseverar durante todo el concurso, es un activo que los reclutadores tienden a alabar mucho: la perseverancia combinada con la toma de riesgos significa pasión. Y una entrevista de trabajo tradicional nunca te permitirá expresar tu pasión tanto como un concurso.

El proceso de entrevistas en la mayoría de las compañías tecnológicas está sesgado hacia las personas con experiencia en concursos de programación.

Cuanto más tiempo pase codificando, mejor será en su carrera. Si los concursos de programación te motivan a codificar más, entonces te ayudarán.

No lo hará. Aunque las competencias y los trabajos requieren programación, ambos son muy diferentes en términos del conjunto de habilidades. La programación competitiva requiere que seas rápido y hagas el trabajo, no hay requisitos para un buen diseño o mantenimiento de tu código. Los trabajos requieren un desarrollo a largo plazo en lugar de unas pocas horas de adrenalina.