Não adianta construir um edifício sem antes preparar a fundação.
P/ preparar a fundação eu dou o mesmo conselho que dou a qualquer um que quer melhorar/aprender a programar:
1. Se você não souber ler fluentemente inglês primeiro concentre-se em melhorar o seu domínio do idioma. Ler/Escrever em inglês é tão importante p/ programação quanto são os seus dedos. Sem eles fica
muito mais difícil.
2. Tendo domínio sobre inglês basta estudar estes três livros em ordem (todos disponíveis na free web):
Code: The Hidden Language of Computer Hardware and Software
Com este livro você vai aprender não só a história da computação, mas também como de fato funciona um processador/computador, o que são portas lógicas, flip-flops, relays, ram, opcodes, assembly, transistores, enfim...
C Programming Language
C ainda é o ponto de partida para qualquer um que queira realmente aprender a programar. Livro bem pequeno e de fácil entendimento o suficiente p/ prepará-lo para o próximo (e último) livro.
Structure and Interpretation of Computer Programs
Este é o livro que vai te dar as ferramentas necessárias para de fato programar. Vai te ensinar desde abstração/estrutura de dados até modularidade, objetos, enfim...
Se você não conseguir finalizar esses três livros dificilmente conseguirá se tornar um verdadeiro "programador".
Dica original:
teaching - How can I teach a bright person, with no programming experience, how to program? - Programmers - Stack Exchange