¿Cuál es la mejor estrategia para mejorar mis habilidades en programación competitiva en C ++ en 2-3 meses?

Esta publicación ha sido tomada de la publicación del blog Learn to Code by Competitive Programming escrita por MV Kaushik cuando estaba haciendo una pasantía en HackerEarth

Aquí hay algunos pasos para comenzar y ser bueno en eso.

    • Obtenga un código de escritura cómodo en cualquiera de estos lenguajes C, C ++ o Java . ¿Por qué solo C, C ++ o Java? Porque estos son los lenguajes estándar permitidos en cualquier competencia de programación.
    • Si ya eres bueno en C, se sugiere aprender C ++ . Es el lenguaje más popular entre los programadores competitivos debido a su velocidad y una excelente biblioteca en forma de STL (Standard Template Library).
    • Elige un juez en línea. Los recomendados son Topcoder y Codeforces . Estos sitios tienen problemas de alta calidad y también le permiten ver la finalización del concurso posterior al código de otros. Estos también clasifican los problemas en función del tema. Algunos otros jueces populares incluyen SPOJ, CodeChef (impulsado por SPOJ) y HackerEarth.
    • Para comenzar, comience con problemas simples que generalmente requieren transformar el inglés en código y no requieren ningún conocimiento sobre algoritmos. Resolver Div 2 250 (División 2, 250 puntos) en Topcoder o Div 2 Problema A en Codeforces es un buen comienzo.
    • En las primeras etapas de la programación, uno tiende a escribir largos fragmentos de código, lo que en realidad no es necesario. Intenta mantener los códigos cortos y simples .
    • Practique estos problemas hasta que se sienta cómodo de poder enviarlo por 240 puntos impares en cualquier día.
    • Comience a implementar algoritmos básicos (o estándar). Se sugiere leerlos de los tutoriales de Topcoder o Introducción a los algoritmos .

      1) Algoritmos gráficos: primera búsqueda de amplitud (BFS), primera búsqueda de profundidad (DFS), componentes fuertemente conectados (SCC), Dijkstra, Floyd-Warshall, árbol de expansión mínima (MST), clasificación topológica.

      2) Programación dinámica: problemas de programación dinámica estándar como corte de varillas, mochila, multiplicación de cadena de matriz, etc.

      3) Teoría de números: aritmética modular, teorema de Fermat, teorema del resto chino (TRC), método euclidiano para MCD, logarítmica
      Exponenciación, tamiz de Eratóstenes, función totient de Euler.

      3) Codicioso: problemas estándar como la selección de actividades.

      4) Técnicas de búsqueda: búsqueda binaria, búsqueda ternaria y reunión en el medio.

      5) Estructuras de datos (Básico): pilas, colas, árboles y montones.

      6) Estructuras de datos (Avanzado): Trie, árboles de segmentos, árbol Fenwick o árbol indexado binario (BIT), estructuras de datos disjuntas.

      7) Cadenas: Knuth Morris Pratt (KMP), algoritmo Z, matrices de sufijos / árboles de sufijos. Estos son algoritmos poco avanzados.

      8) Geometría computacional: Graham-Scan para casco convexo, barrido de línea.

      9) Teoría del juego: principios básicos del juego de Nim, números de Grundy, teorema de Sprague-Grundy.

      La lista no está completa, pero estas son las que encuentras con mucha frecuencia en los concursos. Existen otros algoritmos, pero rara vez se requieren en los concursos.

    • Puede encontrar la descripción y la implementación de algoritmos estándar aquí.
    • Una vez que tenga suficiente conocimiento de los algoritmos populares, puede comenzar a resolver los problemas de nivel medio. Eso es Div 2 todos los problemas en Topcoder y Codeforces. Es aconsejable no ir a Div 1 500 en este punto.
    • Aprender a codificar se trata de practicar. Participa regularmente en los concursos de programación. Resuelve los que no puedes resolver en el concurso, después del concurso. Además de Topcoder y Codeforces, también puedes ver los concursos HackerEarth Challenges o Codechef.
    • Lea los códigos de los programadores de alta calificación. Compare su solución con ellos. Puede observar que es simple y más corto que su solución. Analice cómo se han acercado y mejore sus habilidades de implementación.
    • Lee los editoriales después del concurso. Puedes aprender cómo resolver los problemas que no pudiste resolver en el concurso y aprender formas alternativas de resolver los problemas que podrías resolver.
    • Siempre practica los problemas que podrías resolver en el concurso . Suponga que si puede resolver Div 2 250 y 500 en el concurso pero no Div 2 1000, practique tantos problemas Div 2 1000 como pueda.
    • No pase demasiado tiempo si no está obteniendo la solución o si está atrapado en algún lugar.
    • Después de sentir que ha pasado suficiente tiempo, mire los editoriales. Comprende el algoritmo y codifícalo. No mire la solución real antes de haber intentado escribir el código por su cuenta.
    • La programación es una habilidad muy práctica y práctica. Tienes que hacerlo continuamente para ser bueno en eso. Teóricamente, no es suficiente resolver el problema, debe codificarlo y aceptar la solución . Saber qué algoritmo / lógica usar e implementarlo son dos cosas diferentes. Se necesitan ambos para ser buenos en la programación.
    • La fase de aprendizaje de programación llevará mucho tiempo y la clave es practicar regularmente . Toma algún tiempo antes de que puedas intentar Div 1 500 y otros problemas difíciles. No deje de leer los editoriales e implementarlos, incluso si toma muchas horas / días. Recuerda que todo requiere práctica para dominarlo.

Se necesita una cantidad considerable de tiempo antes de que seas bueno en eso. Tienes que mantenerte motivado todo el tiempo. Formar un equipo y practicar es una buena opción. No rendirse es la clave aquí.

Gracias por el A2A ..
Tener un conocimiento básico de estructuras de datos y algoritmos es excelente, pero la prueba real consiste en implementarlos y usarlos para resolver varios problemas de la vida real disponibles en varias plataformas de codificación en línea. En primer lugar, debe conocer las diversas plataformas de codificación que existen:

1) Concurso de programación, concurso de programación, programación informática en línea. Uno de los mejores sitios para practicar la codificación es Code Chef. Tiene tres desafíos mensuales.

  • Desafío largo, que es un desafío de 10 días que comprende principalmente 10 preguntas.
  • Short Challenge, que es un concurso de 2.5 horas y se centra principalmente en su velocidad más su precisión.
  • La hora del almuerzo, que se centra principalmente en los niños de la escuela (una gran iniciativa de Code Chef) y es un concurso de estilo IOI.

2) Codeforces es un sitio web ruso dedicado a la programación competitiva.
Codeforces proporciona a todos los usuarios los siguientes servicios principales:

  • participación en los concursos cortos (2 horas), llamados “Rondas de Codeforces”, que se realizan aproximadamente una vez por semana;
  • capacidad de resolver problemas de concursos anteriores con fines de capacitación;
  • “polígono” para crear y probar problemas;
  • tipo de redes sociales mediante el uso de blogs públicos internos.

3) Página en topcoder.com. TopCoder es una empresa que administra concursos en programación competitiva. TopCoder organiza concursos quincenales de programación competitiva en línea, conocidos como SRM o “partidos de una sola ronda”, así como concursos semanales en diseño y desarrollo. El trabajo en diseño y desarrollo produce software útil con licencia con fines de lucro de TopCoder. Los competidores involucrados en la creación de estos componentes reciben regalías en función de estas ventas.
Este es probablemente el más antiguo y tiene una increíble sección de problemas de concursos anteriores. La arena del codificador superior y la forma en que se debe codificar el problema son un poco diferentes de los sitios convencionales.

Luego hay otros como
Juez Esfera Online (SPOJ)
HackerEarth | Ayudamos a los desarrolladores a encontrar excelentes trabajos
HackerRank, etc., etc.
HackerEarth también alberga varios desafíos de contratación para graduados y profesionales. Entonces, el punto es que las competiciones te mantendrán ocupado todo el tiempo. ¡Depende de su motivación y dedicación cuánto puede resolver!

Ahora llegando a la parte en la que probablemente estés pensando “¿Cómo diablos debería comenzar con todo esto?”

No hay nada nuevo que pueda decirte. Prefiero citar lo que Anudeep Nekkanti tiene para decir:

Si voy a comenzar a programar ahora, lo haría de esta manera

  1. Resuelve 200 problemas más resueltos en SPOJ, problema por problema. En 2 meses
    (Esto enseñará todos los problemas estándar, algoritmos y habilidades de implementación)
  2. Resuelva problemas de CodeChef y CodeForces durante 2 meses.
    (Esto enseñará variaciones, podemos leer otras soluciones y aprender mejores formas. Omitir problemas fáciles)
  3. Resuelve problemas de TopCoder durante 2 meses.
    (Esto enseñará programación dinámica. Div 1 500p)
  4. Verifique los problemas de ACM ICPC Regional anteriores
    (Grandes problemas de calidad)

Si voy a aprender un nuevo Algoritmo ahora, lo haría de esta manera

  1. Léalo de al menos 3-4 fuentes diferentes.
  2. Comprender la prueba de corrección y el análisis del tiempo de ejecución.
    (Esto es muy muy importante, lo sabrá solo cuando lidie con problemas no estándar y difíciles)
  3. Pregúntese en cada paso de la corrección. Intenta modificar la implementación.
  4. Verifica otras implementaciones

Debe consultar enlaces externos, tutoriales, libros, trabajos de investigación, etc. sobre diversos temas, como estructuras de datos y algoritmos, debe estudiar enfoques codiciosos, dividir y conquistar, algoritmos constructivos / iterativos, gráficos, árboles y otras estructuras de datos … y algunos de los más difíciles, como cuerdas, árboles de segmentación, etc., que eventualmente aprenderá después de muchos de sus esfuerzos … aparte de esto, necesita construir sus conceptos matemáticos lo mejor posible, para utilizar sus capacidades, incluidas las series ( Fibonacci, catalán, AP, GP, HP, etc.), fórmulas, probabilidad, permutación, combinación, etc. A veces hay un requisito para otros temas (como Física), pero la mayor parte de la información relevante se proporciona en la pregunta misma …

Y para su propósito de ser un “buen programador” … nunca intentes copiar códigos … incluso si está buscando algunos artículos editoriales o de investigación … trate de estudiar la lógica y luego escriba el código usted mismo … Intente estudiar los códigos de otros codificadores … si no puede entenderlos … solo intente imprimir los resultados intermedios para comprender la lógica detrás de cada línea … Una cosa que puede afectarlo durante la programación competitiva es hacer trampa … para superar esto, puede sacar una impresión de los recursos relevantes e intentar resolver las cosas a mano … para más propósitos, use los foros de discusión para resolver sus problemas, hay tantos codificadores asombrosos y de alto rendimiento que tienen sed de resolver sus dudas 😛 …

En cuanto a los recursos, algunos de los mejores que he encontrado hasta ahora son

Estructuras de datos y algoritmos
MAXimal :: algo
¿Cuáles son los algoritmos “imprescindibles” para los concursos de programación en línea?

Así que finalmente poniendo fin a esto

if (BORING (article.txt) == TRUE)
cout << "Aburrido";
más
cout << "Interesante: p";

artículo, yo diría que tú


y

Adios !!!

Hay muchas maneras diferentes en que uno puede aprender a codificar y difiere de persona a persona. Lo que puede ser útil para una persona puede no serlo para otra persona. Sin embargo, para sobresalir en la codificación competitiva, hay algunos requisitos previos que uno debe dominar antes de saltar a este emocionante mundo.

Debes ser competente con

  • Cualquier sintaxis de lenguaje de programación (se recomienda C ++ / Java)
  • Análisis de la complejidad de los algoritmos en términos de tiempo y espacio.
  • Capacidad para pensar en una solución de fuerza bruta
  • Buena práctica de todas las estructuras de datos como listas, pilas, colas, árboles, gráficos, intentos, etc.

En cuanto a los recursos, hay muchos disponibles en Internet, pero lo importante es que tienes que descifrar tu taza de té: ” ¿Cómo quieres aprender?”

Aprender programación competitiva haciendo más y más práctica es una buena estrategia y muchos codificadores competitivos solo siguen esto. Hay muchos sitios web en línea como Code-chef, Spoj, Hacker Earth, HackerRank, TopCoder y HackerBlocks que lo ayudan a practicar más preguntas; Pero el proceso lleva tiempo. Se necesitan al menos 1–2 años para convertirse en PRO en Codificación. Califiqué las rondas regionales de ACM-ICPC en 2015 y lo digo en base a mi experiencia personal y de equipo.

Aprender asistiendo a unos buenos campos de entrenamiento de programación competitiva es otra estrategia probada y eficiente para aprender en un corto período de tiempo. Su mentor actúa como un catalizador en su aprendizaje y puede acelerar el proceso de aprendizaje. También soy un Mentor de Bootcamp de Programación Competitiva en Coding Blocks y he enseñado a más de 500 estudiantes en nuestros campamentos de entrenamiento en Codificación Competitiva en el último año. Muchos de estos estudiantes calificaron la ronda regional de ICPC, y también rompieron los exámenes de compañías como Google, Microsoft y Adobe después de estos campos de entrenamiento. Puede leer los comentarios sobre el campo de entrenamiento de programación competitiva codificando bloques aquí.

También me complace informarle que, debido al éxito rotundo y la popularidad de nuestro campo de entrenamiento de programación competitiva, esta vez vamos a estar EN LÍNEA y EN VIVO y hemos lanzado el campo de entrenamiento de programación competitiva definitivo a partir del 30 de septiembre de 2017 .

El curso está diseñado a mano para garantizar su éxito en desafíos como Google CodeJam, Google Kickstart, ACM-ICPC y más. Este programa de 8 semanas comenzará su incursión en el apasionante mundo de la codificación competitiva. Dominará las técnicas de resolución de problemas comúnmente utilizadas, perfeccionará sus habilidades de análisis matemático y superará los límites de sus habilidades de razonamiento. El curso cubrirá estructuras de datos avanzadas como árboles de segmentos , índices binarios / árboles Fenwick . Aprenderá algoritmos de construcción que incluyen programación dinámica , enmascaramiento de bits , algoritmos codiciosos y divide y vencerás . El curso también cubrirá otros temas competitivos avanzados.

Puede leer más detalles sobre el horario del curso e inscribirse en – Programación competitiva en línea usando el código de cupón – ” SUPERCODER ” para obtener un descuento anticipado de 2000.

Nota: El medio de comunicación de las clases será Hinglish, por lo que este campo de entrenamiento se recomienda solo para programadores indios. Puede ver este tutorial para obtener una “sensación” de la clase LIVE.

Espero que este bootcamp y este consejo definitivamente te ayuden. ¡Sigue aprendiendo y sigue codificando!

Mejor

Prateek Narang

Mentor, Bootcamp de programación competitiva

Miembro Fundador, Bloques de Codificación

Mucha gente te dice que resolver muchos problemas y que algún día te volverás rojo en Topcoder / Codeforces. Es cierto, y es la única forma universalmente aprobada en la comunidad de programación competitiva, pero en realidad es solo la mitad de la historia. Permíteme explicarte primero la `ciencia` de la resolución de problemas (que no es muy científica, ya que solo la desarrollé yo mismo).

Para cada problema, para resolverlo, debe saltar un espacio. Puede ser una implementación difícil o una observación difícil de ver, un algoritmo difícil, etc.

Para mí, algunos problemas son muy fáciles (por ejemplo, Codeforces div 2 A, B ..), porque esas brechas me parecen muy pequeñas, y atravesarlas se siente como una caminata informal.

Algunos problemas son muy difíciles. La brecha es demasiado grande, o hay muchas brechas, y puede quedar atrapado en el medio porque está demasiado cansado después de tal vez la primera brecha.

Usando esta ciencia, podemos explicar muchos fenómenos en el mundo de la programación competitiva:

  • Algunos chicos aprenden muy rápido, llegaron a div 1 en Topcoder / Codeforces solo después de un par de semanas desde que comenzó a programar. Algunas personas nacen con gran capacidad de salto (habilidad para resolver problemas). Pueden saltar sobre los espacios promedio fácilmente.
  • Cuanto más entrenes, mejor serás: por supuesto, si saltas todo el día, debes ser algo mejor para saltar a través de las brechas y, por lo tanto, ser capaz de resolver problemas más difíciles en menos tiempo, ya que no necesitas mucho de preparación mental o ejercicio de calentamiento antes de saltar.

Pero … también significa que, si solo resuelve problemas demasiado fáciles, solo puede caminar a través de pequeñas brechas. Puede caminar a través de los huecos más rápido, pero aún no puede saltar.

Entonces, sí, la mejor estrategia para mejorar su habilidad de programación competitiva es practicar mucho, pero debe resolver gradualmente los problemas más difíciles, no solo los fáciles. Sal de tu zona de confort y desafíate a ti mismo. Por ejemplo, si resuelve problemas en Codeforces:

  • Ordenar por número de personas que lo resolvieron.
  • Comience con la página 1
  • Resuelve algunos problemas. Si cree que puede resolverlos en unos 5-10 minutos, ignore inmediatamente los otros problemas, pase a la página 2
  • Continúe hasta que se sienta desafiado (por ejemplo, necesita una hora para resolver / no puede resolver en absoluto / …).
  • Intenta realmente, pero si fallas, mira el editorial, pide soluciones, …

Trataré de responder esta pregunta. Imagínese para los próximos 6 meses.

Etapa 1: Configuración de la base. (2 meses)

Intenta resolver los primeros 200 problemas en Sphere Online Judge (SPOJ). durante los primeros 2 meses, intente resolver todos los problemas por su cuenta. Quédese con esto durante los primeros 2 meses hasta que gane confianza.

Etapa 2: Pasar a Code Chef (2 meses)

Una vez que gane algo de confianza en los problemas SPOJ, pase a codechef y practique durante los próximos 2 meses.

Etapa 3: pasar al codificador superior (2 meses)
Ahora pase al codificador superior e intente competir en SRM.

Practique diariamente, intente resolver 2 o 3 problemas por su cuenta. Puede tomar una hora o 5 horas, pero hágalo usted mismo. Confía en mí después de 2 meses, tendrás una muy buena confianza en la resolución de problemas.

Este es un deporte, cuanto más entrenes, mejor serás. Espero que esto ayude.

Yo diría, simplemente SALTA al mar de la programación competitiva.

Desde mi experiencia personal, le sugeriría que vaya por el juez en línea para el cual editorial o soluciones de otros también están disponibles. Te ayudaría a comenzar.

Yo mismo pasé muchas horas solo para entender los primeros problemas. Pero luego encontrará lo que debe hacer después de resolver 10-15 problemas.

Si eres principiante en programación, entonces diría que elige codechef o hackerrank. Hackerrank proporciona muy buenas secciones por las cuales puede practicar varios algoritmos y estructuras de datos y le será más fácil pensar en la solución si sabe qué estructura de datos sería útil para comenzar. Luego, puede pasar a otro juez que puede ser Sphere Online Judge (SPOJ), competencia de programación, concurso de programación, programación de computadoras en línea, HackerEarth: desafíos de programación y trabajos de desarrollador, etc.

También puede optar por resolver los primeros problemas de Acerca de – Proyecto Euler. Proporciona muy buenos problemas y no se centra en el código. Después de resolver sus problemas, puede ir a hackerrank y también hay un concurso de codificación de problemas de proyectores. Le dará exposición a la codificación con los mismos problemas de manera genérica en lugar de resolver solo para valores constantes.

Feliz codificación

Gracias por A2A.

Gracias por A2A. Por lo tanto, desea comenzar la programación competitiva. Estas son algunas de las cosas que te sugiero que hagas.

  1. Ser competente en uno de los lenguajes de programación. C ++, Java, Python son las recomendaciones. Además: Java a veces conduce a programas muy complejos e ineficientes, y Python no está permitido en ICPC, por lo que mi recomendación personal es c ++. Pero Java y C también lo harán.
  2. Comienza a aprender todo tipo de estructuras de datos y algoritmos informáticos geniales. Aquí hay algunos enlaces útiles:
  1. Algoritmos y Estructuras de Datos
  2. Tutoriales Algorítmicos
  3. Pistas y problemas de práctica. Este es mi favorito personal. Dado que enseña algo y da problemas para practicar en la misma pista para que tenga más confianza.
  4. Libros:
  1. Introducción a los algoritmos
  2. El Manual de Diseño de Algoritmos (Segunda Edición)
  3. Programación competitiva, 3a edición: Steven Halim
  • Elija uno o dos jueces en línea para trabajar:
    1. Sphere Online Judge (SPOJ): uno de los mejores y más difíciles jueces de todos los tiempos (no muy antiguo). Vaya a las secciones de problemas y ordene los problemas por los usuarios que han resuelto y comience a resolver en la secuencia. Si resuelve 300 problemas, significa que es muy bueno en la programación competitiva.
    2. HackerRank: Tu dictraction más productiva. Te sugiero que participes en concursos de este sitio. Sin embargo, la sección de problemas de práctica también es rica. Pero esto te resulta fácil cuando no puedes resolver un problema.
    3. Codeforces: Nuevamente sorprendente para concursos en vivo y problemas de práctica rica. Apégate a él y te hará genial en CP.
    4. topcoder: Bueno, como su nombre lo indica, esto es para los mejores programadores. Esto es un poco difícil, y las calificaciones aquí son las más importantes. Incluso puede ser contratado en empresas muy grandes como Facebook, solo por su calificación en topcoder. Así que mejor no lo subestimes.
  • Practica como el diablo, eso es todo lo que necesita. Sé constante, da lo mejor de ti todo el tiempo y asegúrate de aprender cosas nuevas de tus competidores: esa es la forma muy efectiva de mejorar.
  • Todo lo mejor 🙂

    Recientemente comencé una programación competitiva y enfrentaba el mismo problema que tú. Fui tonto y salté directamente en septiembre Choque de HackerEarth. Aunque logré resolver dos problemas, me decepcionó mi propio desempeño. Así que traté de averiguar dónde me faltaba y descubrí que era matemática y falta de conocimiento de implementación de algoritmos y cómo ajustarlos para un problema particular. Así que hice lo siguiente (y aún lo hago) para mejorar mi conocimiento:

    • Familiarízate con los conceptos de la teoría de números como la multiplicación modular, la permutación y la combinación, la probabilidad, los números primos, etc. ¡No huyas si las matemáticas te asustan, lucha!
    • Aprenda cómo implementar estructuras de datos básicas y de qué manera puede modificarlas para hacer las cosas. Si ha terminado con lo básico, acceda a las estructuras de datos avanzadas.
    • Todos aprenden algoritmos y los implementan, pero la clave para dominar los algoritmos es aplicarlos en los problemas. Eso puede ser difícil al comenzar a determinar qué algoritmo aplicar y cómo. Google cosas, copie el código, ejecute el programa y cuando haya terminado, encuentre la mejor implementación posible de un algoritmo particular y aprenda.
    • La complejidad de su código es importante, es posible que tenga su lógica correcta, pero su código no puede pasar todos los casos de prueba debido a que el límite de tiempo excede. Así que piense en formas de acelerar el código eliminando bucles redundantes, aplicando la estructura de datos y algoritmo correctos, enfoque dinámico (si es posible), etc.
    • No intentes reinventar la rueda, utiliza funciones de biblioteca integradas, estructura de datos, algoritmos porque son más rápidos de lo que codificas. Si su lenguaje es C ++, aprenda a usar STL .
    • No se quede con el mismo idioma, en el desafío corto puede quedarse sin tiempo, así que si puede codificar algún problema en particular más rápido en otro idioma, entonces cambie a otro idioma. (Yo uso Python 3)
    • Lee editoriales y aprende de ellos.
    • Verifique el código de otros y aprenda de ellos.
    • Puede sentirse frustrado cuando nada suene las campanas. Está perfectamente bien, deje ese problema e intente más tarde. Google sobre el problema, lea los conceptos relacionados y luego intente nuevamente.
    • Todo se reduce a la práctica. ¡Practica mucho!. Nunca te rindas, mantente fuerte y motivado 🙂

    Te sugiero que comiences con Codemonk en HackerEarth. En realidad es para principiantes. Tiene buenas editoriales y luego problemas sobre estos temas. Gradualmente te llevará hacia conceptos más elevados.

    Intentemos mapear su camino para ser un codificador competitivo as:

    1. Obtenga conocimientos básicos de sintaxis y semántica de C. Puede comenzar con el lenguaje que desee, pero prefiero C, ya que le permitirá conocer todas las funciones básicas que otros lenguajes como Python abstract. C también es una iniciativa que lo transferirá a C ++. Ahora se prefiere la selección de C ++ (por mí), ya que es fácil y tiene un gran soporte para la Biblioteca. No se preocupe, cubriremos sus detalles de C ++ más adelante.
    2. Para conocimientos básicos de CI, prefiera Dennis y Ritchie: Amazon.com: El lenguaje de programación C (9780131103627): Brian W. Kernighan, Dennis M. Ritchie: Libros. Es el mejor libro que puedes encontrar para C. Será un poco difícil para los principiantes, pero no te preocupes, hay más en stock para ti. Ahora, mientras lee las preguntas de práctica de D&R sobre USA Computing Olympiad (USACO). Este sitio web tiene preguntas fáciles junto con una implementación completa. Entonces lea un tema sobre el libro y practique en USACO .
    3. Repita el paso 2 hasta que haya resuelto alrededor de 50-70 preguntas y haya cubierto temas como: matriz, entrada / salida, iteración, selección y otros bits básicos. La curva de aprendizaje en estos pasos es suave y no tendrá problemas para hacerlo.
    4. Ahora en este paso tienes un conocimiento básico de C y puedes implementar tus pensamientos en Code. Ahora podemos comenzar un camino más difícil: estructuras de datos. DS es esencial para cualquier codificador. Son como tu línea de vida. La diferencia entre AC y TLE puede ser solo una estructura de datos mal implementada.
    5. Bueno, es hora de un cambio. Cambia a C ++, el hermano mayor de C, hijo de C. La estructura básica del Código es similar, pero obtendrá un soporte increíble de las características de la Biblioteca de C ++. Ahora practique STL de C ++ y vea la colección pf Data Structures que están en STL. C ++ también proporciona soporte para Algoritmo pero lo cubriremos más adelante. Revisa estos tutoriales para obtener soporte de STL. Encienda C ++ con la Biblioteca de plantillas estándar: Parte 1 y Encienda C ++ con la Biblioteca de plantillas estándar: Parte 2. Son mejores y concisos.
    6. Ahora obtenga Bible of Coding: Cormen Introduction to Algorithms, 3rd Edition: 9780262033848: Computer Science Books @ Amazon.com. Este es el libro más esencial que necesita en su vida de codificación competitiva. Su compañero en línea será Codeforces. Prefiero Codeforces porque nos permite ver el caso de prueba donde fallamos, para que podamos obtener lo que está yendo mal. Simplemente comience con las preguntas con menor dificultad, es decir, Máximo resuelto y comience a resolverlas. No se preocupe, fallará, obtendrá PE, obtendrá CE, obtendrá RTE, obtenga TLE. Hazlos tus amigos, ya que serán tu mejor guía de aprendizaje. Aprenda de los errores, obtenga lo que está mal y luego disfrute de AC. Cuidado: no vea el código de otros. Intenta resolverlo y si no puedes después de muchos esfuerzos, entonces míralo, entiende la idea y codifica nuevamente. Nunca copie el código .
    7. Repita el paso 5 hasta que haya resuelto alrededor de 50-70 preguntas y haya cubierto temas como dividir y conquistar, codicioso, retroceso y DP. DP aka La programación dinámica es la necesidad más importante. Practícalo tanto como puedas. Este paso tiene una curva de aprendizaje poco pronunciada. Necesitas ser determinado en este paso. No pierda la esperanza, disfrute codificando y continúe.
    8. Ahora viene la parte difícil: las matemáticas. Las preguntas matemáticas a menudo causan problemas, pero son fáciles. Matemáticas para Topcoders, Conceptos de Geometría: Conceptos Básicos, Conceptos de Geometría: Intersección de Líneas y sus Aplicaciones, Conceptos de Geometría: Uso de Geometría en Problemas de Topcoder, Matemáticas para Topcoders son los tutoriales que lo ayudarán a cubrir las cosas necesarias.
    9. Genial, ahora tienes conocimientos básicos de C ++ STL y Algoritmos. Ahora comienza el juego real, comienza con DIV 2 Competiciones. Fácilmente podrá desempeñarse bien ya que tiene un gran conocimiento básico. Incluso si no encuentra sus fallas, improvise y practique. Si se desempeña bien, entonces será elegible para DIV 1. Siempre lea los editoriales y resuelva todas las preguntas que no haya hecho.
    10. Ahora repite lo mismo en las competiciones DIV1. encuentra tus fallas, improvisa y practica.
    11. Ahora practique en Codeforces o muévase a TopCoder, lo que quiera.
    12. El último pero importante paso:

    mientras (vivo)
    {
    código();
    find_your_fault ();
    mejorar();
    práctica():
    }

    Hazme un ping si necesitas ayuda.
    Gracias.


    Respuesta original: la respuesta de Pratyush Khare a ¿Cuándo debería comenzar a participar en la programación competitiva?

    Los siguientes son sugerencias de mi experiencia: –
    1. Elija un lenguaje de programación que le guste programar. Ya sea que elija C o PHP, no importa siempre que esté familiarizado con los pros y los contras del lenguaje.

    2. Centrarse en el pensamiento algorítmico. Si puede diseñar el algoritmo de solución para un problema complejo, entonces escribir código para él es simplemente pan comido.

    3. Participe regularmente en concursos en línea como Google CodeJam y otros concursos mensuales en sitios web como HackerRank, etc.

    4. No dude en usar papel y lápiz mientras diseña la solución para un problema. Es la mejor manera de visualizar el problema y su solución.

    5. Aprende de los demás: recibe la ayuda de tus amigos, mentores y lo más importante de tus competidores. En algunos casos, podrá ver el código de los competidores después del final del concurso. Si no ganas, no pierdas la esperanza. Vea las presentaciones de sus competidores (top 3) y aprenderá mucho siguiendo ese código.

    Te contaré mi historia Cómo y por qué comencé a hacer programación competitiva.

    Después de completar el primer año, mi sucursal se actualizó a Ingeniería Mecánica. Después de llegar a la sucursal de Mecánica, no tenía idea de qué hacer más. Hablé con algunos seniors de mecánica e informática de IIT BHU al respecto.

    Nunca me había enfrentado a un solo problema de codificación competitiva antes de venir a IIT. Me familiaricé con él en el segundo semestre del primer año. Era obligatorio estudiar el curso de lenguaje de programación C en el 2º semestre. Pero desafortunadamente al final del semestre no obtuve una buena calificación en este curso (obtuve una calificación B)

    Mi objetivo principal es hacer el trabajo después de 4 años de Btech. No tengo interés en más estudios superiores después de Btech. Así que uno de mis buenos seniors, Sourabh Rajendu, de la rama de informática de IIT BHU, me aconsejó ir a la codificación competitiva. Dio muchos consejos útiles para mejorar la codificación. También motivó mucho en cada etapa y todos los días. Seguí sus consejos … Comencé en lenguaje C ++. Inicialmente no pude resolver ni siquiera un nivel fácil de preguntas. Me sugirió comenzar desde HackerRank. Mientras resolvía un problema, vi algunos editoriales y tutoriales de preguntas. Después de escribir códigos de 100–120 preguntas en 2–3 meses de preguntas fáciles y de nivel medio de hackerrank, comencé a sentir que puedo mejorar en este campo. Actualmente estoy tratando de elevar mi nivel más en programación competitiva.

    Pocos consejos que me gustaría dar a los principiantes o que nunca he hecho Programación competitiva: –

    • Si tenía interés en las matemáticas en los días escolares, puede hacer maravillas en la codificación competitiva.
    • Está bien ver las soluciones y los editoriales de una pregunta si eres principiante. Pero trate de comprender la lógica detrás de esto, no lo atrape. Escriba el código por su cuenta después de comprender las soluciones profundamente.
    • Intente resolver la pregunta por su cuenta al principio y luego prefiera ver soluciones.
    • Intente pedir ayuda a las personas mayores con experiencia en codificación competitiva. Incluso si no puede entender la solución de un problema, pregunte a sus personas mayores. Había recibido ayuda de algunos adultos mayores como Amit Ranjan. Está calificado para ACM ICPC y actualmente realizará prácticas en Microsoft.
    • Si eres principiante, tendrás que pasar una buena cantidad de tiempo para practicar. Puede haber un día en el que pueda resolver una sola pregunta. Pero no te desmotives por esto. Está bien si has hecho una sola pregunta en todo el día.
    • No saltes inicialmente a los concursos. Primero resuelva unas 100 preguntas y luego vaya a concursos de Hackerrank, Codeforces, principiante | CodeChef ..
    • Puedes ir a ver algunos artículos sobre GeeksforGeeks | Un portal informático para geeks.

    Espero que esto ayude … Gracias …

    Paciencia y hambre de aprender.

    La codificación es algo que desarrolla las capacidades de pensamiento de una persona.

    Como dijo Steve Jobs: “Nos enseña a pensar”.

    Comience por hacer la mayoría de los problemas resueltos en codechef, spoj, codeforces. No vaya por temas, solo resuelva, aprenderá el arte de leer un problema, analizar, pensar y codificar una solución.

    Después de eso, ya que comenzará a sentirse cómodo con él, no se detenga, siga resolviendo problemas más difíciles que el último día y resuélvalos. Siga las escaleras que son una excelente manera de establecer objetivos y practicar sistemáticamente un tema. A2 Juez en línea

    A veces, lees una etiqueta para un problema diciendo que emplea el uso de alguna estructura de datos o algoritmo. Lea sobre esto y aborde el problema. Lenta y gradualmente, se le ocurrirán algos y descubrirá que probablemente acaba de descubrir un famoso algo del libro CLRS. Esa es la belleza de eso.

    Sigue practicando y resolviendo problemas, no te detengas.

    Además, un punto que debe tener en cuenta es que cada uno tiene su propio ritmo de aprendizaje, por lo que, aunque sería realmente tentador compararlo, no lo haga con otros. Debido a que acaba de comenzar, y tal vez la persona con la que se está comparando había estado haciendo CP durante muchos años, tiene más conocimiento y habilidad. Así que mantenga su progreso a la vista siempre, y siempre estará feliz y motivado.

    Realiza todos los concursos sobre codeforces y largos desafíos en codechef. Participa en Google Code Jam y Facebook Hacker Cup. Si eres un pensador, lo disfrutarías a fondo, si no, quizás no. En ese caso, intente el desarrollo, que se trata más de diseño y organización de código y menos de lógica y análisis.

    Espero que ayude,

    Gracias,

    Mansi

    Desarrollé un programa de capacitación diseñado para estudiar estructuras de datos y algoritmos que combina ( teoría + práctica) en proporciones apropiadas según lo respaldado por Research.

    Comienza desde el nivel cero y termina convirtiéndote en un programador de NINJA.

    Quizás debería ver todo el programa una vez y decidir por sí mismo desde dónde quiere comenzar.

    FASE 1 :: LIGERA, INTERESANTE Y FÁCIL

    PARTE A : videoconferencias de MyCodeSchool DS

    -> Para conocimiento práctico y comprensión intuitiva de temas básicos

    -> Los videos son altamente trabajados en términos de aportes tecnológicos y experiencia del usuario.

    -> El narrador Animesh Nayan ha hecho un gran trabajo explicando cosas tomando ejemplos de la vida real y señalando errores comunes que los principiantes hacen

    -> Uno de los cofundadores de esta startup fue una vez el codificador mejor calificado de la India (humildefool). Para que pueda estar seguro de la mejor calidad.


    PARTE BProblemas del dominio de HackerRank DS

    => Complemente la PARTE A resolviendo algunos ejercicios de codificación relacionados con DS aquí Estructura de datos Subdominio de HackerRank

    => Muchos de ellos también están diseñados por las mismas personas en MyCodeSchool y deben seguirse simultáneamente con las video conferencias


    FASE 1.5 :: OPCIONAL

    => Estructuras de datos y algoritmos simplificados por Narasimha Karumanchi Lo bueno de este libro es que es divertido hacerlo.

    => Te permite dejar las rigurosas matemáticas que te chupan la sangre para después.

    => Esta será una gran prueba de su comprensión de la FASE 1


    FASE 2 :: IR EN PROFUNDIDAD

    Conferencias de video NPTEL IIT-D

    -> Creo que estas conferencias son más exhaustivas y comprensibles que MIT OCW

    => Omita los primeros 3 videos de la serie (ya ha cubierto todo lo que se enseñó en ellos durante la fase 1)

    => Al completar la Fase 2, ya ha cubierto todos los temas básicos de DS con la teoría y ha obtenido una buena cantidad de experiencia práctica en codificación

    FASE 2.5 :: OPCIONAL Ravindra Babu Ravula

    -> Vea sus conferencias para el aprendizaje orientado a GATE. Son un buen suplemento


    FASE 3 :: TEORÍA RIGOROSA Y CODIFICACIÓN CONSISTENTE

    PARTE A :: InterviewBit

    => Un programa de preparación de entrevistas con estrellas ★★★★★

    => Adictivo, divertido y prometedor. También podría ser el futuro de la programación de aprendizaje.


    => InterviewBit utiliza el concepto de Gamificación para fomentar el aprendizaje.

    => La plataforma está interconectada con Facebook, por lo que puedes ver el rendimiento de tus amigos e infunde un sentido de competitividad. Incluso puedes seguir a una persona que no está conectada a través de Facebook también.

    => La mejor parte de IB es todo el concepto de racha y nivel. Necesitas alcanzar cierto número de puntos todos los días para mantener una racha, de lo contrario se reduce a la mitad. Y puede pasar al siguiente nivel solo si ha completado lo esencial de ese nivel.


    PARTE B::

    (I) GeeksforGeeks

    => El mejor sitio web para todo tipo de problemas de práctica en DS con buena explicación y código limpio + completo.

    => Suplemento con GeeksQuiz para más práctica => Puede usarse como referencia


    (II) Topcoder

    Concursos de programación informática en línea en los lenguajes Java, C ++ y C #. Las competiciones tienen lugar dos veces por semana, y los miembros pueden ganar entre $ 25 y $ 300.

    Tipos de competiciones

    • Algoritmos (duración de la competencia de aproximadamente dos horas): los competidores reciben un conjunto (generalmente tres) de problemas algorítmicos y tienen 75 minutos para resolver correctamente tantos como puedan.
    • Diseño de software (duración de la competencia una semana): los competidores reciben un conjunto de requisitos del usuario e intentan convertirlos en una especificación de diseño de software utilizable. Sus esfuerzos se juzgan según una variedad de criterios del “mundo real” sobre cuán correcto y práctico es su diseño.
    • Desarrollo (duración de la competencia una semana): los competidores reciben un conjunto de especificaciones de diseño e intentan escribir componentes de software que coincidan con esta especificación. Estos componentes se juzgan por su funcionalidad y estilo de codificación.
    • Partidos de maratón (duración de la competencia una o dos semanas): los concursantes reciben un problema algorítmico particularmente difícil. La puntuación se realiza por computadora en base a criterios específicamente adaptados al problema.
    • Estudio (diseño gráfico): se pide a los concursantes que muestren sus habilidades creativas en un entorno competitivo.
    • Ensamblaje de arquitectura TopCoder ha creado Concursos de ensamblaje como una extensión de los Concursos de desarrollo y diseño de componentes. A través de estas competencias, los competidores crean aplicaciones de alta calidad utilizando componentes completos y el método competitivo establecido de TopCoder.
    • Pruebas
    • Los equipos, clientes y miembros de Bug Races Project pueden registrar errores que encuentran en el software desarrollado y respaldado por TopCoder. TopCoder comunicará estos errores a la comunidad miembro. Los errores que están abiertos a la comunidad se publicarán en la página Active Bug Races.

    (III) Fuerzas del código

    Codeforces proporciona los siguientes servicios principales a todos los usuarios:

    • participación en los concursos cortos (2 horas), llamados “Rondas de Codeforces”, que se realizan aproximadamente una vez por semana;
    • participación en concursos educativos (1.5-2.5 horas), que se llevan a cabo 2-4 veces por mes
    • desafiar / piratear otras soluciones de concursantes;
    • capacidad de resolver problemas de concursos anteriores con fines de capacitación;
    • “polígono” para crear y probar problemas;
    • tipo de redes sociales mediante el uso de blogs públicos internos.

    (III) OTROS

    1. Codechef: concurso de programación, concurso de programación, programación informática en línea

    2. SPOJ – Juez Esfera en línea (SPOJ)

    3. UVa – Juez en línea de UVa – Inicio

    4. ProjectEuler – Proyecto Euler

    5. Desafíos de programación – Desafíos de programación

    6. ahmed-aly – Concursos virtuales en línea

    7. TJU – Juez en línea TJU ACM-ICPC

    8. PJU – UNIÓN PANAMERICANA DE JUDO

    9. USACO – Portal del programa de capacitación de USACO

    10. TIMUS – Juez en línea de Timus

    11. AIZU – Desafío de programación

    12. URI – Juez en línea de URI – Iniciar sesión

    13. ZOJ – ZOJ :: Inicio

    14. NTHU – Juez en línea de NTHU

    15. Leetcode – LeetCode

    16. AI Challenge – Inicio | AI Challenge

    17. Saratov – Saratov State University :: Contester en línea

    18. Google code jam – Google Code Jam

    19. InterviewStreet – Concursos de programación – Copias de imprenta – Interviewstreet

    20. Kaggle – haciendo de la ciencia de datos un deporte

    21. Herbert – Bienvenido a Herbert Online Judge

    22. CoderCharts – CoderCharts – Programación Social Meets

    23. PKU – Bienvenido a PKU JudgeOnline

    24. CodingBat – CodingBat

    25. Programador – Programador | Learn.Code.Share

    26. HackerRank – Desafíos de inteligencia artificial :: Problemas de programación de IA y competencias :: HackerRank

    27. Al Zimmermann – Concursos de programación de Al Zimmermann

    28. Light OJ- Página en lightoj.com

    Si las cosas parecen difíciles, entonces comience desde aquí primero

    => Juez de PEG – 2048


    PARTE C :: Creo que esta preparación es suficiente para domesticar a la Bestia más enervante del Diablo en una cantidad razonable, es decir.

    Capítulo 1: Puede elegir ignorar el capítulo 1 o pasarlo por alto.

    Capítulo 2: Solo lectura 2.1 y 2.2.

    Capítulo 3: Si eres principiante, es posible que no te encante este capítulo. Entonces, solo lea 3.1. Hojear a través de 3.2

    Capítulo 4: Para el primer temporizador, está bien leer 4.1, 4.3, 4.4 y 4.5 y dejar el resto.

    Capítulo 5: Puede omitir esto como primer temporizador.

    Capítulo 6: Todo es muy importante, lea todas las secciones.

    Capítulo 7: Puede omitir la sección 7.3, pero asegúrese de leer las otras secciones detenidamente

    Capítulo 8 y 9: Puede dejar estos capítulos al principio.

    Capítulo 10: Todas las secciones de este capítulo son obligatorias y deben leerse.

    Capítulo 11: Puede omitir la sección Hashing perfecto (11.5)

    Capítulo 12 y 13: No omita nada en estos capítulos.

    Capítulo 14: Omita esto si es el primer contador de tiempo.

    Capítulo 15: Le encantará este capítulo. La sección LCS puede parecer complicada, pero si es posible, intente leer esto dos veces.

    Capítulo 16: Solo lectura 16.2, 16.2 y 16.3

    Capítulo 17: Omita esto por primera vez.

    Capítulo 18, 19, 20 y 21: omita todos estos capítulos. Capítulo 22: Puede optar por omitir la sección 22.5 (Componentes fuertemente conectados)

    Capítulo 23: Todo en este capítulo es importante y debe leerse la primera vez.

    Capítulo 24 y 25: estos deben leerse

    Capítulo 26: Puede omitir esto, no es muy importante para empezar.

    Capítulo 27 sobre salas: no para empezar, una vez que tenga una buena mano en los capítulos hasta aquí, siempre puede elegir qué leer de los capítulos restantes en función de su interés.

    ==> Pero si vas por un desafío COVER TO COVER (es decir, implementando cada algoritmo, entendiendo cada prueba, etc.), que estos cuatro caballeros tengan piedad de tu alma.


    PARTE D :: Libros de preparación de entrevistas:

    Cracking the Coding Interview :: LA BIBLIA DE PREPARACIÓN DE LA ENTREVISTA

    => Este libro le brinda la preparación para la entrevista que necesita para obtener los mejores trabajos de desarrollador de software.

    => Se enfoca en las habilidades de ingeniería de software utilizando 150 preguntas y respuestas de entrevistas de programación, así como otros consejos valiosos.

    => El autor es un ex ingeniero de software y ha trabajado en Google, Microsoft y Apple. También ha estado en el otro lado de la mesa, contratando candidatos para estas empresas líderes y, por lo tanto, tiene información valiosa sobre lo que sucede y cómo prepararse para ello.

    => Un sitio web relacionado es CareerCup, que es un foro de discusión donde puede encontrar una variedad de preguntas de varias compañías. Tiene una buena colección de preguntas ya que es antigua (fundada en el año 2005)


    OPCIONAL :: HACIENDO UN MEJOR USO DE INTERNET

    Puede seguir a algunos programadores conocidos, autores e ingenieros de software profesionales para obtener consejos, sugerencias, trucos habituales o aprender de su código.

    1) Programadores competitivos: 🙁 Sin ningún orden en particular)

    • Turista (programador competitivo) Gennady Korotkevich
    • Michal Forišek (misof en Topcoder)
    • Bohdan Pryshchenko (I_love_Tanya_Romanova – Codeforces)
    • Michal Danilák (Mimino en Topcoder)
    • Przemysław Dębiak (psyho en Topcoder)
    • Neal Wu (neal_wu en Topcoder)
    • Johnny Ho (codeforces.comrandom.johnnyh – Codeforces)
    • Usuario de Quora
    • Mark Gordon (msg555 en Topcoder)
    • Egor Suvorov (yeputons en Topcoder)
    • Brian Bi
    • Anudeep Nekkanti
    • Petr Mitrichev (programador competitivo)
    • ACRush (Tiancheng Lou) CodeChef Usuario | CodeChef
    • Djdolls (Ajay K. Verma) Usuario de CodeChef | CodeChef
    • Lalit Kundu
    • Anshuman Singh
    • Triveni Mahatha

    2) Desarrolladores de software profesionales ::

    Jon Skeet

    • Es el maestro de las bibliotecas del tiempo.
    • Tiene el puntaje más alto de todos los tiempos en StackOverflow.
    • Es el mismo para la programación que Chuck Norris para combatir el crimen. Más sobre esto aquí: Datos de Jon Skeet
    • Autoridad en C #.
    • > 32000 respuestas de StackOverflow
    • Tiene un respaldo inmenso de la comunidad.

    Mariya Mykhailova Desarrollador de software, principalmente interesado en algoritmos y lenguajes de programación.

    Especialidades: SQL, Oracle SQL, C ++, algoritmos, escritura de problemas https://www.linkedin.com/in/mari…

    Jonathan Kang

    Jonathan es diseñador de CPU en Nvidia (dice su perfil, al menos). Brillante con cualquier cosa a nivel de arquitectura, realmente aprendo mucho de sus respuestas.

    Anders Kaseorg

    Anders, creo, es a lo que se podría referir coloquialmente como un genio. Dos cosas de las que está muy bien informado son Python y las matemáticas. Eso no es demasiado sorprendente dados sus logros: tiene una SB en matemáticas del MIT y cofundó una startup (K-Splice) que fue comprada por Oracle. Desearía que publicara más sobre cosas de nivel de sistemas (es decir, Linux principalmente). De hecho, desearía que publicara más período. Actualización : verlo publicar más en C y C ++, que son mis propios lenguajes de elección. También olvidé mencionar la última vez que responde muchas preguntas sobre algoritmos y todas son geniales. Muy simple, explicaciones claras.

    Robert Love

    El hacker de Linux que funciona para Google, primero en el kernel de Android y ahora en la infraestructura de búsqueda web, también escribió un libro muy bueno sobre el kernel de Linux. Mi única queja sobre Robert es que no publica más en Quora. Actualización : En estos días veo a Robert publicando mucho más, y estoy aprendiendo más que nunca. Entre Robert y Anders, realmente estoy aprendiendo mucho sobre programación en C y el kernel de Linux, y es fantástico.

    Usuario de Quora

    Hacer un doctorado en automatización de diseño electrónico, algo de lo que no sé demasiado ni sé que mucha gente lo hace, pero es un tema reconociblemente importante. Sabe mucho sobre arquitectura, buenos consejos sobre el campo y sobre la escuela de posgrado en general. Su actividad es excelente, encuentra cosas que no puedo, así que es un buen negocio.

    Cameron Purdy

    Hace poco seguí a Cameron, pero mirando a través de su actividad pasada, parece muy informativo con respecto a Java, sistemas distribuidos y bases de datos. Funciona para Oracle, por lo que sus áreas temáticas parecen adecuadas. EDITAR: Solo para agregar, fue un fundador de inicio (Tangosol) y vendió a Oracle. Gracias Miguel por la distinción en los comentarios.

    Joshua Engel

    Por mucho que recuerdo haber leído sobre él, es un programador de día, y casi todo lo demás de noche, y puedes ver eso por su actividad en Quora. En realidad, había publicado un comentario sobre cómo no publica lo suficiente en software, pero me señalaron que sí y no lo había estado viendo en el mismo volumen relativo que otras personas que sigo desde que Josh está activo en tantos temas diferentes. Sin embargo, si buscas sus respuestas en software, son realmente muy perspicaces y claras. También me gusta agregar que Joshua es una persona divertida para seguir en general, no solo para CS / software.

    Anthony Yeh

    Estudiante de doctorado en Berkeley en el EECS (su lema dice optoelectrónica, así que supongo que EE). Conocido en áreas generales de computadoras, y algunas áreas más específicas también. También publicaciones sobre temas de posgrado. Otra persona que deseo publicó más. También, creo, un Quora Top Writer 2012 (¡felicidades!).

    Greg Pfister

    Arquitecto informático retirado, solía trabajar en IBM. Escribió un libro llamado In Search Of Clusters , y está muy bien informado sobre toda la arquitectura de computadoras. Desearía que publicara más también, dada su experiencia en el campo.

    Dan Zhang

    Estudiante de doctorado en ingeniería informática en UT Austin (una de las mejores escuelas de informática, si se lo preguntaba). Una buena persona para seguir en general, y escribe publicaciones en la escuela de posgrado, así como cosas relacionadas con su propio campo. Un poco breve a veces (mi propia preferencia son las respuestas más largas), pero admito que a veces es necesario. Ciertamente, una persona que debe considerar seguir, independientemente de su preferencia, ya que da algunas respuestas realmente buenas.

    Usuario de Quora

    Un estudiante de primer año de CS / Mechatronics en la Universidad de Melbourne con intereses en finanzas, estadísticas y CGI. No responde muchas preguntas, pero la razón principal por la que lo sigo es por su tablero llamado Hardcore Engineering, donde publica algunas cosas fantásticas sobre software, idiomas y CS en general. Solo algunas cosas de muy, muy alta calidad, asegúrate de echarle un vistazo.

    Jessica Su

    Ashish Kedia


    3) Si también está interesado en contribuir o aprender de proyectos de código abierto de buena calidad ::

    ENLACES GITHUB ::

    1) Primero, desarrolle habilidades básicas de programación en cualquier lenguaje de programación. Para la programación competitiva, recomendaría comenzar con C y transformar lentamente a C ++.

    2) Comience a practicar códigos simples de sitios como Sphere Online Judge (SPOJ) (los problemas fáciles se pueden filtrar desde Clasificador de problemas para SPOJ.pl) y Codechef (Competencia de programación) y muchos otros sitios.

    3) Una al lado de la otra, comience a leer Tutoriales de algoritmos de TopCoder. No te sientas frustrado si no puedes entender a ninguno de ellos. Tal vez, es un nivel un poco más alto de lo que eres actualmente. Cambia a otro tutorial.

    3) Haga los problemas en orden decreciente de número de envíos de CA del problema. Lentamente, verá que pasará de Cakewalk a problemas ad-hoc a problemas estándar y luego a versiones modificadas de problemas algorítmicos estándar.

    4) NO TE RINDAS SI TIENES RESPUESTAS INCORRECTAS. Este es el punto donde un alto porcentaje de personas pierde interés en la programación. Sigue intentando por un día, incluso una semana si una voz dentro de tu cabeza dice que tu método es el correcto. Incluso si entonces, no puede encontrar otra forma, busque en Google la solución al problema. Lea los diversos enfoques que los codificadores tomaron para resolver el problema. Encuentra dónde te equivocaste. HAGA SU PROPIO CÓDIGO Y OBTENGA AC. Eso sí, lea la solución solo si está completamente seguro de que no puede hacer nada que actualmente sepa que pueda obtener su solución AC.

    5) Después de practicar unos 40-50 problemas, ganarás algo de confianza. Luego puede comenzar a participar en Competiciones de codificación en línea en Codechef, topcoder, Codeforces, etc.

    Creo que esto debe enfatizarse nuevamente por su importancia. NUNCA TE RINDAS en Programación. Es difícil comenzar de nuevo.

    Los libros más influyentes que todo ingeniero de software necesita leer

    Bueno, he aprendido mucho de mis mentores y me di cuenta de que todavía tenía mucho que aprender con los diferentes libros que me sugirieron. Decidí desarrollar una rutina para leer un libro al mes en mi campo profesional (ingeniería de software). A lo largo de los años, he agregado una lista que, creo, DEBE SER LEÍDA para cualquier persona que quiera ser un desarrollador de primer nivel.

    1- Pensamiento y aprendizaje pragmáticos: refactorice su wetware (programadores pragmáticos)

    en amazon: Pragmatic Thinking and Learning: Refactor Your Wetware (Pragmatic Programmers): Andy Hunt: 0852766001452: Amazon.com: Libros

    El desarrollo de software ocurre en tu cabeza. No en un editor, IDE o designtool. Estás bien educado sobre cómo trabajar con software y hardware, pero ¿qué pasa con el software, nuestro propio cerebro? Aprender nuevas habilidades y nuevas tecnologías es fundamental para su carrera, y todo está en su cabeza.

    En este libro de Andy Hunt, aprenderá cómo están conectados nuestros cerebros y cómo aprovechar la arquitectura de su cerebro. Aprenderá nuevos trucos y consejos para aprender más, más rápido y retener más de lo que aprende.

    Necesita un enfoque pragmático para pensar y aprender. Necesita refactorizar su Wetware.

    2-El programador pragmático: de oficial a maestro

    en amazon: The Pragmatic Programmer: From Journeyman to Master: 0785342616224: Computer Science Books @ Amazon.com

    – Ward Cunningham Directamente desde las trincheras de programación, The Pragmatic Programmer corta la creciente especialización y tecnicismos del desarrollo de software moderno para examinar el proceso central, tomando un requisito y produciendo código funcional y sostenible que deleite a sus usuarios. Cubre temas que van desde la responsabilidad personal y el desarrollo profesional hasta las técnicas arquitectónicas para mantener su código flexible y fácil de adaptar y reutilizar. Lea este libro y aprenderá cómo * Luchar contra la podredumbre del software; * Evite la trampa de duplicar el conocimiento; * Escribir código flexible, dinámico y adaptable; * Evite programar por coincidencia; * A prueba de balas su código con contratos, afirmaciones y excepciones; * Captura requisitos reales; * Prueba despiadadamente y con eficacia; * Deleita a tus usuarios; * Construir equipos de programadores pragmáticos; y * Haga que sus desarrollos sean más precisos con la automatización. Escrito como una serie de secciones independientes y lleno de anécdotas entretenidas, ejemplos reflexivos y analogías interesantes, The Pragmatic Programmer ilustra las mejores prácticas y las principales dificultades de muchos aspectos diferentes del desarrollo de software.

    3-Elementos de programación

    en amazon: Amazon.com: Elementos de programación (0785342635379): Alexander A. Stepanov, Paul McJones: Libros

    “Pregúntele a un ingeniero mecánico, estructural o eléctrico qué tan lejos llegarían sin una gran dependencia de una base matemática firme, y le dirán, ‘no muy lejos’. Sin embargo, los llamados ingenieros de software a menudo practican su arte con poca o ninguna idea de los fundamentos matemáticos de lo que están haciendo. Y luego nos preguntamos por qué el software es conocido por ser entregado tarde y lleno de errores, mientras que otros ingenieros entregan rutinariamente puentes terminados, automóviles, electrodomésticos, etc., a tiempo y con solo defectos menores. Este libro se propone corregir este desequilibrio. Los miembros de mi equipo de desarrollo avanzado en Adobe que tomaron el curso basado en el mismo material se beneficiaron enormemente del tiempo invertido. Puede aparecer como un texto altamente técnico destinado solo a informáticos, pero debería requerirse lectura para todos los ingenieros de software en ejercicio “.
    —Martin Newell, miembro de Adobe

    “El libro contiene algunos de los códigos más bellos que he visto”.
    —Bjarne Stroustrup, diseñador de C ++

    “Estoy feliz de ver el contenido del curso de Alex, cuyo desarrollo y enseñanza apoyé firmemente como el CTO de Silicon Graphics, ahora disponible para todos los programadores en este pequeño libro elegante”.
    —Forest Baskett, socio general, New Enterprise Associates

    4- Head First Análisis y diseño orientado a objetos

    at amazon: Head First Object-Oriented Analysis and Design: Brett D. McLaughlin, Gary Pollice, Dave West: 0636920008675: Amazon.com: Libros

    El análisis y diseño orientado a objetos de Head First es una mirada refrescante al tema de OOAD. Lo que distingue a este libro es su enfoque en el aprendizaje. Los autores han hecho que el contenido de OOAD sea accesible y utilizable para el profesional”.
    –Ivar Jacobson, Ivar Jacobson Consulting

    “¡Acabo de terminar de leer HF OOA & D y me encantó! ¡Lo que más me gustó de este libro fue su enfoque en por qué hacemos OOA & D-para escribir un excelente software!”
    –Kyle Brown, ingeniero distinguido, IBM

    “Oculto detrás de las imágenes divertidas y las fuentes locas hay una presentación seria, inteligente y extremadamente bien elaborada de OO Analysis and Design. Al leer el libro, sentí que estaba mirando por encima del hombro de un diseñador experto que me estaba explicando qué problemas fueron importantes en cada paso y por qué “.
    –Edward Sciore, profesor asociado, departamento de informática, Boston College

    ¿Cansado de leer libros de Análisis y Diseño Orientado a Objetos que solo tienen sentido después de ser un experto? Has escuchado que OOA & D puede ayudarte a escribir un excelente software cada vez que software que hace feliz a tu jefe, a tus clientes satisfechos y te da más tiempo para hacer lo que te hace feliz. ¿Pero cómo?
    Head First Object-Oriented Analysis & Design le muestra cómo analizar, diseñar y escribir software serio orientado a objetos: software que es fácil de reutilizar, mantener y ampliar; software que no te hace daño en la cabeza; software que le permite agregar nuevas funciones sin romper las antiguas. En su interior aprenderá a:

    • Use principios OO como encapsulación y delegación para crear aplicaciones que sean flexibles
    • Aplique el Principio Abierto-Cerrado (OCP) y el Principio de Responsabilidad Única (SRP) para promover la reutilización de su código
    • Aproveche el poder de los patrones de diseño para resolver sus problemas de manera más eficiente
    • Use UML, casos de uso y diagramas para asegurarse de que todas las partes interesadas se comuniquen claramente para ayudarlo a entregar el software adecuado que satisfaga las necesidades de todos.

    5- Perlas de programación (2a edición)

    en amazon: Programming Pearls (2nd Edition): Jon Bentley: 0785342657883: Amazon.com: Libros

    La primera edición de Programming Pearls fue uno de los libros más influyentes que leí al principio de mi carrera, y muchas de las ideas que encontré por primera vez en ese libro permanecieron conmigo mucho después de que lo leí. Jon ha hecho un trabajo maravilloso al actualizar el material. Estoy muy impresionado por lo frescos que parecen los nuevos ejemplos. – Steve McConnell Cuando los programadores enumeran sus libros favoritos, la colección de perlas de programación de Jon Bentley se incluye comúnmente entre los clásicos. Así como las perlas naturales crecen a partir de granos de arena que irritan a las ostras, las perlas de programación han surgido de problemas reales que han irritado a los programadores reales. Con orígenes más allá de la ingeniería sólida, en el ámbito de la visión y la creatividad, las perlas de Bentley ofrecen soluciones únicas e inteligentes para esos molestos problemas. Ilustrado por programas diseñados tanto por diversión como por instrucción, el libro está lleno de descripciones lúcidas e ingeniosas de técnicas prácticas de programación y principios fundamentales de diseño. No es sorprendente que Programming Pearls haya sido tan valorado por los programadores en todos los niveles de experiencia.

    6- El arte de la programación informática

    en amazon: The Art of Computer Programming, Volumes 1-4A Boxed Set: 8580001170602: Computer Science Books @ Amazon.com

    Innumerables lectores han hablado sobre la profunda influencia personal del trabajo de Knuth. Los científicos se han maravillado con la belleza y elegancia de su análisis, mientras que los programadores comunes han aplicado con éxito sus soluciones de “libro de cocina” a sus problemas cotidianos. Todos han admirado a Knuth por la amplitud, claridad, precisión y buen humor que se encuentran en sus libros.

    ¡No puedo comenzar a decirle cuántas horas agradables de estudio y recreación me han brindado! Los he examinado en autos, restaurantes, en el trabajo, en casa … e incluso en un juego de las Pequeñas Ligas cuando mi hijo no estaba en la alineación.

    Charles Long

    Escrito principalmente como referencia, algunas personas, sin embargo, han encontrado posible e interesante leer cada volumen de principio a fin. Un programador en China incluso comparó la experiencia con leer un poema.

    Si crees que eres un muy buen programador … lee [El arte de la programación de computadoras de Knuth] … Definitivamente deberías enviarme un currículum si puedes leer todo.

    Bill Gates

    7- La colección de códigos limpios de Robert C. Martin

    en amazon: The Robert C. Martin Clean Code Collection (Collection) (Robert C. Martin Series) 1, Robert C. Martin, eBook – Amazon.com

    La colección de códigos limpios de Robert C. Martin consta de dos libros electrónicos más vendidos:

    • Código limpio: un manual de artesanía de software ágil
    • The Clean Coder: un código de conducta para programadores profesionales

    En Clean Code , el legendario experto en software Robert C. Martin se ha asociado con sus colegas de Object Mentor para destilar su mejor práctica ágil de limpieza de código “sobre la marcha” en un libro que inculcará en usted los valores de un artesano de software y creará eres un mejor programador, pero solo si trabajas en ello. Tendrás el desafío de pensar en lo que está bien sobre ese código y qué tiene de malo. Más importante aún, tendrá el desafío de reevaluar sus valores profesionales y su compromiso con su oficio.

    Voy a mantener esto corto y simple.
    Esta es la estrategia que estoy usando para aumentar mis habilidades y ha funcionado hasta ahora.
    En primer lugar, trate de conocer su nivel de codificación actual porque tendrá que resolver preguntas que le parezcan un poco difíciles, para aumentar su habilidad tendrá que salir de su zona de confort.
    El sitio web de codificación más famoso es TopCoder, así que te lo digo de acuerdo con su formato de preguntas.
    Primero intente resolver preguntas de 250 puntos (div. 2), si puede superar los 240 puntos, continúe con las preguntas siguientes si no, y continúe practicando preguntas de 250 puntos (div. 2) de SRM anteriores hasta obtener más de 240 puntos. cuando sea capaz de alcanzar> 240 pts, pase a 500 pt ques (div 2) y luego haga lo mismo, continúe practicando hasta obtener> 470 pts.
    La dureza de las preguntas en TopCoder es:
    250 pt (div2) <500 pt (div2) <250 pt (div1) <1000 pt (div2) <500 pt (div1) <1000 pt (div1)

    250 pt (div2) y 500 pt (div2) son preguntas que generalmente no tienen implementación de algoritmo.
    Las preguntas de 250 pt (div 1) y posteriores necesitan diferentes tipos de algoritmos y estructuras de datos para implementarse,
    cuando no puede resolver una pregunta o no puede resolver lo que debe hacerse, lea el editorial, sepa qué algoritmo se necesitaba para resolver las preguntas, aprenda ese algoritmo resolviendo diferentes preguntas que usan ese algoritmo (según yo http://www.spoj.com es el mejor sitio web para resolver problemas algorítmicos específicos y problemas específicos de estructura de datos)

    TopCoder tiene un tipo diferente de preguntas que CodeForces, resuelva las rondas anteriores de CodeForces siguiendo este método.

    No hace falta decirlo, pero obviamente necesitarás practicar MUCHOS problemas para aumentar tu habilidad.

    Cuando hablamos de principiantes, sugeriría que la mejor idea es practicar mucho en problemas relativamente fáciles (por supuesto, muchos de ellos aún serán muy desafiantes para ti al principio) en el modo de entrenamiento, algo así como las viejas rondas div2 CF y TC SRM encaja bien aquí; si está al principio, tal vez necesite tareas aún más fáciles: hay muchos concursos fáciles en sitios como Hackerearth y Codechef, pero la mayoría de ellos no tienen buenos editoriales.

    Y buenos editoriales son parte clave aquí. Incluso si conoce una solución para una tarea, busque soluciones de otros concursantes y también editorial. Si eres principiante, a menudo sucede que tu solución es fea o demasiado complicada. También puede suceder que realmente no entiendas por qué funciona tu solución.

    La mayoría de los problemas fáciles son estándar y bien conocidos; si le preguntas al mejor concursante cómo resolver una tarea en particular, probablemente te dará una idea en pocos segundos, y eso no solo se debe a que esa persona es lo suficientemente hábil, sino también porque en la mayoría de los casos ya vio la misma tarea o una similar. . Al principio debes tratar de captar tantos trucos / ideas / soluciones como sea posible; incluso cuando resolvió alguna tarea en solo 10-15 minutos: lea sobre otras soluciones posibles, busque la solución más rápida, busque la solución más corta, busque algunas soluciones fallidas para tener una idea sobre posibles errores / errores; tal vez no sea la forma de entrenar tu creatividad, pero la mayoría de las tareas estándar no necesitan creatividad de todos modos. Y también construirá una buena base sobre la cual se basará su mejora futura. Necesita conocer rutinas básicas, porque muchas tareas más difíciles pueden descomponerse en la combinación de unos pocos problemas más fáciles. Si algún día más tarde te enfrentarás a una situación como la que tuve, este problema tiene una fácil transformación para cubrir un gráfico bipartito con ciclos … Espera … No sé cómo encontrar esta cobertura … -Sabes, será una historia triste. Si eres inteligente y creativo, tienes una buena habilidad general: tal vez te lleve un poco de tiempo descubrir la idea por ti mismo, pero de todos modos, un tipo con oh, vi este problema en el entrenamiento hace dos meses, lo hará aún más rápido.

    Puede resolver problemas en conjunto de problemas uno por uno, pero los concursos / entrenamientos virtuales me parecen una mejor idea. La experiencia competitiva siempre es útil, y también es más fácil concentrarse por completo en el trabajo durante un concurso: ve un temporizador que dice que debe intentar hasta que finalice el concurso (o hasta que haya resuelto todo, y a veces es una motivación aún mejor) , y mientras resuelven el archivo en OJ, la mayoría de las personas pueden distraerse fácilmente al leer noticias o mirar videos lindos de YouTube, pensando que descansaré un poco y terminaré este problema un poco más tarde, sin necesidad de apurarse . Esto conduce a una baja productividad: a veces crees que entrenaste toda la noche, pero en realidad escribiste solo unas pocas líneas de código y pasaste pocas horas chateando, leyendo noticias, viendo videos y haciendo algunas cosas urgentes.

    Entiendo tu situación. He estado donde estás y solía sentir exactamente lo mismo. Cosas que aprendí de mi experiencia:

    1. Paciencia

    Las preguntas en los sitios siempre son difíciles y tendemos a modelar nuestra solución en función de los casos de prueba dados, lo que a menudo nos hace perder casos de esquina o difíciles que son difíciles de detectar. Pensar pacientemente, leer la pregunta para asegurarse de que no me pierda algo importante puede ayudar.

    2. Practica
    Cuanto más codifique, más conocerá para abordar diferentes tipos de problemas.

    3. Soluciones de lectura
    Después de pasar horas y horas y finalmente aún no poder descifrarlo, prefiero mirar las soluciones enviadas y luego codificar la solución entendida (aprendí esto de Quora)

    Aquí hay una lista de preguntas que encontré muy útiles:

    ¿Cómo debo practicar para estar en un nivel en el que pueda abordar los problemas Div1-500 de TopCoder con confianza? Soy un novato con cero experiencia en programación competitiva.

    ¿Cuáles son los 10 algoritmos que uno debe conocer para resolver la mayoría de los problemas de algoritmos?

    ¿Cuáles fueron los consejos dados por Ajay Somani a Nikhil Garg con respecto a la preparación para el CIPC?

    La respuesta de Nikhil Garg a ¿Cómo debo practicar para estar en un nivel en el que pueda abordar los problemas Div1-500 de TopCoder con confianza? Soy un novato con cero experiencia en programación competitiva.

    ¿Qué se necesita para convertirse en un buen algoritmo como los mejores clasificados en Topcoder / Spoj / GCJ?

    y si encuentra que habrá muchas más preguntas con respuestas similares que pueden ayudarlo como lo hicieron conmigo 🙂
    Buena suerte

    Absolutamente. La programación competitiva es como ir al gimnasio para su cerebro: ayuda a ejercitar la función cognitiva (y es simplemente divertido =)). Puede comenzar con la programación competitiva en línea. Comience aprendiendo la sintaxis de un lenguaje de programación (preferiblemente C ++ o Java para programación competitiva). Luego, aprenda sobre las estructuras de datos. Pero con toda honestidad, la mejor manera es comenzar de manera fácil y avanzar. Roma no fue conquistada en un día. Los pequeños éxitos te darán la motivación adecuada para seguir adelante. De lo contrario, puede parecer imposible.

    Recomiendo comenzar con sitios fáciles como:

    • Codewars.com
    • Coderbyte
    • CodingBat

    Una vez que sea bueno con ellos, puede comenzar a aprender sobre algoritmos como búsqueda, clasificación, búsqueda de rutas, etc. La manipulación de cadenas también es útil. (Los tutoriales de ciencia de datos a continuación son excelentes para cosas más avanzadas).

    De todos modos, una vez que te sientas seguro con las cosas para principiantes, puedes probar suerte en las Grandes Ligas:

    • codificador superior
    • CodeChef
    • codeforces.com

    Y si necesitas algunos tutoriales:

    • Tutoriales de ciencia de datos
    • Tutoriales | CodeChef

    En general, la programación competitiva es una forma fantástica de mantener sus habilidades de resolución de problemas agudas. Si tiene alguna otra pregunta, no dude en preguntarme.

    ¡La mejor de las suertes! =)

    Gracias por el A2A.

    No sé cuál es la mejor estrategia. Esto es lo que funcionó para mí:

    1. Seguí un “programa”. Para algunas personas, completar las páginas de capacitación de USACO les ayudó mucho. Para mí, trabajar en Competitive Programming Ed.1 de Steven y Felix Halim me ayudó enormemente. Tener un programa a seguir es ideal porque lo expone a un concepto y aprende de inmediato resolviendo problemas en un juez en línea. La retroalimentación (¿resolví o hice mal este problema?) Es instantánea en un juez en línea. Además, un programa me presentó conceptos que podía hacer para tener los conocimientos básicos para seguir adelante y resolver problemas más avanzados.
    2. Practicando regularmente. A veces pasaba meses sin practicar, y me tomó unos días, si no algunas semanas, volver a la normalidad. En realidad, notaría una diferencia incluso si dejara de practicar por unos días. La práctica constante hace una gran diferencia porque si dejas de practicar, estás desperdiciando tu arduo trabajo.
    3. Desafiandome a mi mismo. Solía ​​mantener los problemas de implementación de perforación y sentirme cómodo viendo “Aceptado”. Pero me di cuenta de que no estaba progresando mucho. Elegí temas que sabía que no podía hacer, hice una investigación básica para averiguar de qué se trataban esos temas e intenté resolver esos problemas. Lo que me lleva a …
    4. No busco la solución. No busques la solución . Tienes que luchar para mejorar. Si realmente está luchando, es probable que simplemente no tenga los conocimientos básicos para resolver el problema o que esté demasiado ansioso por sumergirse en un tema avanzado. Da un paso a la vez. Si estás atrapado, piénsalo por un momento. Vuelve en unas pocas horas, o al día siguiente. Pasar a un problema diferente. A veces, la solución se me ocurre una semana después, justo antes de que me vaya a la cama.

    Espero que esto ayude a alguien. ¡Buena suerte!