Rapaz,
se você está iniciando em lógica de programação e deseja escrever os primeiros programas, talvez seja melhor você começar com linguagens estruturadas (C ou PASCAL) e resolver uma série de exercícios para ter consolidado os seguintes conceitos:
- variáveis (declaração, atribuição)
- estruturas de controle do fluxo de execução (if, for, while, switch etc)
É sempre importante compreender e visualizar o uso dos comandos de quebra do fluxo de execução, também conhecidos como comandos de desvio (que não são recomendados para iniciantes) tais como: continue e break. Em alguns (raros) casos eles se justificam porque reduzem a complexidade e o tempo de execução… mas precisa de muita experiência para realizar este tipo de análise;
- trabalho com vetores (declaração, atribuição… ordenação e pesquisa)
- estruturas de dados heterogêneas (tipo registro ou tipos definidos pelo usuário);
- modularidade (este tópico será fundamental depois na OO, aqui você deve aprender a dividir os problemas (ou as propostas de soluções)… crie rotinas/funções que façam as menores coisas, ou seja, tente ir definindo os módulos com apenas uma responsabilidade, isto irá te ajudar depois na OO).
Com este tema, você terá que reavaliar os seus conhecimentos de variáveis, mas agora aplicados ao escopo de visibilidade e a passagem de parâmetros por valor ou referência.
Outro aspecto relevante e que muitos programadores não sabem quando se aplica é a recursividade.
Apesar de não ser fundamental (em termos de lógica), ajuda e muito conhecer algumas estruturas e implementá-las neste momento. São elas: filas, pilhas, listas, árvores etc.
Depois disto você pode ainda dar uma olhada em arquivos (novamente o C e o PASCAL ajudam em muito). Neste tópico, o importante é conhecer os acessos sequências ou não. E o fundamento mais importante, e em arquivo eles ficam mais evidentes. Os conceitos relacionados a stream.
Depois disso, o estudo da teoria de OO pode ajudá-lo para começar a programa em Java… antes, porém fará você dar muitas voltas e pode levá-lo a se tornar um programador a lá componentes… ou seja, se tem componente pronto, você saberá arrastá-lo e utilizá-lo, caso contrário você passará dias dando voltas…
Quanto a OO, a modularidade lhe levará a métodos (rotinas/funções em outro paradigma) sobrepostos/sobrecarregados que lhe ajudará a entender e a implementar polimorfismos…
fw