¿Qué puede sugerirle a un aspirante de CSE que quiera ser bueno en la programación competitiva?

El primer paso es aprender un lenguaje de programación a fondo. Tienes 3 opciones, C ++, Java y Python. Te sugiero que vayas con C ++. Déjame explicar por qué. Learning Python le dará una buena introducción a la escritura de la lógica de programación. Java te lleva más profundo por la madriguera del conejo. C ++ toca todos los conceptos que necesitará para comprender la informática y las computadoras en general. Trataré de representar esto visualmente.

C ++ toca el acorde correcto entre abstracciones de programación (encapsulación, plantillas, herencia) y metal desnudo (punteros). Puede cambiar de marcha fácilmente entre ambos espacios. C ++ también es un lenguaje multiparadigm y no te obliga a adoptar un estilo de programación específico. Además, todos estos conceptos son atemporales y seguirán siendo relevantes durante muchas décadas, a diferencia de los marcos y los lenguajes de moda que se encuentran cada dos semanas.

Ahora que lo he convencido para que elija C ++ (no importa qué versión, C ++ 14 o C ++ 11 o el valor predeterminado, todo funcionará bien), aprenda bien la biblioteca estándar, especialmente el procesamiento de entrada / salida y STL. Se debe dedicar un tiempo y un esfuerzo considerables a procesar la entrada de la consola y formatear los resultados e imprimirlos nuevamente en la consola en una programación competitiva. Hace una gran diferencia si sabes cómo manejar esto bien.

No puedo enfatizar la importancia de aprender STL lo suficiente. Incluso leer el código fuente de cualquier implementación de STL dará una buena idea de cómo escribir C ++ idiomático. STL tiene las estructuras de datos canónicas que se pueden usar para modelar cosas más complicadas como gráficos (Ej: piense en vectores de vectores si desea construir listas de adyacencia).

Si ha hecho lo anterior, continúe y compre Programación competitiva. Lo recomendaría como la biblia de la programación competitiva que sigue un enfoque de “Aprender haciendo”. Puede resolver problemas y enviarlos en línea de acuerdo con la categoría prescrita por el libro.

También debe aprender a probar su código y verificar si ha manejado todos los casos correctamente. Esto desarrollará sus habilidades de comprobabilidad y mejorará sus habilidades de “traducción de requisitos a código” (¡no tengo una palabra para esto!), Una habilidad muy solicitada en la industria. Se sorprenderá al saber que muchos problemas de programación tienen requisitos y casos extremos ocultos deliberadamente.

Por último, disfruta resolviendo problemas de programación. La programación competitiva es una actividad gratificante si desea seguir una carrera en ingeniería de software. No te estreses por “respuestas incorrectas” o bloqueadores. Hay una inversión de tiempo inicial involucrada en la fase de aprendizaje, pero mejorará si es consistente. ¡Buena suerte!

Para motivarme, también recomendaría ver esta lista de reproducción.

Además, verifique la respuesta de Lakshmi Narasimhan Parthasarathy a ¿C / C ++ alguna vez desaparecerá o se volverá más refinado?