Este año quiero cubrir algunos conceptos de ciencias de la computación (por ejemplo, estructuras de datos), y no sé por dónde empezar. ¿Qué temas se tratan mejor primero y cuáles se tratan mejor más adelante?

Primero, ¿tienes algún fondo en programación? Si es así, genial, eso solo ayudará, pero es posible que necesite desaprender algunas malas prácticas.

Si no, eso está bien también; Tendrás un buen comienzo limpio.

A pesar de que la informática ayudará a su programación, se requiere un poco de programación para comprender la informática, y así es como se estructuran la mayoría de los regímenes de aprendizaje.

En cuanto a los recursos:

De gran ayuda serán los materiales de cursos en línea gratuitos, los cursos en línea de MIT en ciencias de la computación. Abarcan una amplia gama de temas y no los necesitará ni necesariamente los deseará todos, pero los cursos de introducción son muy útiles.

Khan Academy también cuenta con una maravillosa variedad de materiales y, de hecho, cuenta con herramientas de programación interactivas que le permiten trabajar de forma práctica. Recomiendo comenzar con la pista de programación de computadoras, pero una vez que haya completado la primera sección, es posible que desee cambiar a Ciencias de la computación y comenzar a ver los algoritmos. Un beneficio importante para el autoaprendizaje es que puede alternar entre los materiales para aclarar, y le sugiero que lo haga, siempre y cuando mantenga una secuencia sensible.

En cuanto a temas:

No importa qué recursos utilice, un buen orden de aprendizaje es importante.
El siguiente ordenamiento es un esquema general de una secuencia que suelen utilizar muchas escuelas. Dejo algunos detalles, y es posible que olvide algunos temas por completo, pero le dará una idea funcional del flujo general que necesita:

  • Programación introductoria (lógica y resolución de problemas para la programación; sentencias, bucles, condicionales, funciones, clases y objetos; arrays)
  • Estructuras de datos y programación intermedia (herencia, polimorfismo y encapsulación; estructuras básicas, nodos, listas, árboles; búsqueda y clasificación; recursión; genéricos / plantillas)
  • Programación de sistemas y más estructuras (construcción de programas completos, comprensión de memoria, montones, mapas y mejor uso de las clases)
  • Arquitectura y programación de computadoras de manera eficiente (estructura de computadora fundamental, circuitos lógicos, compuertas, ALU, etc.; mejor comprensión de la memoria y los componentes de la computadora; programación de ensamblaje y C de bajo nivel, programación eficiente)
  • Matemáticas discretas y algoritmos (conceptos matemáticos de conjuntos, gráficas, etc.; métodos de prueba y análisis de algoritmos; análisis de eficiencia, tiempo de ejecución, dureza básica y complejidad; algoritmos avanzados, pensamiento abstracto sobre problemas)
  • Lenguajes de programación y teoría de la computación (paradigmas de programación, usos de LISP, Prolog, C, Python, etc.; notaciones gramaticales formales, lenguajes regulares, CFG, autómatas, dureza y reducción)
  • Sistemas operativos (detalles de la arquitectura, implementaciones de sistemas operativos; esquemas de paginación, algoritmos de programación, procesos, subprocesos, interacción del usuario; más programación de bajo nivel, programación multinúcleo)

Tenga en cuenta que el esquema anterior no es un proceso de un año.

La programación introductoria, las estructuras de datos y la programación intermedia probablemente le llevarán la mayor parte del año para que lo haga bien.
Por supuesto, cuanto más sepa de un tema, más fácil será aprender los demás, por lo que es posible (e incluso se recomienda) cierta flexibilidad. En particular, la eficiencia de la programación, las matemáticas discretas y los algoritmos están muy entrelazados. A medida que aprenda un tema, reconsidere los anteriores que aprendió y los verá desde una nueva perspectiva.

La desventaja del autoaprendizaje es que si su secuencia difiere de la esperada de un recurso que está usando, es posible que encuentre conceptos en los que no esté preparado. En esas circunstancias, no tenga miedo de llegar a través de múltiples recursos, mirando a través de varios cursos en línea, libros, foros, etc. para su comprensión. Te garantizo que puedes aclararlo con paciencia y disciplina.

Para resumir: comenzar con la programación básica. Luego obtenga algunas estructuras de datos , aprenda a programar bien con ellos y cree programas más grandes .

Una vez que estés sólido con eso, aprende más sobre los algoritmos . Complementa esto con matemáticas discretas , que te ayudarán a entender mejor los algoritmos. Aprende análisis algorítmico , aprende hardware de computadora y programación de bajo nivel .

¡Para ese momento, podrás combinar disciplinas y aprender casi cualquier cosa en informática!

Escuela de Ingeniería de Stanford