Primeiro: Entender como a própria mente funciona, pois cada um é de um jeito e as vezes copiar o aprendizado de um, não rola no outro.
Segundo: Aprender os conceitos básicos com uma linguagem de sintaxe simples que mais goste, sem ver a que usam no mercado (gosto de Ruby para iniciar). A linguagem aqui é apenas ferramenta para aprender o que interessa, que são os conceitos de programação, tais como lógica como bem disse, mas tambem paradigmas e estrutura de dados.
Terceiro: Não ficar pulando de linguagem/conceito/tecnica toda hora, quando uma adversidade ou animo recai a si. Quanto mais etapas puladas, mais tempo será gasto para se chegar ao objetivo do entendimento básico pleno.
É entender que tudo tem um processo, o aprendizado é feito de passos, e nada, nada nesse mundo se consegue fazer se ficar desviando de qualquer problema que surge. Não é a area de TI que é complicada por ser assim. Elá é só diferente do padrão de outras áreas, que também são exigentes e demandam muito tempo de dedicação para alçar amplos domínios.