Eu faria o seguinte:
Caminho A: O método semi-típico
Aprenda um idioma com uma sintaxe mais regularizada, como Java, C # ou Python. O Perl é uma ferramenta incrivelmente útil, mas também é muito livre, em termos de como permite fazer as coisas. Os outros idiomas que listei são muito, muito menos.
Obtenha um livro sobre estruturas de dados no idioma mencionado.
Obtenha um livro sobre algoritmos no idioma mencionado.
Obtenha código completo e eficaz Java / C # / Qualquer que seja a versão do Python.
Caminho B: O Caminho da Iluminação de Joel Spolsky (ou Morte, faça sua escolha)
Obter o livro "Código"
Obtenha o "The C Programming Language" da K&R
Obtenha a estrutura e a interpretação da programação de computadores
No que diz respeito ao método, o método 1 ensina a programar de maneira mais regularizada. Os conceitos de Ciência da Computação até certo ponto (ainda não há teoria da complexidade, confie em mim) e fornecem uma linguagem melhor para trabalhar em projetos com outras pessoas e para criar aplicativos maiores.
O método 2 é mais rígido, é muito mais uma abordagem de fundamentos, com "Código" explicando o básico, a K&R introduzindo o material no nível da máquina e o SICP introduzindo os conceitos de nível superior. É um caminho muito mais difícil, mas mais focado.
Em ambos os casos, reserve um tempo. Roma não foi construída em um dia e nem habilidades de programação, mesmo que você seja um gênio. A programação de Peter Norvig em 10 anos é o ensaio habitual para o qual aponto as pessoas.
Termo aditivo:
Tanto quanto o material gratuito disponível: Python the Hard Way, conforme listado abaixo, é um bom começo; a partir daí, como pensar como um cientista da computação é uma continuação razoável.
Existem vários recursos em algoritmos por aí e, honestamente, você provavelmente pode alternar as etapas 3 e 4 sem problemas. Lembre-se, é aqui que a matemática realmente começa a aparecer, portanto, não tenha medo de pedir ajuda quando chegar a esse estágio. Este parece ser um guia gratuito razoável .
Realmente não existe um equivalente gratuito e coeso do Code Complete, por exemplo, embora o Code como um Pythonista pareça bastante sólido. O importante é concentrar-se em tornar seu código legível depois que você entender os fundamentos. Não é "necessário" da mesma maneira que ter toda a sintaxe de código correta, mas facilita muito a vida quando você ultrapassa pequenos programas ou trabalha em algo por um longo período.
Você pode achar que eu me concentrei principalmente em Python, é porque é o mais fácil dos três encontrar coisas gratuitas bem escritas. Acho que os tutoriais de Java da Oracle são bons, mas são um pouco secos e não são ótimos para iniciantes. C # está em uma situação semelhante, embora nenhum sofra de falta de documentação.
Além disso, sua primeira piada / piada de CS: você deseja "Refatorar" sua educação, não o Backtrack.