Yo haría esto:
Camino A: El Método Semi-Típico
Aprenda un lenguaje con una sintaxis más regularizada como Java, C # o Python. Perl es una herramienta increíblemente útil, pero también tiene una forma muy libre en términos de cómo te 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 código completo y efectivo Java / C # / Cualquiera que sea la versión de Python.
Camino B: Camino de la Iluminación de Joel Spolsky (o Muerte, elige)
Obtenga el libro "Código"
Obtenga "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. Los conceptos de informática hasta cierto punto (aún no hay 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 mucho más un enfoque fundamental con "Código" que explica los conceptos básicos, K&R presenta las cosas 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 al que apunto a la gente.
Apéndice:
En cuanto a las cosas gratis disponibles: Python the Hard Way como se enumera a continuación es un buen comienzo, a partir de ahí, Cómo pensar como un informático es una continuación razonable.
Hay una serie de recursos sobre Algoritmos y, honestamente, probablemente podría cambiar los pasos 3 y 4 sin problemas. Tenga en cuenta que aquí es donde las matemáticas realmente comienzan a aparecer, 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 cohesivo libre de Code Complete por ejemplo, aunque Code 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 básicos. No es "necesario" de la misma manera que tener toda la sintaxis de su código es correcta, pero hace que la vida sea mucho más fácil una vez que va más allá de los pequeños programas o trabaja en algo durante un largo período.
Puede encontrar que me he centrado principalmente en Python, eso es porque es el más fácil de los tres para encontrar cosas gratis bien escritas. Creo que los tutoriales de Java de Oracle están bien, pero son un poco secos y no excelentes para principiantes. C # se encuentra en una situación similar, aunque ninguno de los dos sufre de falta de documentación.
Además, tu primer chiste / juego de palabras de CS: quieres "Refactorizar" tu educación, no Backtrack.