Cómo comenzar con estructuras de datos y algoritmos, considerando que no he sido bueno en matemáticas

Soy un programador autodidacta que tiene un título en informática.

Cualquier límite que alcances probablemente tendrá más que ver con las percepciones de otras personas sobre tus habilidades en ciertas materias, en lugar de lo bueno que realmente eres en ellas. Sí, serás un programador más eficiente si los conoces. Sin embargo, el beneficio real es menor de lo que podría pensar. A menos que salga del desarrollo web, el 90% de lo que escriba será pegamento.

Si su objetivo es romper el techo de cristal en su escala salarial, lo mejor que puede hacer es encontrar personas que sean mejores que usted e ir a trabajar para ellos. También te hará mucho más bien por tu calidad que solo estudiar. Lo mejor es ir a construir tus propios proyectos y hacerlos geniales. De Verdad. Simplemente elige cualquier cosa para resolver un problema específico que tengas y ve a hacer que suceda. Cada hora que pasa haciendo eso es mucho más valioso para su carrera que estudiar cualquier cosa, siempre que lo construya bien y lo haga público. La tercera mejor opción es pagar dinero por las clases, ya que las escuelas “piratas informáticos” tienen el mejor rendimiento por su dinero.

Si su objetivo es convertirse en un mejor desarrollador, la buena noticia es que hay mucho que puede hacer, y la mala noticia es que hay mucho que puede hacer. Esté preparado para adquirir el hábito de aprender cosas nuevas y estar constantemente confundido por ello. Llegará al punto en que todo se junta en una gran imagen eventualmente, y se vuelve mucho más fácil aprender cosas nuevas.

Me gustan las matemáticas (no, en realidad, tenía doble especialización en matemáticas antes de decidir que no valía la pena). Ignórelo a menos que lo necesite para aprender un concepto de programación. La tasa de intersección es bastante baja, y un curso decente no lo requerirá. Logaritmos sobre los que quizás desee leer específicamente, ya que los necesitará para comprender la complejidad del tiempo. Aunque, en realidad, la complejidad del tiempo podría ser una buena forma de aprender logaritmos.

El beneficio de esos cursos de Estructuras de datos y Algoritmos es exponerle diferentes tipos de soluciones específicas y comprender cómo y por qué funcionan. Es extremadamente raro que realmente necesite elegir entre un mapa hash y otro esotérico. Poder elegir simplemente entre un conjunto, una lista vinculada, una lista de matrices y un mapa obtiene el 80% del beneficio al 5% del costo. Otro 10% está utilizando operaciones Set. El conocimiento de implementaciones específicas (es decir, su lenguaje de programación) también es mucho más valioso aquí que el conocimiento teórico, aunque los dos generalmente se superponen.

La habilidad técnica más importante que muchos programadores autodidactas corren el riesgo de perder es poder identificar la complejidad de la escala. Busque la notación grande de O. Es muy útil en general, y es una habilidad extremadamente transferible que la mayoría de la gente no tiene. Por ejemplo, el mítico hombre-mes se vuelve obvio cuando se lo ve como un problema de complejidad. Es fundamental para entender por qué la escala horizontal funciona tan bien. Ve a aprenderlo, domínalo, úsalo inconscientemente todo el tiempo y comprende cuándo puedes ignorarlo.

Hay algunas otras gemas técnicas ocultas de un título de CS, como FSM y teoría de los idiomas. También es bueno aprender el atroz estado de la ingeniería y administración de software en general, y comprender los problemas de estimación, programación y administración de estilo cascada.

También hay muchas cosas fundamentales (es decir, cómo la computadora realmente ejecuta mi programa) que podrían terminar siendo una brecha significativa en su conocimiento más adelante: punteros, asignación de memoria + recolección de basura, pila vs montón, programación asincrónica, programación del sistema operativo, caché de memoria , paginación, compiladores, traducción de idiomas, ensamblaje + código de máquina, JIT. Si no está familiarizado con ninguno de estos, es posible que desee leer sobre ellos y construir algo (si es posible. No es necesario construir su propio sistema operativo o compilador completo) para demostrar su conocimiento a usted mismo.

Las habilidades “blandas” ultra valiosas (mucho más valiosas que cualquier otra cosa que he mencionado), nunca se enseñan bien en mi experiencia, y se observan y experimentan mejor. Nunca le dicen que el cliente nunca sabe lo que realmente quiere.

Las estructuras de datos son muy conceptuales. Ciertamente no necesitas un fondo de matemáticas para comenzar. Comience, por ejemplo, con la creación de una lista vinculada o implementación de hashmap en el idioma de su preferencia (lo hice en C, por ejemplo). Modifique la lista para convertirse en un conjunto. Intente hacer que el conjunto sea más eficiente aplicando lo que aprendió al implementar un hashmap. Luego puede probar otra estructura, como un árbol binario (con algo de recorrido) o un gráfico. Luego, intente usar su árbol binario para crear una colección ordenada (conocida como conjunto de árboles). ¡Esto te mantendrá ocupado durante unos días de programación divertida!

También soy un programador autodidacta y busco constantemente conocer los conceptos de informática.

Dos fuentes increíbles que he encontrado para estudios sobre algoritmos y estructuras de datos son:
1. Harvard CS50 – Introducción a la ciencia comp por David J. Malan de la Universidad de Harvard
He comenzado varias veces este curso y en cada ocasión toco una nueva altura (por lo tanto, estoy progresando constantemente a través de este curso). David enseña sobre algoritmos y estructuras de datos de una manera muy interactiva y divertida, algo que me impide aburrirme del curso.

2. Resolución de problemas con algoritmos y estructuras de datos – Runestone Interactive – Aunque usan Python como lenguaje primario, si eres bueno en algún otro idioma, seguramente puedes aplicar los conceptos explicados aquí en tu lenguaje de programación familiar y aplicar algo enseñado en un idioma en un idioma diferente te dará muchas más ideas y te enseñará conceptos de una manera muy definitiva.

¡Espero que esto ayude!