Como programador autodidacta, ¿cómo puedo mejorar mi comprensión de las matemáticas y los algoritmos?

Para entender las matemáticas, debes hacer muchas matemáticas. Pero sé que eso no es posible para todos (y es fácil para mí decir que estoy obteniendo un título de física), pero desafortunadamente es la verdad (no te preocupes, el hecho de que tienes que practicar la programación para ser bueno) se pierde en muchos estudiantes de física).

Si fuera usted, podría hacer algunas cosas dependiendo de cuán motivado esté para dominar algunas matemáticas fundamentales. Supongo que muchas matemáticas no serán terriblemente relevantes para usted, por lo que centrarse en las matemáticas discretas es probablemente una buena idea. En ese caso, leería este libro:

Matemática discreta y sus aplicaciones: Kenneth H. Rosen: 9780072880083: Amazon.com: Libros

Este libro fue bastante esclarecedor para mí, pero otros lo han llamado un poco seco. Puedes buscar las reseñas, pero yo digo que es muy completo. Si comprende los temas discutidos en ese texto, estará en una excelente posición para comprender las matemáticas detrás de los algoritmos. Mencionaste que tienes un GED. No tengo idea de lo difícil que puede ser para usted obtener un libro de matemáticas, pero parece que puede manejar cómodamente algunas ideas complejas. No se deje intimidar por las matemáticas (mucha gente lo está). Es solo lógica, y puedes entenderlo si trabajas lo suficiente. Haga muchos problemas y verifique sus soluciones. Este libro se usa normalmente para personas de CS de primer año, pero es mucho mejor como referencia (mire las reseñas … muchos estudiantes lo odian porque es demasiado para ellos, así que tal vez sea más adecuado por un segundo o incluso estudiante de tercer año para pasar cómodamente). Siéntase libre de encontrar otros libros, solo asegúrese de estar cubriendo los siguientes temas:

  • Gráficos / árboles
  • Lógica proposicional / pruebas
  • Combinatoria
  • Conjuntos / secuencias
  • Complejidad (aunque esto podría dejarse para un libro de algoritmos)
  • Probabilidad
  • Reaparición
  • Idiomas, gramáticas, computabilidad, etc.
  • Circuitos

Tenga en cuenta que cada uno de estos puede ser su propia clase o libro de texto. Las matemáticas discretas están destinadas a darte una introducción, y creo que eso es todo lo que realmente necesitas. Una vez más, este libro de Rosen es excelente por su integridad, pero si lo encuentra demasiado duro, puede probar con otro.

Además, puede ser beneficioso para usted ver cursos en línea gratuitos o videos de cursos para matemáticas discretas. Mucha intuición proviene de un buen instructor, por lo que esto puede ayudar. Si pasa horas en algunos problemas, eso es algo bueno.

No es como muchos programadores querer aprender cosas difíciles cuando ya han hecho una carrera exitosa, y el hecho de que vuelvas a hacerlo después de 10 años es realmente increíble. Buena suerte.

Programming Pearls (2nd Edition): Jon Bentley: 0785342657883: Amazon.com: Books tiene un gran estilo y es bastante bueno para principiantes.

Entrevista para descifrar la codificación: 150 preguntas y soluciones de programación: Gayle Laakmann McDowell: 9780984782802: Amazon.com: Books es el mejor libro para capacitación en entrevistas.

Para mí fue muy útil al principio hablar sobre muchos problemas con amigos que eran mejores que yo.

La forma más eficiente sería encontrar algún experto que pueda asesorarlo.

Muchos han sugerido leer libros sobre algoritmos y matemáticas, que definitivamente es una muy buena opción. Creo que puedes comenzar con el curso de Algoritmos de Tim Roughgarden en Coursera. Hay 2 partes en el curso. Echa un vistazo a https://www.coursera.org/course/ … y https://www.coursera.org/course/ … .. Te darán una muy buena introducción a los temas y muchos consejos para trabajar con.

Como programador autodidacta, estoy seguro de que tienes muy buenas habilidades de autoaprendizaje y entiendes el valor de la práctica en cualquier proceso de aprendizaje. Entonces, una buena fuente de práctica para los tipos de problemas con los que luchas sería:

  • Proyecto euler
  • TopCoder
  • CodeChef
  • Codeforces
  • Juez Esfera Online (SPOJ)

Todos estos son sitios de tipo concurso de codificación con muchos problemas algorítmicos para resolver, generalmente clasificados en términos de dificultad. Además, la mayoría de estos sitios, si no todos, tienen foros donde puede discutir los problemas con otros, comparar soluciones y solicitar ayuda.

Sin embargo, es un poco difícil abordar algunos de estos problemas si no tiene la base académica para comprender la redacción / notación utilizada para describir los problemas. Así que definitivamente consideraría tomar algunas clases en un colegio comunitario o al menos elegir un libro de texto sobre matemáticas discretas, teoría de conjuntos, cálculo, etc. Tener una buena base en matemáticas hará que resolver muchos de estos problemas sea mucho, mucho más fácil.

Hay muchos cursos buenos por ahí. Echa un vistazo a la lista de Bob Ippolito de los cinco grandes cursos de informática en Coursera.

Si está interesado en mejorar su comprensión de las matemáticas discretas (que es un requisito previo importante), eche un vistazo al curso de OpenCourseware del MIT Matemáticas para la informática.

La única forma de mejorar en este tipo de problemas es practicar resolviéndolos. Los cursos en línea gratuitos son una excelente manera de resolver muchos problemas, así que regístrese para obtener algunos.

Mi recomendación: ¡Mucha práctica en sitios web como Codeforces o TopCoder! Hay muchos problemas que podrá resolver, luego leer los títulos en TopCoder y continuar practicando …
¡También hay un concurso de algoritmos, donde puedes participar! Esa también es una buena opción para practicar tu código.
¡Mira el código de otras personas y cómo otras personas resuelven los problemas y entienden sus soluciones! 🙂
Buena suerte

Como aprendiste a programar haciendo, tu mejor opción podría ser aprender haciendo. Por lo tanto, diría que intente aprender a programar con un paradigma completamente diferente al que está acostumbrado. Para lo que es un poco matemático, realmente sugeriría un tipo de lenguaje de programación funcional como ocaml o Scala e intentar aprender a escribir funciones de forma recursiva (una función que se llama a sí misma) en lugar de hacerlo de forma iterativa (como instrucciones paso a paso dentro de los bucles). Esto te acercará a cómo escribes las cosas matemáticamente y al mismo tiempo mantendrá el lado de la programación. Después de eso, también puedes explorar cosas como Xslt o prolog.

Estoy completamente de acuerdo con el enfoque de línea en línea, sugeriría Kahn Acadamey, gratuito, multinivel y a su ritmo.

Inhale el arte de la programación de computadoras por Knuth.

Para mí, la mejor manera de aprender el algoritmo es por el caso real, por lo que necesita ‘encontrar un caso en su entorno y transformarlo en matemática, esto lo hará más interesado en encontrar la solución para él.
Internet puede ayudar a su situación.

Intente descifrar las entrevistas de codificación y las estructuras de datos y los algoritmos facilitados por Karumanchi. Encontré que estos dos son suficientes con mi experiencia.