Si no soy bueno resolviendo los problemas en los sitios de programación competitivos como CodeChef o Hackerrank, ¿dónde me estoy quedando atrás?

Si tiene dificultades con la programación competitiva, debe dar un paso atrás y comenzar con lo básico. La primera fase es ponerse cómodo con algoritmos y estructuras de datos. Aquí hay una descripción general de cómo puede mejorar estas habilidades:

  • Paso 1: Algoritmos : Obtenga este libro – Diseño de algoritmo: Kleinberg / Tardos. Por alguna razón, este libro no es tan popular como los otros libros de algoritmos, pero está muy bien organizado. El conjunto completo de algoritmos se divide claramente en unos pocos capítulos: teoría de gráficos, algoritmos codiciosos, divide y vencerás, programación dinámica , flujo de red y algunos otros temas diversos en algoritmos. Debería dedicar algunas semanas a cada uno de los temas anteriores en negrita: estudie el capítulo en unos días y al final resuelva los 50 problemas. Debido a que solo hay una cantidad manejable de problemas en cada capítulo, puede resolver la mayoría de los problemas en un tiempo razonable. Es posible que desee omitir entre el 20 y el 30% de los problemas que son relativamente difíciles, pero debería poder resolver el 70–80% de los problemas, solo o con poca ayuda.
  • Paso 2: estructuras de datos y programación : para este paso, elija un idioma cuando comience y practique el uso de ese idioma solamente. Considero que Java es el mejor en lo que respecta a entrevistas / programación competitiva: orientado a objetos que ayuda a escribir código modular más fácilmente, tiene verificación de tipo, facilita el razonamiento sobre la corrección del código (a diferencia de Python) y tiene buenas bibliotecas para datos estructuras y para manejar cadenas (a diferencia de C ++). Encontré Cracking the Coding Interview bastante bueno. Una vez más, hay capítulos sobre cada tema importante (aunque más detallado que el libro anterior). Para cada capítulo, hay un conjunto de aproximadamente 10 problemas. Por lo general, omito los más fáciles y solo elijo los 1 o 2 problemas más desafiantes del conjunto. Dependiendo de su nivel y el tiempo que tenga, es posible que desee hacer lo mismo o probar todos los problemas. Para cada problema que resuelva, escriba el código desde cero sin un IDE . Y luego escribe casos de prueba. (De hecho, deje de usar IDE en la medida de lo posible en su trabajo diario. Esa será una buena práctica para aprender el idioma en el que está trabajando). Al momento de escribir el código, piense en la legibilidad, modularidad y eficiencia de su código. Finalmente, lea las soluciones proporcionadas.

Ahora, una vez que tenga un control razonable de lo anterior, comience con TopCoder. Los problemas de la División II, particularmente aquellos con 250 puntos, son bastante sencillos. Gradualmente, puede pasar a problemas más difíciles. También hay editoriales en el sitio para ayudarlo a comprender las soluciones a los problemas. Finalmente, puede volver a otros sitios como CodeChef o HackerRank, cuando se sienta cómodo con los problemas fáciles de TopCoder.

Soy estudiante de segundo año en uno de los IIT y muy decente con mi IPC a partir de ahora.

Ser un IITian y tener un IPC decente tiene (muy poca, si es que tiene alguna) correlación con ser bueno en la programación competitiva.

He intentado varias veces comenzar con los gustos de los sitios mencionados anteriormente, pero incluso las preguntas de nivel básico me llevan mucho tiempo completar

Acabas de resolver algunos problemas y, como no pudiste resolverlos de una vez, pensaste mal de ti mismo.

Si conozco el lenguaje de programación, si entiendo las preguntas, ¿dónde está la falacia de mi parte que me impide superarlas (resolver preguntas) de manera rápida y eficiente?

Conocer un lenguaje de programación y comprender preguntas comprende una fracción muy pequeña de la programación algorítmica. La práctica es lo que le permite convertir su comprensión del problema en una solución.

Es posible que conozca todas las estructuras de datos del mundo. Es posible que haya leído el CLRS / TAOCP completo, pero a menos que no resuelva los problemas TODOS los días, continuará consumiendo mucho tiempo para resolver dichos problemas.

Resolver problemas de manera eficiente requiere aún más tiempo porque necesita aprender a mejorar su solución actual.

Anónimo dio una excelente hoja de ruta para mejorar usted mismo. Además, no podría estar más de acuerdo con lo que dijo Quora User sobre la práctica. Sin embargo, creo que toda esta regla de 10,000 horas se convierte en una receta para la postergación porque es muy fácil perder la visión con un objetivo tan grande en mente.

Sugeriría seguir la “regla de las 20 horas para aprender algo”. 20 horas es una pequeña cantidad de tiempo, lo suficiente como para ser rastreado pero lo suficientemente grande como para aprender algo: convertirse en bueno en eso es cuestión de tiempo.

El siguiente video podría ayudar a este respecto: –

Divida lo que dijo anónimo en tareas que se pueden hacer en 20 horas. Siga los consejos dados por Josh (del video) y comience a trabajar.

Amigo, no es importante que hagas bien en este aspecto de la programación, pero incluso si estás buscando trabajar en este campo, te sugiero:

  • Aprenda cualquier lenguaje de programación, más importante como C ++ / python.
  • Conozca los conceptos básicos de ese lenguaje, como los bucles y las iteraciones, y cómo manejar la recursividad (importante).
  • Desarrolle los conceptos básicos de los algoritmos, ya que esto es realmente importante.
  • Antes de resolver la pregunta, intente implementar la lógica y luego aborde el problema. Si puede aplicar bien la lógica, puede codificarla bien.
  • Aprenda algunos aspectos básicos de las estructuras de datos, lo guiarán en algunos problemas difíciles.
  • Comience desde Hackerrank y luego avance a Codechef, luego finalmente a Spoj.
  • Si has terminado en el rango de Hacker, intenta resolver las primeras 100 preguntas en Spoj, te darán la ventaja y encontrarás las preguntas posteriores en tu mano.
  • Por último, tenga paciencia, tomará tiempo al principio, por primera vez, la lógica tomará alrededor de 4 a 5 horas, luego llegó la programación, así que al principio será difícil pero tenga paciencia y disfrute.

    Gracias y haz voto.

¡Eh, tú!

Bueno, porque no has nacido para hacer una programación competitiva y por eso no estás rezagado en ningún lado. Deja de pensar en la programación competitiva y mira algo más en la programación.

La programación competitiva es como un deporte y si no eres bueno en los deportes, hay muchas otras cosas en las que puedes ser bueno. Así que deja de culparte y concéntrate en la imagen más amplia de la programación con diferentes dominios como programación basada en API, desarrollo front-end, desarrollo Android, desarrollo iOS, aprendizaje automático, back-end, módulo de construcción de un producto que no es competitivo programación, utilizando los últimos lenguajes de programación y marcos como Golang, Rustlang, Scala, R, Angular JS, React JS, Ember JS, BackBone JS y otras cosas como aprender DevOps, Docker y Cloud Management, etc. Bueno, si sigo escribiendo sobre todo estas últimas tecnologías y cosas, entonces no habría mucho que explicar y mostrarle un camino.

Mi punto es que hay más en la programación competitiva. La tecnología se está moviendo a un ritmo rápido y no podrá comprenderla todo el tiempo si solo está en la programación competitiva. Sí, las empresas lo contratan debido a sus habilidades de programación competitiva y usted ya no trabajará en programación competitiva sino algo importante, un módulo o un componente de un producto que resuelva problemas del mundo real.

Y como mencionó Amit Upadhyay: no tome la programación como un trabajo. Tómelo como parte de su vida al igual que su aliento. Disfrútala. Quiéralo.

Si su voz interior dice que no puede codificar, solo codifique. Es lo único que cerrará esa voz interior.

Hay proyectos en GitHub en los que puedes contribuir: programación, documentos técnicos, etc.

Si desea ingresar al desarrollo front-end, hay plataformas como freeCodeCamp y herramientas como CodePen y JSFiddle que lo ayudan a practicar.

Si desea practicar en programación competitiva, así como en el desarrollo de aplicaciones, existen plataformas como DoSelect | Aprenda a programar y cree su perfil de desarrollador y TopCoder – Entregue más rápido a través de Crowdsourcing.

Si desea centrarse más en la programación competitiva, existen plataformas como Codeforces y CodeChef.

Además , lea el código de programadores altamente calificados. GitHub es el mejor lugar para leer códigos escritos por algunos de los mejores programadores. Analice cómo se han acercado y mejore sus habilidades de implementación.

Codificación feliz 🙂 Cree y forme parte de productos que la gente adore.

PD: Puedes aprender cosas comenzando con una programación competitiva, lo único es no solo apegarte a ella.

En primer lugar, me gustaría presentarme un poco, independientemente de ser anónimo, para que te sientas cómodo. Soy estudiante de segundo año en uno de los IIT también, y he estado haciendo programación competitiva por un tiempo. No, no soy tan bueno en eso, pero solo estoy aprendiendo, y actualmente soy capaz de resolver 5-6 problemas en los desafíos largos de CodeChef. ¡Largo camino por recorrer! 🙂

Sí, ahora para comenzar con su pregunta, me parece apropiado responder esa pregunta, porque he pasado por esa fase. Entonces, lo que descubrí fue que, para hacer el bien en la programación competitiva, al menos ser un tipo de nivel medio, lo cual me considero ahora, debes hacerlo por fases.

1. La fase de CAKEWALK.
En primer lugar, hay preguntas que no necesitan ningún conocimiento previo, excepto la lógica simple y la sintaxis básica de un lenguaje de programación. Todo lo que realmente necesita es saber escribir un idioma y una lógica simple para resolverlo. Clasificaría estos problemas a continuación como cakewalk.

Chef y comentarios
La mejor caja

Entonces, si puedes escapar fácilmente, ¡felicidades! ahora estás en la siguiente fase.

2. La FASE DE ALGORITMO ESTÁNDAR.
Ahora que ha terminado con los conceptos básicos de un idioma y problemas fáciles, debe conocer algunos algoritmos estándar básicos y sus aplicaciones. Si observa de cerca, siempre hay algunos problemas que son solo las implementaciones estándar de algoritmos estándar. Consideraría conocer algoritmos gráficos (dfs, bfs, rutas más cortas, árbol de expansión mínimo), programación dinámica, estructuras de datos (árboles de segmentos, matrices de sufijos), etc. en esta fase. Si conoce estos algoritmos y lo que realmente hacen, pensar un poco en la mayoría de los problemas le haría convertirlos en algún tipo de algoritmos estándar, o sus aplicaciones.

Ahora hay dos maneras, puede hacerlo, aprender un algoritmo y luego practicarlo, o practicar preguntas y aprender el algoritmo que debe usarse para resolverlos. Personalmente, prefiero lo último, porque te hace pensar en todas las formas posibles de resolver una pregunta, y solo cuando estás seguro de que aprendes la nueva forma, y ​​te queda más tiempo en la mente. Pero, entonces este es mi camino. Y si realmente quieres probar y confiar en mí, consideraría a Sphere Online Judge (SPOJ) como el mejor lugar para esto.

Una vez que conozca estos algoritmos estándar y haya practicado mucho, podrá resolver fácilmente la mitad de los problemas. Serás yo 🙂

3. La fase de OPTIMIZACIÓN.
Descargo de responsabilidad: yo mismo no he podido completar esto, pero creo que esto sería lo mejor para mí, a continuación.

Ahora, cuando ve un problema, conoce un enfoque para el problema. Pero necesitas hacerlo mejor. Con mejor puede significar la restricción de tiempo en el problema, o la restricción de espacio. Para una mejor comprensión, te daré un ejemplo. Este fue un problema en el largo desafío del mes pasado, supongo, Una historia con cuerdas. Ahora sé que podría hacer esto usando matrices de sufijos, y de hecho, yo y mi compañero de equipo pasamos mucho tiempo implementándolo, pero nos quedamos atrapados con la restricción de tiempo. Necesitaba una implementación O (nlog ^ 2 (n)), y no tenía idea de cómo hacerlo. Entonces esta es la fase, cuando necesitas mejorar, y supongo que no hay una forma “definida” de hacerlo, ¡y todo lo que supongo es que necesito practicar y aprender!

4. La fase ALL-MATHS.
Ahora, esto se divide en todas las fases. Necesitas tener un buen control de la combinatoria, la probabilidad y la geometría a veces. Lucho con esta parte, y tal vez puedas ayudarme con esto. 🙂

Al final, todo lo que diría es que lo que encontré fue que lo único que podía mejorar en la programación competitiva es practicar. Cuanto más haces, mejor te vuelves. ¡No te rindas, confía en mí, la felicidad de un ‘GREEN TICK’ no tiene comparación! Happy Coding 🙂

PD: ¡Esta es mi segunda respuesta más larga en quora, supongo! Y todas las sugerencias fueron mi propia opinión personal y experiencias. Puede o no funcionar para usted, pero supongo que vale la pena intentarlo.

PPS Todas las sugerencias son bienvenidas para mejorar la respuesta, y todas las ideas para mejorarme en la programación competitiva, ¡Gracias! 🙂

EDITAR: Muchas gracias por el apoyo 🙂 No esperaba tantas vistas 🙂 ¡Y sí, me las arreglé para estar en el top 20 durante dos Concursos largos de Codechef! 😀

Está diciendo que no es bueno para resolver problemas en estos sitios, porque cree que es lento. Pero si puede resolver un problema tomando un tiempo o puede ser más del tiempo requerido, no necesariamente significa que no es un buen programador competitivo, solo significa que es un principiante y necesita practicar más y más para aumentar tus habilidades y velocidad también.

Hay un problema con nuestra velocidad de resolución de problemas, es decir, para resolver un problema muy rápidamente, debe tener algunas cosas:

  1. Usted sabe de qué está hablando el problema, y ​​puede hacerlo si conoce los algoritmos estándar. Necesita aprender sobre Algoritmos estándar.
  2. Usted sabe qué operaciones son necesarias para tratar el problema y dónde almacenar los datos. Usted sabe qué tipo de estructura de datos admite ese tipo de operaciones de manera eficiente. Necesita aprender sobre las estructuras de datos.
  3. Sabes cómo dividir el problema en partes que tu mente considera fáciles como el infierno. Sabes cómo escribir un pseudocódigo para la solución. La escritura de pseudocódigo evita muchos errores que suele cometer al codificar directamente, por lo general aumenta la velocidad y la precisión de la codificación. (Yo trabajo conmigo)
  4. Ya ha resuelto problemas similares al que está resolviendo actualmente. Esta es la poción mágica. Ahí es donde entra cada vez más práctica. Si ya ha resuelto problemas como este, no necesita nada de lo descrito anteriormente, porque ya ha tenido todas esas cosas mientras resolvió otros problemas similares a este. Entonces, esta vez, resolverá el problema en menos tiempo, con más precisión y con mayor confianza.
  5. Finalmente, sabes cómo codificarlo. Para eso necesitas ser competente en al menos un lenguaje de programación. C ++ es el lenguaje más recomendado para este propósito.

Necesitas tener paciencia, incluso cuando no puedes resolver un solo problema en todo tu día. (Esto ha sucedido conmigo) Tal vez el problema fue demasiado difícil, tal vez no tenías las habilidades necesarias para resolver ese problema, tal vez tú aprendió muchas otras cosas nuevas solo por ese problema, o tal vez eligió el problema incorrecto de acuerdo con su habilidad / experiencia / nivel de recursos. La práctica perfecta es la única clave que puede hacer que tenga una solución de problemas más segura y rápida. Cuantos más problemas resuelva, más velocidad / confianza / precisión / habilidades obtendrá. Una cosa más que queda aquí es la mejora. Mejoras a medida que practicas y aprendes cosas nuevas, pero al ver el código de otros Top-Coders para un problema que resolviste o no pudiste resolver, lo aprovechas al máximo. Aprendes nuevas tácticas y ahí es donde entra la mejora.

¡Todo lo mejor! 🙂

Amigo, solo estoy en tu categoría. No se sientan bajos de ustedes mismos.
Bueno, no soy un estudiante sino un profesional que no encuentra suficiente tiempo para dedicarlo a los sitios que mencionó.
Cuando era estudiante, solo podía saber sobre SPOJ y TopCoder, pero nunca lo intenté. ¡¡¡Triste!!! Todavía me siento mal por eso.

Pero de todos modos, el aprendizaje nunca termina.
Me uní a Hackerrank y Codechef, resolví primero los problemas de práctica. Me dio una buena confianza. Incluso trato de participar en desafíos largos y en vivo, pero de una manera muy similar a la suya, termino resolviendo no más de 1-2 problemas.
Cuando me veo en la clasificación, es frustrante, pero sabes lo que no me siento mal porque hay más personas que están en el rango inferior a las que están por encima de mí, y esta historia aún continúa y mejora. Lo único que tengo que hacer es no dejar de intentarlo.
En un reciente desafío de HackerEarth, logré asegurar mi lugar en la quinta página de la tabla de clasificación (23 páginas de filas de alrededor de 2200 participantes)

Volviendo a las habilidades de programación, sinceramente, no tengo ninguna.
“Cuando pienso en una forma de resolver un problema, termino abriendo un número de pestañas de stackoverflow en mi navegador solo para ver cómo puedo implementarlo de manera segura”.
Seguí siendo malo en la programación incluso cuando era estudiante y hasta la fecha también.

Leí blogs y editoriales en estos sitios en mi tiempo libre, lo recomendaría.

Eres un estudiante y eso es una ventaja, tu hambre de aprendizaje te hará sobresalir en el transcurso del tiempo. Me faltaba esto en mi vida estudiantil, no deberías.

Feliz codificación. Cuídate.

Ni siquiera soy de IIT. Todavía soy un novato en programación competitiva. Lo que tengo es pasión por lo que necesito hacer. Soy capaz de resolver preguntas 6-7 en codechef desafíos largos y eso también por un esfuerzo enorme. Pero aún sigo. Solo tengo dos cosas que decir en su caso. Primero,

La mente lo es todo. Lo que piensas es en lo que te conviertes. -Buda

Sí, piensa que tendrás éxito y practica. Créame en el mundo de la programación, solo unos pocos son prodigios, el resto de los mejores programadores están allí debido a su arduo trabajo, pasión y dedicación. ¿Tenían las mismas dudas que tienes ahora? Sí, puedo asegurarlo. Pero dejaron de lado esas dudas y simplemente trabajaron duro.

En segundo lugar, no tome la programación como un trabajo. Tómelo como parte de su vida al igual que su aliento. Disfrútala. Quiéralo.

Si su voz interior dice que no puede codificar, solo codifique. Es lo único que cerrará esa voz interior.

No estás rezagado en ningún lado si lo estás intentando. Incluso si lleva demasiado tiempo, lo que pasa es que lo intentaste. Te estás mejorando lentamente. Cualquier cosa no sucede en un instante a menos que sea destrucción. Así que la construcción de un gran programador lleva tiempo :). Depende de usted si quiere aguantar.

Hay una muy buena matemática detrás de esto. Suponga que su valor es [matemática] 1 [/ matemática]. Ahora programa a diario, incluso si te tomó todo el día que aprendiste algo nuevo. Digamos que usted mejoró en [matemáticas] 1% [/ matemáticas]. Ahora, al final del día, su valor es [matemáticas] 1.01 [/ matemáticas].
Crees que no hay ningún cambio, PERO.

Si haces eso a diario.
[matemáticas] 1.01 ^ {365} = 37.8 [/ matemáticas].

En un año, eres 37.8 veces más que 1 año antes sin darte cuenta de que eres mejor 🙂 Así que elimina las dudas y el código. Lo que te falta es acción sincera.
Así que solo haz código, disfruta el código, ama el código.

Feliz codificación 🙂 salud

No soy un gran programador, pero he realizado muchos proyectos pequeños en Java, Android y PHP (+ HTML 5).

El simple hecho de conocer los lenguajes de programación no hará que nadie sea un buen programador.

Muchos desarrolladores de Java me preguntan cómo ser un mejor programador, cómo puedo mejorar mis habilidades de programación. Hace 2 años, solía hacer las mismas preguntas a otros programadores, porque era bueno en Java pero no tan bueno en la habilidad para resolver problemas.

Esta es una realidad, la era de hoy está llena de expertos en lenguaje que los programadores reales. Es fácil comprender palabras clave, métodos y API de Java o cualquier otro lenguaje de programación, pero al mismo tiempo es difícil resolver problemas reales.

Y hoy las compañías de TI no le piden una solución completamente implementada del problema. Lo único que quieren es una idea eficiente o la forma de implementar la solución.

Concentrarse más en las estructuras de datos, analizar más y más algoritmos y crear sus propios algoritmos para los problemas actuales hace que la resolución de problemas sea fácil para los programadores. Entonces, antes de comenzar la implementación real de cualquier problema, es una buena práctica escribir un algoritmo para que tengamos una fase de implementación feliz.

Soy estudiante graduado en ciencias de la computación de una universidad de ingeniería muy pobre. La primera vez que llegué a conocer el lenguaje de programación cuando estaba en el segundo año de mi graduación y luego comencé a aprender c / c ++. Lo encontré muy interesante, desde ese día comencé a aprender y traté de resolver algunos problemas de SPOJ, pero me resultó bastante difícil, después de eso llegué a conocer el código chef y topcoder y luego comencé a aprender de viejos concursos y al ver otros códigos cómo Han resuelto los problemas del concurso. Ahora puedo resolver fácilmente los problemas de SRM 250. He resuelto muchos problemas difíciles en SPOJ (Total 370 problemas con 124 puntos).
Puede consultar los tutoriales de Topcoder, también puede consultar el foro de spoj que muchas personas publicaron sugerencias sobre los problemas.

No puedo creer que intentes hacerlo y no puedas continuar. Pregúntate a ti mismo, ¿estás leyendo los problemas correctamente? ¿Te asustan las preguntas antes de intentarlo? ¿Estás dando lo mejor de ti para resolver el problema? Como sabes cómo comenzar con la estructura de datos y el algoritmo, no entraré en eso. Estás cursando el segundo año de pregrado. Y dijiste que sabes un idioma. Deberías ser bueno entonces. No creerá, pero todos comienzan de la misma manera y aquellos que no dejan de practicar y tratan de aprender de varios problemas que no pudieron resolver, aprenden muy rápido. Comience con conceptos básicos como matriz, cadena, lista, lista vinculada. Hay varias otras estructuras de datos como árbol, gráfico, etc. Cuando avanza, necesita comprender cómo usar la estructura de datos adecuada para un problema dado. Hay algoritmos que requieren cierta estructura de datos. Si entiendes este juego, puedes resolver la mayoría de los problemas. Pase la mayor parte del tiempo mirando varios problemas, trate de resolverlos, aprenda de la solución de otros. Mis dos libros favoritos son

  1. descifrando la entrevista de codificación de gayle laakmann mcdowell (Verá varios enfoques para un problema dado y ahí es donde más aprende).
  2. CLRS (explicación muy profunda para varias estructuras de datos / algoritmos, creo que si lee algo desde aquí, no lo olvidará fácilmente).

Nunca pares, sigue aprendiendo. Los algoritmos son geniales !!!

La única forma de mejorar la programación es PROBARLO, CONSEGUIRSE, PEDIR AYUDA DE OTROS DESTACANDO LO QUE ESTÁ INTENTANDO que no le está dando los resultados correctos.

Haz este problema por problema; Y seguramente mejorarás.

En caso de que desee un curso dirigido por un instructor donde personas con ideas afines aprendan todo esto en un entorno de aprendizaje colaborativo … Eche un vistazo a las estructuras de datos y la capacitación en algoritmos

Estoy de acuerdo con la respuesta de Amit Upadhyay . Por cierto en un aspecto diferente, no soy un codificador. Pero lo que me apasiona es resolver acertijos de Sudoku. Empecé a resolverlos hace unos 4-5 años. Inicialmente mis tiempos fueron alrededor de 45 minutos. Podría haberme rendido en ese momento, pensando que nunca podría llegar al campeonato. Sin embargo, me quedé solo por el gusto de hacerlo. En el proceso, desarrollé varias técnicas que aumentaron drásticamente mi velocidad (curiosamente, también desarrollé una técnica probabilística para resolver el Sudokus diabólico que, para mí, ya no existía como la técnica de Hilo de Ariadne ).

Cambié a 2013 y completé un tipo especial de Sudoku (intenté este tipo de Sudoku por primera vez) que apareció en la final del Campeonato Mundial de Sudoku 2007, en 11 minutos. El campeón mundial Thomas Snyder (EE. UU.) Lo hizo en menos de 5 minutos (lo saluda a él !!!). Cuatro investigadores inventaron un algoritmo para resolverlo. Las simulaciones por computadora les dieron la respuesta correcta en menos de una hora.

Entonces, aparentemente, soy más rápido que una computadora pero más lento que un hombre.

Actualmente estoy trabajando para vencer a Snyder. Sé que el camino por delante es empinado, ¡pero tengo que recorrer muchos kilómetros antes de dormir!

PD: espero que entiendas la analogía. Mantén tus pasiones … ¡y la mejor de las suertes!

La verdadera pregunta que puede hacerse es qué tan bueno sería un solucionador de problemas en un entorno de trabajo real. Las tareas que debe realizar en el lugar de trabajo y las que debe completar durante la capacitación a menudo no se correlacionan.

Afortunadamente para ti, hay muchas más opciones que Hackerrank y CodeChef. Difieren en lo que pretenden lograr y en cómo lo hacen, así que no se desespere si cree que se está quedando atrás, puede que no sea usted.

Hackerrank es una buena manera para que los codificadores se comparen. Se enfoca en varias cosas, pero su ajuste al mercado es probablemente como una herramienta de abastecimiento de talento de TI para compañías de reclutamiento, con el objetivo de atraer a un gran número de programadores a una plataforma central donde serán clasificados y, por lo tanto, estarán disponibles para que las compañías los vean. Pero el único problema es que los programadores a menudo se prueban a sí mismos de maneras peculiares, enfocándose en código puro, conocimiento algorítmico y desafíos que son más una cuestión de prestigio y no una habilidad práctica que aplicarías en la fuerza laboral.

CodeChef, por otro lado, parece estar más orientado hacia el desarrollo de habilidades al permitir prácticas, desafíos y una comunidad de apoyo que está allí para ayudar a los codificadores a comprender sus problemas a través de discusiones. Son una gran comunidad y un gran recurso para encontrar una manera de aprender y avanzar, pero cuando se trata de pruebas prácticas, son bastante básicas.

Lo que te sugiero que hagas es buscar plataformas de prueba que estén orientadas a servir como herramientas para el reclutamiento. La compañía que cofundé junto con desarrolladores realmente talentosos que estaban frustrados con lo que otras compañías probaron, creó una plataforma para probar de la manera más práctica posible. Echa un vistazo a Devskiller para obtener una prueba gratuita que puedes usar para tomar algunas pruebas tú mismo. Prueba no solo el lenguaje o la capacidad de codificar, sino más bien la capacidad de resolver los problemas en los que un desarrollador trabajará en su trabajo real. Para hacerlo, deben dejar que el programa trabaje en proyectos de aspecto real, con un árbol de proyectos completo que utilice bibliotecas de marcos y otras dependencias. Del lado del candidato, tienen que dejar que los programadores utilicen todos sus recursos utilizados diariamente (IDE, Google, Stackoverflow, etc.).

Si descubre que aún está rezagado en lo que respecta a estas pruebas, es posible que deba trabajar para mejorar algunas de esas tecnologías, y en ese caso, CodeChef o LeetCode son buenas maneras de comenzar. También puede ver algunas cosas más avanzadas en Codecademy o Code Camp.

Espero que esto ayude a tranquilizarlo.

Comencé una programación competitiva cuando estaba en mi segundo año y enfrenté problemas similares. Comencé con SPOJ y gradualmente me mudé a otros sitios como Codeforces, Codechef y Hackerrank.

Es bueno comenzar con problemas fáciles y aumentar gradualmente su confianza. Si se está preparando para competiciones como ACM ICPC, necesita algo de experiencia en concursos de programación cronometrada. Aquí es donde Codeforces ayuda mucho. Después de cada concurso, asegúrese de leer el editorial e intente resolver los problemas. Aquí es donde sucede el aprendizaje real. No se sumerja primero en los algoritmos más difíciles porque puede resultarle difícil y simplemente darse por vencido. Siempre es bueno avanzar gradualmente.

¡Mucha suerte y saludos!

Hay algo llamado la regla de las 10000 horas, cuya esencia es que solo debes perseverar lo suficiente, y después de una larga serie de problemas iniciales, ¡serás bastante bueno en lo que estás tratando de hacer!

En lo que respecta a hackerrank, puede consultar este blog con enlaces a tutoriales e indicadores, si es un novato en nuestro sitio. ¿Recuerdas esos complicados conceptos de cálculo después del grado 10 y cuánto tiempo tomó dominar? Lo mismo es válido para la programación competitiva: intente, intente intente nuevamente.

Aquí está la publicación del blog que puede resultarle útil: HackerRank

Sí resuelvo las preguntas de Codechef. Participo solo en Cook-offs, concurso corto de 2.5 horas. Las preguntas no tienen nada que ver con el lenguaje de programación.
Asegúrese de tener un buen conocimiento de los algoritmos y evite el uso de soluciones brutas.

Primero debes resolver bien no. de problemas de DS y Algo en geeksforgeeks / carreracup. Sus problemas son pequeños y conceptuales. Una vez que se sienta cómodo con ellos, debe saltar a estos sitios competitivos.

Si bien la programación competitiva es una buena manera de mejorar sus habilidades de codificación. Pero no es la única forma. Te aconsejaré que hagas algunos proyectos personales que resuelvan algunos problemas de la vida real. Allí comprenderá por qué se necesita toda esa optimización. Pude resolver problemas en spoj poniendo algo de tiempo pero no lo estaba disfrutando. Creé algunos juegos y disfruté mucho trabajando en mejorar mis habilidades al mismo tiempo.

Te falta práctica … practica tanto como puedas … también te pueden faltar conceptos básicos, a veces interpretamos los conceptos de manera incorrecta en el momento en que revisas tus conceptos y mencionas que solo sabes el idioma que te falta. para mí es práctica, así que practiquen todos los programas que puedan y cualquier concepto que lean sobre el lenguaje, vean primero su programa