En realidad, tenía que diferir de las respuestas anteriores que he visto sobre esta pregunta diciendo que “la programación competitiva” es lo más importante. Dije que depende de qué tipo de entorno esté operando ese “buen programador” y, a veces, diría que no, como he observado en la vida profesional real. Como programador universitario y una persona que está aprendiendo a programar y llegando a una entrevista, sí, ayuda a mejorar. Para la parte que es un factor importante o uno que te convierte en un programador exitoso en la industria, diría que tienes que ir mucho más allá y sería un No
La programación competitiva le brinda muchos de los beneficios enumerados a continuación: pensamiento creativo y listo para usar, hacer las cosas rápidamente, verificar su solución con algunos casos de prueba. Pero entonces, el entorno limitado (en términos de alcance y tiempo) en el que ocurre la programación competitiva es muy diferente del mundo real cuando trabajas en un proyecto industrial de envío con varios millones de personas como clientes.
1. La programación competitiva a menudo consiste en obtener una solución rápidamente que pase las pruebas de los 5 jueces que diseñaron el problema. En el mundo real, debe centrarse en una solución que funcione para la mayoría de los clientes, que son sus jueces. Incluso si su código fuera 99.99% correcto, en una audiencia de 10 millones de usuarios, más de 1,000 usuarios aún llorarían. Y allí una solución rápida no importa, la mejor solución sí. Un buen programador competitivo necesita asimilar esto para ser un buen programador en la industria.
- ¿Cómo puede un ingeniero de software trabajar como freelance?
- Cómo pasar de gerente de proyecto a líder de producto en desarrollo de software
- ¿Cómo es ser ingeniero de software para el gobierno?
- ¿Qué tan pronto antes de graduarme debo comenzar a buscar trabajos [de desarrollador de software]?
- ¿Cuáles son las habilidades transferibles del ingeniero de software al aprendizaje automático?
2. Los programas competitivos suelen ser de un solo uso. Tienes un problema, resuélvelo, escribe un código que tal vez se vea una vez y tal vez no. En ambos casos, una vez que pasa la prueba, a nadie le importa o la vuelve a visitar. En el mundo real, su código debe mantenerse durante varios años y para cualquier gran proyecto, pasa por sesiones de depuración, cientos de veces. Por lo tanto, ha pasado la prueba del tiempo y los ojos fijos, una y otra vez, por lo que el buen programador en la industria necesita operar de manera bastante diferente para eso.
3. Los problemas en los programas competitivos son aquellos que tienen mucho más que ver con los algoritmos y su aplicación. No son necesariamente problemas de diseño complejos donde los ingenieros pasan más tiempo diseñando una solución hermosa que implementando. Un “verdadero buen programador”, entiende que la parte del diseño es tan importante como la solución y pasa tanto tiempo en el libro “Gang of Four” que en la “Referencia completa XYZ”
4. En el mundo competitivo, obtener una solución que funcione es más importante que el espacio de memoria y las limitaciones de tiempo de procesamiento. En el mundo industrial, la complejidad de espacio y tiempo es crítica porque su código es solo una pieza del rompecabezas completo. Si usara más memoria o tiempo, todo el software, el sitio web y el servicio serían lentos e impactarían en la máquina del cliente. Los buenos programadores de la industria tienen en cuenta ese panorama más amplio que no necesariamente se enseña mediante programación competitiva.
5. Finalmente, los programas competitivos suelen ser piezas independientes. Los buenos programadores entienden que necesitan diseñar su código en aras de la reutilización o como interfaces que se pueden ampliar. Los programadores competitivos a menudo no tienen que preocuparse por eso
Dicho todo esto, durante un proceso de entrevista, la industria se enfoca en cosas de programación competitiva y, a menudo, es una forma de comenzar las cosas. Una vez que se contrata a una persona, la mayoría de las empresas con verdaderos “buenos programadores” entrenan, hacen cumplir y refuerzan los puntos anteriores para convertirlos en buenos programadores de calidad industrial, ¡solo de los competitivos! 🙂