¿Cuál debería ser el plan de estudios para un aspirante a programador?

Depende de lo que quieras lograr. ¿Planeas ser un desarrollador de front-end? Back-end? Sistemas? Bases de datos? Hay una gran cantidad de opciones 🙂 Su primer paso debería ser cristalizar un rol que le gustaría cumplir, o un producto que le gustaría diseñar. Y luego trabajar hacia eso. Este proceso lo ayudará a descubrir lo que le gusta, lo que no le gusta e iterar su objetivo final a algo que considere satisfactorio.

Comenzar con los fundamentos de CS * rápidamente * es probablemente su mejor apuesta. Su ruta debe enfocarse en aprender sobre varios algoritmos, estructuras de datos y otros conceptos de sistemas / redes que forman el núcleo de la Ciencia de la Computación. Aprenda a analizar algoritmos y estructuras de datos en algún nivel básico antes de continuar, para poder predecir qué aspecto tendrá un buen algoritmo en comparación con uno malo. ¡Tener una imagen de alto nivel de las partes internas de una computadora nunca hace daño a nadie tampoco!

CLRS (el libro MIT Algorithms, llamado así por sus 4 autores) y SICP (mencionado en otra respuesta por Ari Shahdadi son libros geniales, pero no tienen una curva de aprendizaje fácil. El primero es más un compendio que un libro que ayudará a acelerar su aprendizaje. Tiende a ser muy matemático y es probablemente el material más riguroso sobre algoritmos fuera de ” El Arte de la Programación de Computadoras ” de Knuth. SICP, por otro lado, implica un Esquema de aprendizaje, una variante clara que puede tener una en la curva de dificultad para entrar. Si bien son excelentes opciones para el largo plazo, pueden no ser muy útiles para ser un programador útil en un corto período de tiempo.

Recomiendo comenzar con el “Manual de diseño de algoritmos” de Steven Skiena, donde aborda todos los aspectos de los algoritmos, grandes y pequeños, en prosa limpia y ejemplos de uso inmediato en C / C ++. [Un libro similar son los algoritmos de Sedgewick, que aparecen en las ediciones de Java y C ++]. Personalmente, recomendaría comenzar con C ++ como su idioma para aprender. Python y / o Ruby deben ser tu segundo idioma, aunque comenzar con cualquiera de ellos no te hará daño, pero puede limitar tu forma de pensar.

Repase los primeros 8 a 10 capítulos del libro de Skiena y, utilizando estos conceptos, intente resolver algunas de las preguntas de programación en línea, como el Proyecto Euler, el Juez de Esfera en línea o el Juez de UvA en el idioma que elija. Una vez que pases un par de semanas en esto, te recomiendo que elijas uno de Python o Ruby, dependiendo de lo que te guste más (¡una elección totalmente personal, me inclino por Python!) Y un marco web como Rails o Django. Si bien los marcos web basados ​​en Java se utilizan mucho, es probable que progrese más rápido con uno de estos.

En este punto, puede optar por crear un servicio web sobre estos marcos que es algo que le gustaría usar y profundizar en los temas que necesita para tener éxito. Por ejemplo, sería bueno saber aquí, teniendo en cuenta el HTML y CSS, un poco de Javascript y el diseño básico de la base de datos, y le permitirá crear una pila de aplicaciones desde la interfaz de usuario hasta el backend.

¡Buena suerte!

Si lo desea, puede hacer un seguimiento de su aprendizaje al currículo de Ciencias de la Computación del MIT: http://ocw.mit.edu/OcwWeb/Electr

Recomendaría encarecidamente invertir tiempo en aprender los fundamentos de la informática y el desarrollo de software: abstracciones, estructuras de datos, algoritmos, teoría de computación, etc. Una vez que los obtenga, esos conceptos básicos se aplicarán independientemente de los idiomas o marcos que desee. aprender en el futuro

SICP nunca es un mal lugar para comenzar: http://mitpress.mit.edu/sicp/
Introduction to Algorithms es también un excelente libro de texto: http://mitpress.mit.edu/catalog/

Más allá de lo básico, querrá buscar recursos para los lenguajes / marcos específicos que desea aprender. Comenzar con C nunca es una mala idea; JAVA tiene ventajas dada su simplicidad, y que te obligará a tener una cierta mentalidad sobre la herencia y las abstracciones (pero quizás eso también sea negativo); Lo mismo con C ++, además de todas las cosas técnicas extremadamente extrañas que puedes hacer con él, pero creo que es un lenguaje que nadie domina completamente.

No he tenido (todavía) el tiempo para aprender algunos de los nuevos frameworks web, pero también puedes comenzar por aprender JavaScript, Python, PHP, etc.

Creo que el mejor consejo que cualquiera puede darte es que comiences a piratear cosas tan pronto como puedas. Hacer un código que funcione y tenga un resultado tangible hace que los centros de recompensa de su cerebro se conviertan en una manera que aumente el aprendizaje y lo incentive a continuar en el proceso. No solo eso, sino que no hay sustituto para construir cosas (y fallar miserablemente en esto) cuando aprendes, y es mejor que comiences temprano.

En ese sentido, tal vez sea mejor comenzar a aprender los conjuntos de herramientas / marcos web y aprender los fundamentos en paralelo, pero es imposible para mí decir que fue alguien que comenzó con los fundamentos y resolvió mi camino (tan lejos que ahora soy abogado. ).