Cómo gané 3 de 4 medallas de oro en la Olimpiada de Computación

Cómo gané 3 de 4 medallas de oro en la Olimpiada de Computación

Me estaba preparando para las finales del Campeonato Mundial Google HashCode 2017. Esta es la competencia más grande con problemas algorítmicos organizada por Google.

Empecé a aprender C++ desde cero en noveno grado. No sabía nada sobre programación, algoritmos o estructuras de datos. En algún momento escribí mi primera línea de código. Siete meses después, el concurso de programación asomaba en el horizonte. Quería ver qué tan bien funcionaba mi estilo de aprendizaje de programación. Fue la oportunidad perfecta.

Después de dos días de competición, llegaron los resultados: gané la medalla de oro.

Me quedé impactado. Estaba por delante de los competidores con 5 años de experiencia. Sabía que había trabajado duro, pero este logro superó todas mis expectativas. Me di cuenta de que la programación deportiva era mi tema y me lancé de cabeza.

Sé lo que me llevó al éxito y quiero compartirlo contigo.

Cómo gané 3 de 4 medallas de oro en la Olimpiada de Computación

El artículo fue traducido con el apoyo de EDISON Software, que cuida la salud de los programadores y su desayunoy desarrolla software personalizado.

¿Qué lenguaje de programación elegir?

  • C++: ¡muy recomendable! Es muy rápido. La implementación de algoritmos lleva poco tiempo gracias a STL. C++ se acepta en todas las competiciones. Escribí mi primera línea de código en C++.
  • C: aprende C++ gracias al STL. Si sabes C, también puedes programar en C++.
  • Java es un lenguaje de programación lento. Tiene una clase Big Integer, pero no te ayudará mucho. Si una competición tiene un límite de tiempo, con Java seguro que lo superarás. Java no se acepta en todas las competiciones.

¿Dónde puedes practicar?

yo recomiendo Juez de Sphere Online (SPOJ). Es un recurso eficaz en términos de cantidad y calidad. Hay editores y soluciones disponibles en línea si te quedas atascado en el proceso de resolución de problemas. Además de este sitio recomiendo Kit de herramientas SPOJ и clasificador de problemas para SPOJ.pl.

Primero, necesitas perfeccionar tus conocimientos de los conceptos básicos.

Una vez que te acostumbras a la sintaxis del idioma, existen algunos problemas que superar. Comience con problemas simples que requieran práctica. En esta etapa, lo principal es determinar su estilo de programación. Tal vez te guste escribir código con muchos espacios en blanco, tal vez no. Es posible que coloque los paréntesis en la misma línea que el "si" o puede que los coloque en líneas separadas.

Tienes que encontrar tu estilo de programación porque es TU estilo.

Cuando lo busques, recuerda dos principios básicos:

  • Su código debería ser fácil de implementar. Debería sentirse cómodo implementando la solución que se le ocurra. ¿Por qué? Porque durante una competición, lo último que quieres es perderte en tu código. Siempre es mejor dedicar 5 minutos adicionales a pensar en cómo simplificar la implementación del código que dedicar 10 minutos a intentar resolverlo.
  • Su código debe ser fácil de leer. Cuando el código es fácil de leer, es fácil de depurar. Seamos realistas: los errores ocurren todo el tiempo. ¿Conoces esa sensación cuando te quedan 10 minutos y no encuentras el maldito error? Por supuesto que sí. Para evitar esta situación, escriba código legible. Una vez que comiences a depurarlo, el código te parecerá natural y fácil de entender.

Aquí hay un ejemplo mío. estilo de programación.

Cómo mejorar sus habilidades de desarrollo

Practica, practica y más practica. Le recomiendo que resuelva los primeros 250 problemas más solucionables en SPOJ. Resuélvelos en orden. Dedica al menos una hora a pensar en la solución a cada uno de ellos.

No digas: "Este problema es demasiado difícil para mí, intentaré resolver el siguiente". Así piensan los perdedores.

Toma una hoja de papel y un lápiz. Piénsalo. Tal vez puedas encontrar una solución, tal vez no. Como mínimo, desarrollarás el pensamiento algorítmico. Si no puede encontrar una solución en una hora, busque una solución ya preparada en el foro o en los artículos.

¿Qué lograrás con este enfoque? Aprenda a implementar rápidamente sus ideas usando código. Y estudiar problemas y algoritmos clásicos.

En segundo lugar, debes dominar los algoritmos y las estructuras de datos.

Siga un enfoque jerárquico. ¿Empezaste a correr sin saber caminar? No. ¿Se puede construir un rascacielos sin una base sólida? No otra vez.

No se pueden ignorar los pasos a lo largo del camino del aprendizaje. Si los ignora, se quedará con lagunas de conocimiento. Con el tiempo sólo empeorarán.

Comience con algoritmos fundamentales y estructuras de datos.

Es difícil empezar. Quizás porque no sabes qué estudiar primero. Es por eso Creé un video curso “Algoritmos y estructuras de datos”. Al crear este curso, lo basé en cómo me gustaría que me enseñaran. ¡La reacción fue increíble! Más de 3000 estudiantes de más de 100 países se inscribieron en el curso durante el primer mes.

Si trabajas para resolver problemas fáciles, nunca mejorarás.

La forma más eficaz de comprender lo que no sabes es experimentarlo en la práctica. Así aprendí. Aprendí muchas técnicas nuevas de las que nunca antes había oído hablar al elegir una tarea desafiante.

Cada tercer problema en el que trabajes debería enseñarte algo nuevo. Tenga más cuidado al elegir los problemas. ¡Elija problemas más difíciles!

Una vez que complete estos 250 problemas de SPOJ, tendrá una comprensión básica de los temas centrales de la programación deportiva. Con una comprensión profunda de la lógica detrás de los algoritmos básicos, los algoritmos de alto nivel parecerán menos complejos. De esta manera podrás aprovechar al máximo tus conocimientos.

Profundiza en cada uno de los temas principales

Aquí tienes un recurso valioso. con mucha información. Allí encontrará los 10 mejores algoritmos y estructuras de datos para cada tema. Después de 250 problemas de SPOJ, sabrá mucho de esta lista. Pero también te toparás con muchas cosas de las que nunca antes habías oído hablar. Así que empieza a estudiar estos temas en orden ascendente.

Si no fortaleces tus conocimientos después de aprender algo nuevo, rápidamente lo olvidarás todo.
Recomiendo que después de aprender un nuevo algoritmo, lo utilice en la práctica. Trabaja en 2 o 3 tareas. Busque la etiqueta del algoritmo en SPOJ. Allí encontrará problemas que necesitan este algoritmo para resolverse. Aborde estos problemas primero.

Domine la programación dinámica porque le llevará a la victoria
Según mi experiencia, toda competición tiene al menos un problema. programación dinámica. A muchas personas les duele la cabeza cuando escuchan la frase "programación dinámica" porque no la entienden en absoluto.

Y esto es bueno. Porque si entiendes la programación dinámica, ganarás.

Me gusta la programación dinámica, es mi tema favorito. El secreto de la programación dinámica es tomar decisiones óptimas a nivel global, no sólo locales. Debe dividir el problema en subproblemas más simples. Resuelva cada uno de estos subproblemas solo una vez. Luego cree una solución que combine los subproblemas resueltos. Algoritmo codicioso - lo opuesto a la programación dinámica. Requiere tomar decisiones localmente óptimas en cada paso. Y una elección óptima a nivel local puede conducir a una mala solución global.

Mientras aprende nuevos conceptos, consulte Tutoriales de TopCoder. Son muy detallados y comprensibles. Gracias a ellos pude entender árboles indexados binarios.

Trabaja duro

¿Alguna vez has oído hablar de atletas que ganan los Juegos Olímpicos sin años de práctica? Yo no.

Cada año, los preparativos para la Olimpiada de Computación comenzaron en septiembre y finalizaron en abril.

Todos los días durante estos 8 meses practiqué durante 5 horas.

Y sí, pasé estas 5 horas únicamente resolviendo problemas algorítmicos. Recuerdo los días en los que practicaba durante 8 y hasta 10 horas. ¿Por qué? Porque me gustó. Todos los días, cuando regresaba a casa del colegio, iba directamente al dormitorio, me sentaba frente al ordenador y empezaba a analizar un nuevo problema. O estaba aprendiendo un nuevo algoritmo que necesitaba saber para resolver este problema.

Si quieres ganar, tienes que hacer lo mismo. Elige un problema y apégate a él. Piénselo mientras camina hacia el supermercado o mientras conduce.

Cómo gané 3 de 4 medallas de oro en la Olimpiada de Computación

¿Sabías que cuando duermes, tu cerebro desfragmenta la información recopilada ese día? Parece estar apilando libros en orden alfabético en una estantería. Básicamente, tu cerebro piensa en los diversos problemas que enfrentas.

Esto se puede utilizar con habilidad. Antes de acostarte, lee un problema difícil y recuerda lo que se necesita para resolverlo. En esta etapa, no es necesario buscar la solución en sí. Acostarse. Tu cerebro comenzará a procesar este problema. Cuando despiertes, te sorprenderá darte cuenta de que encontraste la solución mientras dormías.

Inténtalo tú mismo. Es como magia.

Creé un video blog

Cómo gané 3 de 4 medallas de oro en la Olimpiada de Computación

Este breve párrafo no está relacionado con la programación deportiva. Si tienes veintitantos años y te preguntas cómo veo el mundo, quizás quieras consultar mi videoblog en youtube. Hablo del mundo, de la vida y de la informática en él.

Trabajo inteligente

Este es el secreto del éxito. Necesitas metas.

Somos personas y nos gusta. aplazar. Siempre queremos posponer lo que hay que hacer ahora mismo. Ver Netflix siempre es más divertido que lidiar con problemas de programación dinámica. Lo sabes y necesitas arreglarlo.

Cómo vencer la procrastinación

Fíjese metas. Siempre encontrarás problemas interesantes de los que podrás aprender algo nuevo (consulta los recursos que mencioné anteriormente). Pero es necesario resolver estos problemas, no sólo leer sobre ellos.

Así es como superé la procrastinación. Empecé un calendario de papel y llené cada día con problemas que quería resolver. Siempre rellené los problemas con dos días de antelación. Entonces supe cómo administrar mi tiempo en los días siguientes.

Cómo gané 3 de 4 medallas de oro en la Olimpiada de Computación

Entonces siempre estuve motivado. Necesitaba resolver algunos problemas y encontrar otros nuevos para llenar los próximos días del calendario. Tachar problemas resueltos se siente genial. Sé que a ti también te gusta.

Consigue tu propio calendario de papel. No crees otra lista de tareas pendientes en tu teléfono que olvidarás mañana.

Cómo depurar eficazmente

¿Quieres convertirte en un profesional? En caso afirmativo, entonces debe "depurarlo en su mente".
Ésta es, con diferencia, la técnica de depuración más eficaz que conozco porque no requiere ningún depurador. Su cerebro examina múltiples ramas de código a la vez y le brinda una descripción general mucho más amplia del código en comparación con depurador clásico.

Puedes compararte con un gran maestro que juega al ajedrez y piensa 3 movimientos por delante.

Utilizo esta técnica únicamente como mi línea de defensa inicial. Luego uso un depurador real.

Para aprender a depurar mentalmente, necesitas practicar. Cuando valides una solución a un problema y obtengas una "respuesta incorrecta", no vayas directamente al botón del depurador. Vuelva a leer el código y piense: "¿Qué está pasando en esta línea?", "¿Cómo afecta el "si" aquí al programa?", "Cuando salimos del ciclo, ¿cuál es el valor del iterador?"

De esta manera piensas por ti mismo. Con el tiempo, aprenderá a escribir código y depurarlo sobre la marcha.

Acerca del Autor

Cómo gané 3 de 4 medallas de oro en la Olimpiada de Computación
Andrei Margeloiu es un ávido programador interesado en el emprendimiento, las nuevas empresas y el aire libre. Puedes contactar con el en Linkedin.

Traducción: Diana Sheremyeva

Fuente: habr.com

Añadir un comentario