No puedo desempeñarme bien en los concursos de programación, incluso después de practicar mucho. ¿Qué debería hacer ahora? ¿Debo dejar de hacer programación competitiva?

Voy a decir algo diferente de lo que otras personas dijeron aquí.

Hoy participé en un concurso individual en HackerRank. Solo terminé en el n. ° 5, no logré implementar la solución adecuada para el último problema y tampoco logré exprimir “sucio” para obtener la puntuación completa.

Poco tiempo antes de eso terminé el entrenamiento individual en algún concurso antiguo; en ese concurso de ICPC solo terminé en el # 9, mientras competía contra equipos desde 2009 (cuando los concursantes generalmente no eran tan fuertes como hoy), y no pude resolver al menos un problema en la segunda parte del concurso. Perdí ante el ganador por hasta 4 problemas mientras era top1 en algún momento durante la segunda hora de la competencia.

En mi última ronda de FQ pasé como 30-40 minutos depurando un DP directo para por y terminé sin resolver un problema estándar que ha sido solucionado por algunas docenas de concursantes.

En mi última ronda de TC obtuve un lugar no tan horrible (alrededor del 30) solo por piratear un montón de soluciones ingenuas al primer problema; Perdí AC en la última tarea (y el número 2 en la clasificación general, supongo) debido al uso de int en lugar de mucho tiempo en DP, no pude codificar el segundo problema a tiempo, y resolví el primer problema solo poco tiempo antes del final del concurso por algo así como 90 puntos.

Puedo seguir recordando concursos recientes que hice y agregar algunos más a esta lista 🙂 Mi último AtCoder no fue demasiado bueno; mi última Academia CS fue aún peor 🙂

Lo más probable es que mis habilidades competitivas de programación sean más altas que las de cualquier otro autor que ya haya respondido esta pregunta. Al mismo tiempo, no soy un concursante de alto nivel, y conozco personas que piensan que no puedo desempeñarme bien en los concursos de programación, desde su punto de vista sobre lo que significa “desempeñarse bien”.

Y ya practiqué bastante; probablemente significativamente más que la persona que hizo esta pregunta. ¿Debo dejar de hacer programación competitiva? Sé con certeza que no haré un entrenamiento intenso después de las Finales Mundiales de ICPC ya que mi carrera de programación competitiva generalmente terminará después de eso y me enfocaré en otras cosas (como trabajo o superación personal, ya sabes …), pero es muy probable que siga haciendo algunos concursos y revisando las noticias y eventos que suceden en la comunidad. Ahora imagine por un tiempo que comenzaré a reflexionar sobre cada uno de mis concursos (la gran mayoría de los cuales son completos; creo que en la mayoría de los eventos mencionados anteriormente mejoré mis calificaciones, por lo que hay momentos en que es aún peor) y me preocupa. que me estoy desempeñando tan mal. Sería una imagen bastante triste 🙂

Todos estos “no te rindas” y “todo irá bien algún tiempo después” suena genial, pero diría que debes dejar de hacer programación competitiva (o al menos dejar de tomarlo en serio) o cambiar tu enfoque y percepción. Si lo disfruta, no debería preocuparse tanto por sus resultados. Cuando juegas a un juego de computadora y lo disfrutas, ¿te importa tanto que haya personas en algún lugar del mundo que puedan jugarlo mejor? En caso de que te importe tanto que te quite la alegría de jugar, no suena bien. Igual que aquí. Mejorará con el tiempo simplemente haciendo esta actividad, mejorará más rápido al esforzarse más e invertir más tiempo / esfuerzo en ella, es probable que no se convierta en el mejor del mundo, es posible que ya sea bastante bueno desde el punto de vista de vista de algunos concursantes que son menos hábiles, la mayoría de las personas que lo rodean lo hacen simplemente porque lo disfrutan (aquí es el momento de todas estas historias que he leído sobre India, Egipto, etc., pero al menos en países sobre los que sé cómo funciona allí, es así: la gente está haciendo una programación competitiva no porque sus padres los obligaron a hacerlo) .

Si tiene miedo de perder el tiempo, diría que tal vez no sea la inversión más óptima y rentable de su tiempo, pero no es peor que jugar o ver películas. Mejora algunas de sus habilidades, le brinda algunas ventajas: no es la mejor manera de convertirse en el mejor programador del mundo y obtener el trabajo soñado, y tampoco es una pérdida de tiempo sin sentido.

Según mi experiencia, la mayoría de las personas que dicen “Soy tonto por algo” ni siquiera lo intentaron; por lo general, “soy flojo por eso” suena mejor. Una vez en un campo de entrenamiento, un chico me dijo algo como “probablemente sea triste ser tan estúpido como tú”; Conozco a otro tipo que me dijo: “Tengo curiosidad de por qué asistes al campamento de entrenamiento, siendo tú, prefiero dejarlo y comenzar a hacer algo de lo que eres capaz, como el trabajo de oficina de rutina o la subcontratación” . Ambos tienen mayores logros en programación competitiva que yo, y tienen sus razones para pensar que no solo soy menos inteligente que ellos, sino que no soy muy inteligente en general, en ambos casos se ha dicho más bien en serio, no como una ironía / broma / juego de palabras estándar. Conozco a muchas personas que parecen ser más inteligentes que yo. Cuando estoy mirando a un concursante superior que es más inteligente que yo, puedo pensar que tal vez él esté en la cima porque él es inteligente mientras yo no lo soy, o porque trabajó mucho más que yo, o tal vez es más inteligente porque trabajó más que yo … Pero el punto es que eso no importa mucho 🙂

Resumiendo: piense si tiene razones para hacer una programación competitiva y si parece un buen gasto de su tiempo, en caso de que lo haga: siga trabajando en usted mismo, use Google / Quora / Codeforces para encontrar sugerencias / ayuda / sugerencias para mejorar tus habilidades y simplemente diviértete y disfruta el hecho de que hoy eres un poco mejor que la semana pasada o el mes pasado sin preocuparte demasiado que en comparación con el turista eres un novato completo; en caso de que no sea así, será una buena idea dejar de hacerlo y disfrutar de tu vida de otra manera.

El 99.9% de los programadores nunca resuelven ninguna de las preguntas que le preocupan y lo hacen bien, puede que no funcionen para los gigantes de la tecnología, pero la ingeniería de software es un vasto campo donde la mayor parte del trabajo aún requiere poder integrar varios componentes y construir algo útil para resolver un problema del usuario. La mayoría de las personas que hacen preguntas binarias en las que lo juzgan en función de su capacidad para encontrar una respuesta óptima en 15 minutos para un problema complicado son personas que han memorizado un conjunto de preguntas y tienen un sesgo inherente al juzgar a los candidatos en esas preguntas. La mayoría de ellos mismos no entienden la respuesta correcta aunque la hayan memorizado. Tales preguntas tenían sentido cuando hace 20 años, las personas escribieron sus propias bibliotecas y la compilación de código tomó más de unas pocas horas y la memoria era una limitación seria. Hoy, cuando hay bibliotecas, IDEs, infraestructura escalable mejorada, no tiene ningún sentido hacer estas preguntas. Siempre que una persona tenga más de 100 IQ y pueda escribir un fragmento de código para poner elementos en un bucle y extraer datos de ellos según ciertos criterios con conocimiento de conjunto, árbol, lista, conjunto como estructuras de datos, esa persona puede hacer el trabajo. Esa es la razón por la cual algunas de las innovaciones más innovadoras están siendo realizadas por adolescentes que crean sus propias startups y pueden hacer las cosas rápidamente en lugar de preocuparse por estos conceptos teóricos pero prácticamente inútiles.

La informática no es una ciencia a diferencia de otros campos como física, química, matemáticas, etc., que se basan en ciertos principios. Si bien un médico con experiencia puede responder cualquier pregunta fundamental, la mayoría de los llamados informáticos no pueden garantizar que obtendrán la respuesta correcta a un problema de programación dinámica o minimax.

En primer lugar, DEJA DE LLAMARTE TU MISMO. La actitud hacia ti mismo es importante y he sufrido ese problema durante mucho tiempo. Por favor no hagas eso.

TL; DR : La programación competitiva necesita práctica y aprendizaje. Si no puede resolver un problema, resuélvalo. Es decir, lea los editoriales, lea el código de otros, aprenda nuevos conceptos en caso de que la solución a un problema lo requiera, etc.

Por práctica, no digo que resuelvan 1000 problemas de cakewalk. No hagas eso. Es inútil. Aumente el nivel de problemas que enfrenta progresivamente.

He escrito sobre esto en el pasado. Por favor, revísalos.

  1. ¿Cómo aprendo codificación competitiva por mi cuenta?
  2. ¿Cómo aprendo programación competitiva como principiante?
  3. ¿Cómo aprendo estructuras de datos y algoritmos desde cero?

Finalmente, no eres tonto. Eres nuevo en la programación competitiva. Se necesita algo de tiempo y esfuerzo para mejorar.

Cuando se trata de programación competitiva, lo más importante que debemos tener es paciencia. Por supuesto, la programación competitiva requiere mucho trabajo duro, dedicación constante. El término que usó “practicar inteligentemente”, se ajusta mejor aquí. Bueno, cada programador competitivo establece objetivos y estrategias a corto plazo para alcanzarlos. Bueno, aquí están algunas de las estrategias que sigo y creo que son lo suficientemente inteligentes como para encajar en su punto de vista:

  1. Elijo un tema que aún no he dominado. Encuentre tutoriales sobre ese tema, principalmente de la lista a continuación:
  1. TechParoksha (no todos los tipos de tuts están disponibles, pero los que están disponibles son increíbles)
  2. Tutoriales de ciencia de datos (no vaya con el nombre)
  3. Algoritmos – GeeksforGeeks
  4. Pistas y problemas de práctica
  • Lo estudio (no necesariamente lo domino al primer intento). Pero me aseguro de terminarlo lo más pronto posible para poder comenzar de nuevo tan fresco. Y créeme, esto lo aprovecha al máximo en el segundo intento.
  • Una vez que creo que conozco bien este tema, me dirijo inmediatamente a A2 Online Judge y encuentro problemas basados ​​en ese tema en particular. Prefiero Sphere Online Judge (SPOJ) como mi juez en línea favorito. Pero preferiría elegir Codeforces si tuviera que resolver más problemas en lugar de problemas más difíciles.
  • Luego empiezo a resolver problemas en un nivel creciente de dificultad. Como elijo al Juez Esfera en línea (SPOJ) la mayoría de las veces, me aseguro de no rendirme, hasta que el problema que elegí esté completamente resuelto. Porque creo que los problemas aquí son los más difíciles y siempre te hacen sentir más y más seguro una vez que los resuelves.
  • No dejo ningún concurso en vivo de ninguno de los siguientes sitios web:
    1. HackerRank
    2. Codeforces
    3. Concurso de programación, concurso de programación, programación informática en línea
    4. HackerEarth: desafíos de programación y trabajos de desarrollador

    Aquí hay algunas otras cosas que te pueden gustar:

    1. Nosotros, los programadores competitivos, nos aburrimos fácilmente. Asegúrate de salir y tomar un poco de aire fresco de vez en cuando para intensificarte. Puedes usar algún otro tipo de entretenimiento. Mi favorito personal es resolver un concurso redondo de codeforces más antiguo en modo virtual.
    2. Encuentre un compañero, que sea igualmente apasionado por la programación competitiva. Compite con él / ella, esa es una de las mejores maneras de manipular la pereza que a veces puedes sentir.
    3. Establecer motivaciones (tales objetivos). Mi última motivación fue asegurar menos de 100 en el concurso de códigos impresos hackerrank, para poder obtener una tarjeta de regalo de amazon y una camiseta hackerrank. Pero no pude.

    No hay otra forma de éxito, pero practica al nivel hardcore.

    ¡Todo lo mejor! 🙂

    Yo también participé en la reciente Codesprint de la Universidad en hackerrank y resolví 2.5 preguntas y obtuve un rango de 1224. No creo que su desempeño fuera malo, definitivamente estará en el 20% de los participantes. Además, si investigas la razón por la que no resolviste más de 3 preguntas es porque todas las demás preguntas requieren conocimiento de estructuras de datos y algoritmos que tú y yo nunca hemos encontrado. El cuarto problema se basa en los árboles, si no sabes qué es un árbol (como yo), no hay forma de que hayas podido resolver ese problema. Todos los concursos en hackerrank están diseñados de esta manera.

    Las preguntas 1–3 se pueden resolver sin ningún requisito previo. Eso es lo único que necesita saber hasta las matrices. La pregunta 3 requiere mucho pensamiento, pero ningún conocimiento previo. Entonces, si eres capaz de resolver la pregunta 3, significa que puedes hacer lo mejor con el conocimiento limitado que tienes. Entonces, teniendo en cuenta el hecho de que pudo resolver 2.5 preguntas, significa que casi puede exprimir todas sus capacidades de pensamiento.

    Ahora las preguntas 4–7 (a veces 8) exigen conocimiento sobre estructuras de datos como árboles, gráficas (jaja, no sé mucho), pero debes conocer la teoría para resolverlo. Entonces, esto es lo que puedes hacer y esto es lo que incluso planeo hacer, en los últimos 6 meses sin ningún estudio de estructuras de datos y algoritmos pude resolver las primeras tres preguntas, ahora la siguiente etapa es aprender teoría (árboles , gráficos, etc., etc.) y luego resolver problemas.

    Por lo tanto, no piense que puede resolver todos los problemas simplemente utilizando su coeficiente intelectual, también necesita obtener más conocimiento de la parte de la teoría.

    Espero que esto ayude y, por cierto, felicidades por la medalla de bronce que obtendrás en esta competencia (código universitario).

    A2A.

    Si no resuelve problemas difíciles después del concurso, no espere resolver problemas difíciles durante el concurso .

    Deje de practicar problemas con los que ya se siente cómodo e intente resolver problemas desafiantes (problemas que cree que no puede resolver o que cree que son demasiado difíciles para usted). Siéntate durante horas, pensando en cómo resolverlo. Una vez que tenga ganas de darse por vencido y piense que ha intentado todo y luego se prepare, este problema le enseñará algo nuevo, alguna estructura de datos que no conocía o un algoritmo que es nuevo para usted o algunos trucos geniales que usted No fueron capaces de pensar.

    Si puede resolver los problemas, pero no puede resolverlos en el tiempo disponible, eso es un reflejo de la velocidad, no de la inteligencia. El entrenamiento para la velocidad tiene un beneficio, pero en realidad no es la capacidad de tener siempre la respuesta lo más rápido posible. Lo que puede aprender practicando la velocidad es cómo reconocer patrones en los problemas que está resolviendo.

    Diría que no necesariamente debes renunciar a la programación competitiva, sino concentrarte en lo que estás aprendiendo de ella. A veces aprenderá de los conocimientos que obtenga de cómo resuelve los problemas. Todos están orgullosos de una buena solución, y deberían estarlo. Recuerda cómo lo hiciste tanto como recuerdas la victoria. Otras veces, aprendes mirando cómo lo resolvieron otras personas. Algunas de las mejores cosas que puede aprender son averiguar por qué dos personas resolvieron un problema de manera diferente.

    A2A

    Deberías dejar de hacerte daño.

    Cuando estabas en la clase 5 en la escuela, ¿competiste con la clase 6?

    ¿No? Entonces, ¿por qué estás haciendo ahora?

    Idealmente, puede hacerlo, pero debe hacerlo de esta manera:

    1. Aprender el programa de clase 5
    2. Aprender el programa de clase 6
    3. Luego intenta escribir exámenes intermedios de sexto
    4. Si pasa el sexto, está bien, entonces escriba los platos principales del sexto

    En este momento, está escribiendo el examen principal de la sexta, sin registrarse en los exámenes intermedios de la sexta.

    Si todo en el mundo es fácil, seguro que correría en los Juegos Olímpicos por el 1er puesto, habiendo decidido que correré en los Juegos Olímpicos ayer.

    En otras palabras, obtener un buen rango en la práctica. La práctica es una competencia en la que aprendes con seguridad y no hay un fracaso inmediato para sentirte mal cuando recién estás comenzando o cuando corriste un poco. Más tarde, resuelve los desafíos anteriores. Entonces compite. Claro, entonces no fallarás, al menos no como eres ahora.

    La mejor de las suertes.

    ¿A quién le importa la programación competitiva de todos modos? La única vez que tiene que hacer algo así en la mayoría de los trabajos de ingeniería de software es durante su entrevista técnica inicial. Allí es posible que tengas que hacer rompecabezas de programación bajo un poco de presión. Por lo tanto, siempre que pueda responder a ese tipo de preguntas rápidamente y con gracia y entienda el diseño orientado a objetos y las mejores prácticas, debe hacerlo bien.

    Preocúpese por resolver los problemas que probablemente le permitan ganar un trabajo, no un concurso tonto.

    ¡¡No renuncies!!

    Lo principal que debe tener en cuenta es que la programación competitiva es una herramienta para mejorar sus habilidades para resolver problemas.

    ¡Muchas de las personas que crees inteligentes han llegado allí solo debido a su inmenso trabajo duro y pasión!

    Identifica tus debilidades después del concurso, mejóralas, con suficiente trabajo duro llegarás allí.

    ¡No te rindas!

    EL ABANDONAR NO ES UNA RESPUESTA A NADA. SE QUE PUEDE SER DECEPCIONADO POR EL RESULTADO PERO EL FALLO SOLO LLEVA EL CAMINO AL ÉXITO. INCLUSO DESPUÉS DE MUCHAS PRÁCTICAS, ESTÁ FALLANDO QUE SIGNIFICA QUE HAY ALGO MAL EN SU MANERA DE PREPARACIÓN, SOLO ALGUNOS CAMBIOS MENORES PUEDEN CAMBIAR TODOS LOS RESULTADOS.

    SOLO COMPRUEBE POCAS COSAS —-

    1.PEGA CON UNO Y UN MAESTRO: NO TENGAS UN POCO CONOCIMIENTO DE MUCHOS IDIOMAS DE PROGRAMACIÓN. SOLO ELIJA CUALQUIERA QUE LE GUSTE MÁS Y DOMINÉLA.

    2. ALGORITMOS PRINCIPALES

    DESCARGAR GRATIS

    DE ESTE SITIO WEB – http://ce.bonabu.ac.ir/uploads/3… Introducción a la aplicación .Algorithms.3rd.Edition.Sep.2010.pdf

    ES UN POCO LONGITUD Y COMPLICADO, PERO SI LEE TODAS LAS PÁGINAS DE ESTE LIBRO CON DEDICACIÓN SERÁ UN MAESTRO DE ALGORITMOS. NO HABRÁ NINGÚN TEMOR DE ALGORITMOS EN SU MENTE NUNCA

    3. HAGA TODO CON TODO LO QUE TIENE: DEDÉTESE EN LA PREPARACIÓN HAGA LO QUE PUEDA PARA GENERAR LA PASIÓN POR LA QUE COMENZÓ.

    La razón por la que no puede resolverlo es que no es tonto, simplemente no conoce muchos temas de programación.

    Estaba y sigo estando parcialmente en tu posición. El problema que tenemos es que leemos la pregunta y creemos que es muy simple, pero en realidad necesitamos conocer muchos temas de programación para escribir el programa.

    En el futuro, después del final del concurso, ve a ver las respuestas de cualquier pregunta que hayas intentado. se sorprenderá de no saber muchas cosas en el programa.

    Nos faltan conceptualmente. Seguir aprendiendo.