¿Debería un ingeniero o desarrollador de software tener habilidades de programación competitivas como un requisito importante?

No, no, NOOOOOOOOO !!!!!!! Pensé que había terminado despotricando por una semana …

Si el trabajo implica una programación competitiva, es decir, si está diseñando los acertijos o algo así, sí, es justo, un codificador competitivo podría ser una buena opción.

Pero aparte de eso, no.

Se ha cubierto ad nauseam en Quora sobre por qué la programación competitiva es una cualidad neutral o incluso negativa para un programador, por lo que no voy a entrar en eso ahora.

Me desconcierta por completo cómo algunas personas están desesperadas por evitar lo obvio, si desea contratar a un desarrollador de software, elija personas que hayan desarrollado software .

Si estuviera empleando a un fotógrafo para su boda, ¿le pondría a prueba a la persona qué tan rápido puede cambiar la lente o formatear la tarjeta SD? No, mirarías sus fotos.

Me incomodaría que fuera un requisito, pero un requisito importante , eso es una locura, en serio, terminarás con un equipo que puede usar algoritmos todo el día pero mirar fijamente la pantalla cuando lo preguntas ellos, ya sabes, realmente hacen algo útil.

Ahora, por si he ofendido alguna flor preciosa. Si quieres hacer una programación competitiva, hazlo, si lo disfrutas, es genial, pero no esperes que los empleadores se enamoren de ti para contratarte.

TLDR: no.

No, la programación competitiva es extremadamente diferente de la programación “regular”. Por ejemplo, no compites con tus compañeros de trabajo para resolver los mismos problemas. Normalmente, cada uno trabaja en problemas diferentes (a veces relacionados), y debe sentirse libre de pedirse ayuda mutua.

(algunos trabajos no tan regulares tendrán varios equipos trabajando en los mismos subprogramas para que puedan ejecutarse con un algoritmo de votación, solo he oído hablar de esto cuando los programas controlan algo grande y explosivo como un cohete o un misil de fusil, pero no me sorprendería si los autos sin conductor también hicieran esto … o no)

La programación competitiva tiende a tener conjuntos de problemas mucho mejor definidos donde, como la programación “regular”, encontrar los requisitos de cambio reales es, en general, una parte importante del trabajo.

La programación competitiva produce un programa que pasa la prueba de aceptación, y luego ese programa se hace para siempre. La programación “regular” produce un programa que tiende a tener usuarios que encuentran errores que las pruebas nunca hicieron, y necesita que se solucionen esos errores. También suelen ganar suficiente dinero para que alguien descubra un conjunto de características que probablemente generarán aún más dinero, si solo alguien las escribe. Por lo tanto, los programadores “regulares” deben crear programas flexibles y fáciles de mantener.

Dadas todas esas diferencias, no creo que exigir que un ingeniero o desarrollador de software tenga habilidades de programación competitivas ( en absoluto ) tenga más sentido que exigir que todo su equipo de natación olímpica ya haya recibido un bronce o un metal mejor en el sprint de 100 m.

A menos que esté contratando a un ingeniero de software para diseñar preguntas de programación competitivas, o un entorno para hacer programación competitiva, o un lenguaje de cliente, o IDE para programación competitiva (que tiene que ser un campo extremadamente específico, no puedo ver cómo se rompería incluso …)

¿Debería?”, Sí, por supuesto, ¿por qué no? Las habilidades competitivas de programación le enseñaron sobre la resolución de problemas.

Sitios como:

  • Kattis, Kattis
  • Entregar más rápido a través de Crowdsourcing
  • codeforce
  • HackerRank
  • etc.

Esos sitios anteriores tienen muchos contenidos de programación competitivos que lo desafían a resolver problemas algorítmicos. Desde el nivel más fácil hasta el más difícil, te desafías a ti mismo contra las personas en el mundo. Ciertos sitios contienen ciertos criterios que debe cumplir para que sus soluciones sean aceptadas, son usos de memoria, rendimiento y ejecuciones de tiempo. Puede hablar con algunas personas sobre cómo mejorar sus soluciones. Lo importante es que la resolución de problemas es uno de los muchos requisitos que necesita el ingeniero de software, y la programación competitiva es una de las muchas formas de capacitarse.

Otra versión de esto: ¿por qué contrataría a alguien que sea muy competitivo?

Es probable que a los otros ingenieros de software pronto les desagrade la competitividad de sus compañeros de trabajo. Siempre he tratado de no contratar a alguien que creo que creará un conflicto porque esa es la mejor manera de destruir un equipo que funcione bien.

Por supuesto, si le gusta la programación competitiva pero puede mantenerla fuera del entorno de trabajo, podría ser una ventaja.

Sí, conocer su solución al problema competitivo sería fundamental, seguro que no siempre usará djikstra o programación dinámica en su trabajo, pero si su equipo está compuesto por personas sin esa capacidad, está arriesgando una característica que necesitaría revertido (porque funciona para un pequeño número de personas, pero se rompe sin ninguna solución escalable).

A menos que su trabajo solo esté haciendo una IU para CRUD para un pequeño número de personas, su equipo probablemente no estará bien sin él.

Probablemente esté bien si alguien en su equipo es confiable para manejar ese tipo de problema, pero 2 es mejor que uno.

More Interesting

¿Qué piensan los desarrolladores de software de los ingenieros mecánicos en la industria tecnológica?

¿Es una mejor idea ir al mercado independiente con su proyecto de software o asociarse con una empresa de desarrollo de software?

¿Cuál es la mejor manera de ganar dinero y obtener experiencia en el desarrollo de software para un estudiante en la universidad?

¿Cuántas veces debería leer 'Código limpio'?

¿Qué habilidades necesito para dirigir una empresa de software?

¿Es posible convertirse en desarrollador comenzando como analista de soporte técnico de software?

¿La creación de mi propio lenguaje / compilador me hace mejor en el desarrollo de software? Si es así, ¿cómo?

Dada una lista no ordenada de enteros, devuelve verdadero si la lista contiene duplicados difusos dentro de k índices de cada elemento. ¿Cuál es el algoritmo óptimo para este problema?

Desarrolladores de software: ¿Puede describir su primer trabajo en términos de su productividad en comparación con ahora?

¿Debo dejar mi trabajo como desarrollador de software para una gran empresa para concentrarme al 100% en la universidad (estoy en el segundo año y tengo uno más que completar. Estudio ciencias de la computación)?

¿Qué debo aprender para prepararme para un trabajo de ingeniero de software de nivel básico?

¿Cómo debería un gerente de software lidiar con una situación cuando un ingeniero que entendió el funcionamiento de un software crítico ha decidido abandonar la empresa?

Como desarrollador de software y una persona altamente insegura, temo hacer una revisión del código, ya que me siento tonto cuando mis colegas revisan mi código. ¿Qué tengo que hacer?

He sido desarrollador de software durante 4 años, trabajé con organizaciones en el lado del cliente y en el extranjero. ¿Soy elegible para el examen CSM?

¿Cuál es la mejor computadora portátil preferida para programadores y desarrolladores de software?