Como soy un programador completamente autodidacta, me gustaría poder mejorar autoaprendiendo el curso de informática que se imparte a un graduado típico en CS.
Encontrar diferentes recursos en Internet ha sido fácil, hay por supuesto MIT open course ware, y hay cursos Coursera de Stanford y otras universidades. Hay muchos otros recursos abiertos dispersos por Internet y algunos buenos libros que se recomiendan repetidamente.
He estado aprendiendo mucho, pero mi estudio está muy fragmentado, lo que realmente me molesta. Me encantaría si en algún lugar, pudiera encontrar un camino que debería seguir y una pila a la que debería limitarme, de modo que pueda estar seguro de qué partes esenciales de la informática he estudiado, y luego abordar sistemáticamente las que no he estudiado.
El problema de Wikipedia es que no te dice qué es esencial, sino que insiste en ser una referencia completa.
El programa de cursos abiertos del MIT para Informática e Ingeniería Eléctrica tiene una lista enorme de cursos que tampoco te dice qué cursos son esenciales y cuáles opcionales según los intereses o requisitos de cada persona. No he encontrado ninguna mención a un orden en el que uno debe estudiar diferentes temas.
Lo que me gustaría es crear una lista que pueda seguir, como esta ficticia
SUBJECTS DONE
Introduction to Computer Science *
Introduction to Algorithms *
Discrete Mathematics
Adv. Discrete Mathematics
Data structures *
Adv. Algorithms
...
Como puedes ver claramente, tengo poca idea de en qué consisten las asignaturas específicas de informática.
Sería enormemente útil, incluso si alguien señaló cursos esenciales de MIT Course ware ( + temas esenciales no presentes en MIT OCW) en un orden recomendado de estudio.
Voy a listar los Posts que ya he revisado (y no he conseguido lo que buscaba allí)
https://softwareengineering.stackexchange.com/questions/49557/computer-science-curriculum-for-non-cs-major - la respuesta principal dice que no vale la pena estudiar cse
https://softwareengineering.stackexchange.com/questions/110345/how-can-a-self-taught-programmer-learn-more-about-computer-science - apunta a MIT OCW
He visto material de cursos del MIT, y era sorprendentemente malo. Tenían material didáctico que requería VC5, montones de variables globales implícitas, pasar colores como "Azul" en lugar de ARGB de 32 bits, por no hablar de 4x [0,1] flotantes, ese tipo de cosas. Yo no me fiaría de un plan de estudios o de un código sólo porque provenga de una universidad de renombre.
Mi licenciatura en ciencias de la computación (de una universidad que está entre las 10 mejores del Reino Unido en este campo) consistió en..:
Primer año:
Segundo año:
Tercer año:
Como podrá comprobar, prácticamente todo son "conceptos básicos" de algo y casi nada se trata en profundidad.
Las cosas que realmente valía la pena hacer, esencial:
OOP- y luego un poco más, y luego un poco más
Programación funcional, y algo más. Intenta elegir un lenguaje como C++ o C# donde no tengas que reaprender la sintaxis y las herramientas, etc, para cubrir ambos estilos.
Análisis de requisitos- Tiene que ser útil para cualquier proyecto.
Saber qué es la complejidad algorítmica, cómo reducirla y cuál es la complejidad de las operaciones comunes es importante.
Modelos de gestión de proyectos de software- muchas tiendas hacen Agile y muchas otras más antiguas todavía hacen modelos estilo Waterfall.
Lo que merecía la pena hacer, opcionalmente:
Lenguajes de programación: jerarquía de Chomsky, herramientas de léxico y análisis sintáctico. Sáltate la teoría que hay detrás de los analizadores LL o LR: un analizador LR puede aceptar prácticamente cualquier CFG realista sin ambigüedades, y cuando no pueda, la documentación de tu generador de analizadores te lo dirá.
Gráficos 3D. No me refiero a "Demostrar que esto es una fórmula de matriz de rotación" pérdidas de tiempo, me refiero a "Esto es un sombreador de vértices" cosas, o GPGPU. Eso es divertido, interesante y diferente.
Algunas de las cosas de la IA son divertidas, como los campos potenciales y el pathfinding.
Cosas que'son esenciales pero que'no cubrí de todos modos:
El resto fue una completa pérdida de tiempo. Desgraciadamente, la mayoría de estos nueve puntos ya los conocía, o había aprendido las partes útiles en otra parte. Si lees sobre cosas como el problema de FizzBuzz, rápidamente te das cuenta de que en realidad no necesitas saber mucho para estar a la última, lo cual es una suerte, ya que mi titulación y muchos de los materiales que he visto en Internet para otras titulaciones no enseñan mucho en absoluto.
Open Course ware es sólo una lista de cursos que han puesto a disposición. Si quieres saber lo que tendría que haber hecho un estudiante, pásate por la página web del MIT (no OCW) y mira el programa. Tienen una lista de lo que se requiere y lo que se considera un prerrequisito para qué. Aquí está su página.
Si me lo permites, me gustaría sugerirte que te unieras a github.com como parte de tu proceso de aprendizaje.
Así podrás buscar código que tenga alguna aplicación en el mundo real que te interese, clonarlo para ti, trabajar con él, codificarlo y llegar a conocerlo, y con el tiempo empezar a enviar parches al proyecto fuente, y más adelante trabajar en un proyecto de código abierto en el que tengas un interés personal.
Y, por supuesto, te familiarizarás con git, que es mucho mejor.