Cómo mejorar si he pasado 10 años aprendiendo programación pero aún no puedo resolver la mayoría de los problemas de algoritmos

Tal vez necesite algún tipo de instrucciones de tal manera que pueda mejorar cada vez más su conocimiento.

Te voy a indicar dos libros:

  1. Descifrando la entrevista de codificación: 189 Preguntas y soluciones de programación Descifrando la entrevista de codificación: 189 Preguntas y soluciones de programación: Gayle Laakmann McDowell: 9780984782857: Amazon.com: Libros
  2. Algoritmos (4a edición) Algoritmos (4a edición): Robert Sedgewick, Kevin Wayne: 8601400041420: Amazon.com: Libros

El primer libro está dedicado a enseñarle cómo resolver problemas en entrevistas. No es un libro formal sobre algoritmos. Pero esa es la razón por la que aparece por primera vez aquí. Está muy bien organizado y tiene lo necesario para estudiar los conceptos básicos.

Pruebe estos libros y siga este camino a través de los ejercicios.

El segundo libro es excelente, pero necesitará mucha más confianza de su parte.

Comience a leerlo e intente tomar su curso de Coursera al mismo tiempo. El Dr. Sedgwick enseñará y aclarará muchas cosas de una manera muy interesante y más fácil que solo leer el libro.

Enlace al curso:

Algoritmos, Parte I – Universidad de Princeton | Coursera

Ahora, lo más importante: no pierdas el tiempo leyendo soluciones. ¡Intenta resolverlo! ¡Pruébalo duro!

Buen aspecto y disfrute del viaje … ¡será de gran ayuda!

Hace un año estaba en una posición similar. Aquí está mi consejo.

  1. Prepárate para trabajar muy, muy duro y sentirte muy frustrado. Literalmente, está desarrollando nuevas vías desconocidas en su cerebro para que pueda pensar de una manera que no podía antes. Afortunadamente, su cerebro es elástico, y absolutamente puede entrenarlo para pensar algorítmicamente. Cuando te sientas abrumado, recuerda que es difícil porque tu cerebro está creciendo.
  2. Memoriza algunas cosas fundamentales. Memorice los alogoritmos de clasificación estándar y las fortalezas y debilidades de cada uno. Memorice los algoritmos de recorrido de la estructura de datos estándar y las aplicaciones estándar de cada uno. Memorice la definición básica de cada estructura de datos y memorice la implementación básica o sea capaz de inferirla con precisión a partir de la definición.
  3. Busque respuestas a algoritmos. Aprenda profundamente, no memorice, pero comprenda la mecánica de varias soluciones para cada una, y cuándo, dónde y por qué cada solución es la mejor. Use cualquier recurso que lo ayude a aprender: tome clases, mire videos, pregunte a sus amigos, use Stack Overflow, cualquier cosa que funcione. Después de un tiempo comenzará a ver una superposición entre las soluciones.
  4. Regrese y codifique soluciones para algoritmos que buscó, desde cero. Intenta mantener el google al mínimo. Codifique soluciones ingenuas. Optimizaciones de código si puedes. Intente al menos pensar en optimizaciones, incluso si el código está fuera de su capacidad en este momento. Cuando creas que lo tienes, vuelve a buscarlo en Google y verifica que has encontrado la mejor solución para tu caso de uso.
  5. Súbete a Leetcode y resuelve los problemas del algoritmo. En este punto, deberías poder resolver un montón. Revise todas las soluciones editoriales disponibles. Esas cosas son doradas. Muchas, muchas preguntas de entrevista son variantes de las preguntas de Leetcode.
  6. Una vez que comience a avanzar en Leetcode, entonces también debería comenzar a trabajar en la Entrevista Cracking the Coding de Gayle Laakmann.

¿Me parece que aprendiste la sintaxis del lenguaje de programación (o más bien la codificación) en lugar de la programación misma?

Para responder a su pregunta, mejora haciendo.

Muchos sugerirían varios libros y cursos, pero aquí está mi sugerencia al azar.

  1. Juega muchos juegos, juegos de rompecabezas. Por supuesto, este podría no ser el camino correcto para ser un programador, pero aún necesita pensar lógicamente. (Pruebe juegos sencillos para Android como Math Master, Math: Mental Math Games, Lightbot, SpriteBox, Mekorama), o elija sus propios juegos de rompecabezas.
  2. Ahora prueba estos, CodeCombat, Screeps, CheckiO, CodinGame, Codewars, CodeFights)
  3. Figura y resolver problemas de la vida real.
  4. Por supuesto, debe leer libros y artículos medianos, ver videos de youtube, Y practicarlos cuando y como quiera.

Como puede ver, simplemente le estoy diciendo que comience por hacer cosas simples y luego acumule sus conocimientos. Las estructuras de datos y los algoritmos no son más que patrones para resolver algunos problemas. Pero a menos que resuelva un problema, no resolverá ningún problema en absoluto.

¿Por qué deberías jugar tales juegos en lugar de leer libros y cursos al principio? Porque ya lo has intentado durante varios años pero no estás mejorando. Probemos diferente esta vez y veamos cómo va.

El enfoque de este algoritmo en nuestra industria es nuevo. Ha surgido por dos razones:

  1. Una gran afluencia de nuevos programadores que no se pueden evaluar por experiencia. Esto deja solo pruebas de inteligencia y aptitud para diferenciarlas, a menudo basadas únicamente en el conocimiento de conceptos de lenguaje de programación de libros de texto y estructuras de datos y algoritmos.
  2. Demanda creciente de programadores para trabajar en proyectos Tipo 2, entre los que se enumeran a continuación:

Tipos de proyectos: –

  1. Sistemas de representación
  1. Sistemas transaccionales, basados ​​en acciones que deben registrarse, generalmente por razones comerciales o legales.
  2. Sistemas continuos no transaccionales, como el software que controla un elevador, un sistema transportador de almacén o un sistema de gestión de motores de vehículos.
  • Sistemas en informática y ciencia de la información y los datos.
    1. La informática, la infraestructura informática y los proyectos de soporte incluyen marcos, bibliotecas, lenguajes, servidores y programación de sistemas.
    2. Proyectos de información, ciencia de datos y análisis.
  • Embebido, juegos y otros.
  • Estos tipos se pueden agrupar en lo que yo llamo el lado izquierdo o derecho de la informática. La mayoría de los programadores están involucrados en el desarrollo y mantenimiento de sistemas de representación Tipo 1, en el lado derecho de la informática. Eso probablemente sorprenda a muchos dado el enfoque tecnológico predominantemente del lado izquierdo de audiencias como las de Quora. Parte del problema es quizás que pocos saben cómo abordar la construcción de un sistema de representación grande y complejo, mientras que uno puede aprender mucho de lo que se requiere para los proyectos de Tipo 2 a partir de documentación, libros y cursos.

    Si no tiene experiencia transferible basada en habilidades y ha trabajado solo en proyectos de Tipo 2 en el lado izquierdo de la informática, tiene un problema. Competirá con graduados que podrían ser más inteligentes que usted, que podrían haber memorizado ese libro de algoritmos recientemente o que podrían conocer ese nuevo marco de bala de plata mejor que usted.

    O mira para moverte de lado , o adquieres algunas habilidades transferibles, o tienes un futuro difícil, porque eres un recurso de desarrollo reemplazable. Con suerte, puede ver que mejorar los algoritmos no es la respuesta.

    Vea también mi respuesta a: ¿Es el desarrollo web front-end una buena carrera hoy?

    Siempre creo que el mejor lugar para aprender estructuras de datos y algoritmos es por práctica. Eres un desarrollador, por lo que la codificación es tu trabajo diario, ¿verdad? Lee un buen libro de estructuras de datos y algoritmos y la próxima vez que tengas que codificar algo nuevo, desafíate a usar una de las estructuras de datos o algoritmos que acabas de leer.

    Si no se encuentra en condiciones de aplicar cualquiera de las estructuras de datos o algoritmos, quizás la razón por la que no está mejorando en ellos es que su trabajo no es lo suficientemente desafiante.

    En ese punto, la pregunta sería: ¿realmente quiero o necesito conocer todas estas estructuras de datos y algoritmos o estoy en el trabajo correcto? Por mi parte, creo que es lo suficientemente adecuado para mí saber en general cómo funciona la clasificación rápida, cuál es su mejor caso, el caso promedio y el peor de los casos (Hoja de trucos de complejidad del algoritmo Big-O) y solo buscarlo si alguna vez necesito implementar yo mismo (que casi nunca!). Estoy de acuerdo con llamar a Dataset.sort () o funciones similares que preocuparme por implementar mi propia clase cada vez.

    La única forma de mejorar es mediante la práctica. Haga todo lo posible para incluir estructuras de datos y algoritmos en su código y estoy seguro de que eventualmente mejorará si puede usarlos.

    Gracias por a2a

    Voy a intentar un enfoque diferente aquí.

    ¿Cuántas matemáticas / física has hecho en la escuela? No importa la respuesta, entonces digo que hagas más. Me parece que decir “No soy bueno en algoritmos” es realmente lo mismo que decir “Necesito ayuda con mis habilidades de pensamiento crítico”.

    En mi humilde opinión, no hay nada mejor para agudizar estas habilidades que resolver algunas matemáticas avanzadas (funciones y tipos variables) o cualquier problema de física de nivel universitario.

    Si tiene un libro de física (si tomó física), simplemente ábralo e intente resolver cualquiera de los problemas. Si nunca has estudiado física, vuelve a la escuela y toma una clase.

    Creo que si pasas suficiente tiempo revisando este tipo de problemas, agudizarás el conjunto de habilidades necesarias para desarrollar algoritmos.

    Buena suerte y no importa lo que no te rindas!

    ¿Entiendes el problema en cuestión? La codificación no es la respuesta al problema, es solo la herramienta utilizada para lograr el resultado deseado del problema. Resolver el problema es independiente de la codificación y debe poder resolver el problema antes de poder codificarlo.

    Esto es similar a conseguir lo que quieras en la vida, ¿no?

    1.) Averigua lo que quieres.

    2.) Visualízate / internalízate teniendo. Imagine qué tipo de persona será una vez que lo tenga.

    3.) Calcula / planifica los pasos concretos necesarios para llegar allí

    4.) Establezca una línea de tiempo para los pasos: ¿qué va a hacer en qué días / semanas?

    5.) Seguir adelante.

    6) si hiciste todo lo anterior, entonces terminas donde necesitas estar por lo general.

    * Realice ajustes ocasionalmente si cree que se está desviando del curso o necesita modificarlo. Negarse a darse por vencido y hacerlo como si “por amor a él” – imaginándose a sí mismo como el mejor tipo de persona que lo hará. Reconozca que ocurrirán retrasos, pero trabaje en ello porque eso es exactamente lo que es.

    Supongo que puedes hacer cualquier cosa que te propongas y que solo tienes un bloqueo mental en este momento.

    Tengo dos puntos principales de asesoramiento para este problema en particular:

    1.) Según mi experiencia con esos sitios, diría que primero pruebe los problemas, luego, si se atasca, profundice en los comentarios y extraiga una solución desde allí. Luego regrese en el futuro e intente volver a revisar lo que se había perdido. No hay vergüenza en la necesidad de aprender del trabajo de otros. Nadie nace de forma innata sabiendo todas estas cosas después de todo.

    2.) Si desea aprender algoritmos y estructuras de datos, simplemente lea los mejores libros para ellos y luego programe todo.

    Encuentre lo que desea y haga lo anterior, luego simplemente hágalo. Puede hacerlo fácilmente con un poco de trabajo duro. Ojalá te haya ayudado. La vida es demasiado corta para no terminar donde quieres estar / como quien quieres ser solo porque no crees que puedas hacerlo.

    -Miguel

    Ah, y PS: sus “10 años en” es lo que llamamos un “costo hundido”. No lo recuperará, por lo que no debería lamentarse en absoluto de lo que ha hecho (y parece que probablemente no lo haga, lo cual es bueno) ) ¡Los 10 años es lo que te hace a ti! Así que abrázalo y disfrútalo mientras avanzas desde aquí. También apuesto a que termina siendo un activo para ti. ¡La mejor de las suertes!

    estudiar matemáticas y libros sobre algoritmos.

    Hay muchos como este: https://www.amazon.co.uk/Introdu…

    Me parece que nunca saliste de tu zona de confit.

    Sugiero aprender diferentes idiomas para resolver diferentes problemas.

    Un buen comienzo para el aprendizaje de algoritmos sería la IA básica para encontrar este camino. Es bastante difícil, pero si lo hace, facilitará las cosas la próxima vez.

    Hay muchos algoritmos de búsqueda de ruta, sugiero hacer ‘relleno de inundación’ y luego inclinarse ‘A *’ porque el relleno de inundación es más fácil y tiene los mismos conceptos.

    Algunas personas sugerirían, solo aprende A *, pero ese es un comienzo realmente difícil.

    Vea series de videos en youtube “piense como un programador” por v Anton spraul

    Jugar juegos en todas las categorías mejora la lógica

    Conozca un juego en Google Play llamado “hackeado” abt. La lógica de programación y la solución de problemas de construcción de “tope de tiempo”

    Si sabe que es débil en estructuras de datos y algoritmos, obtenga un buen libro y estudie.

    No solo léalo, implemente todo lo que lee, luego úselo en una aplicación / programa real.

    Estoy seguro de que tendrá una mejor idea de dónde / cuándo / cómo usar, y eso facilitará la resolución de problemas.

    Algunos problemas seguirán siendo difíciles, no seas arrogante, lee y entiende las soluciones de otras personas, esa es una forma de aprender también.

    Sin ofender, pero tal vez la programación no es para ti. La programación es esencialmente la resolución de problemas. El lenguaje es solo la herramienta.

    More Interesting

    ¿Cómo puede el comercio algorítmico o de patrones generar ganancias cuando la teoría de eficiencia del mercado (de forma débil) argumenta que la información de precios pasada es irrelevante?

    ¿Cuáles son las ventajas de los algoritmos SVM?

    ¿Por qué utilizar el árbol de búsqueda ternario en lugar de reemplazar cada nodo de Trie a un árbol BST?

    ¿Cuál es el algoritmo detrás de las OTP (contraseñas de un solo uso)?

    ¿Es posible tener un número de elementos en una matriz más que el tamaño de la matriz que se define en un momento de compilación?

    ¿Por qué los programadores experimentados dicen que la programación del mundo real es completamente diferente a la programación competitiva?

    ¿Por qué debería aprender algoritmos antes de entrar en la programación?

    ¿Cuáles son algunos algoritmos básicos en el aprendizaje automático para que su programa aprenda de otros datos (aprendizaje supervisado)?

    ¿Qué debo hacer para autoaprendizaje de ciencias de la computación con interés en inteligencia artificial y ciencias de la computación teóricas?

    ¿Cuál es el algoritmo más adecuado para la agrupación en una red social?

    ¿Cuáles son los requisitos previos para Introducción a los algoritmos de Thomas Cormen?

    ¿Cómo buscarías una base de datos en tiempo real de Firebase con una subcadena?

    ¿Debería seleccionar siempre el algoritmo con el menor orden de complejidad?

    ¿Cómo reconocen los programas el nombre usando el procesamiento del lenguaje natural?

    Si tengo que crear un sitio de redes sociales como Facebook, ¿qué cosas tengo que estudiar comenzando desde el front-end hasta el back-end hasta el servidor y los servidores web? ¿Cuáles son todas las cosas que uno debe saber en profundidad?