Yo haría esto:
Ruta A: el método semi-típico
-
Aprenda un idioma con una sintaxis más regularizada como Java, C # o Python. Perl es una herramienta increíblemente útil, pero también es una forma muy libre en cuanto a cómo le permite hacer las cosas. Los otros idiomas que enumeré son mucho, mucho menos.
-
Obtenga un libro sobre estructuras de datos en dicho idioma.
-
Obtenga un libro sobre algoritmos en dicho idioma.
-
Obtenga el código completo y efectivo Java / C # / Cualquiera que sea la versión de Python.
Ruta B: El Sendero de la Iluminación de Joel Spolsky (o Death, elige)
-
Obtenga el libro "Código"
-
Obtén el "lenguaje de programación C" de K & R
-
Obtenga la estructura e interpretación de la programación de computadoras
En cuanto al método, el método 1 le enseñará a programar de una manera más regular. Hasta cierto punto, los conceptos informáticos (sin teoría de la complejidad, confía en mí) y te proporcionan un lenguaje que es mejor para trabajar en proyectos con otras personas y para hacer aplicaciones más grandes.
El método 2 es más duro, es un enfoque más básico con "Code" que explica los conceptos básicos, K & R introduce el material a nivel de máquina y el SICP presenta los conceptos de nivel superior. Es un camino mucho más difícil pero más enfocado.
En cualquier caso, date tiempo. Roma no se construyó en un día y tampoco lo son las habilidades de programación, incluso si eres un genio en eso. La programación de Peter Norvig en 10 años es el ensayo habitual que señalo a las personas.
Anexo:
En cuanto al material gratuito disponible: Python the Hard Way, como se indica a continuación, es un buen comienzo, desde allí, Cómo pensar como un informático es una continuación razonable.
Hay una serie de recursos en Algoritmos y, honestamente, probablemente puedas cambiar los pasos 3 y 4 sin problemas. Tenga en cuenta que aquí es donde realmente comienzan a aparecer las matemáticas, así que nunca tenga miedo de pedir ayuda cuando llegue a esta etapa. Esto parece ser una guía gratuita razonable .
Realmente no hay un equivalente libre y cohesivo al Código Completo por decir, aunque Código como un Pythonista parece bastante sólido. Lo importante es concentrarse en hacer que su código sea legible una vez que tenga los fundamentos. No es "necesario" de la misma manera en que es correcta la sintaxis de su código, pero hace que la vida sea mucho más fácil una vez que supere los programas pequeños o trabaje en algo durante un período prolongado.
Es posible que descubras que me he centrado principalmente en Python, porque es el más fácil de los tres encontrar material gratuito bien escrito. Creo que los tutoriales de Java de Oracle están bien, pero están un poco secos y no son excelentes para los principiantes. C # se encuentra en una situación similar, aunque ninguno de ellos sufre de falta de documentación.
También, tu primer chiste / juego de CS: quieres "refactorizar" tu educación, no Retroceder.