Se você quer ser à prova do futuro, o melhor conselho que posso dar não é se envolver em uma tecnologia.
Portanto, não aprenda APIs às cegas. Aprenda como eles são concebidos. Quais são as filosofias por trás da cena? Quais são suas vantagens e defeitos? Pense em software em geral, não em uma tecnologia específica.
Você também pode trabalhar na boa concepção do programa, ir para OOP e AOP é uma boa opção IMO. Mas não apenas entenda o mecanismo, trabalhe verdadeiramente com a filosofia por trás do mecanismo.
Não negligencie a ciência da computação em geral, como estruturas de dados e algoritmos, porque eles são conhecimentos entre tecnologias, sempre úteis.
Também vá para boas práticas. Você costuma ter dúzias de maneiras de fazer algo, mas a maioria é uma porcaria: propensas a erros, difíceis de manter, difíceis de entender posteriormente ou por outro programador, etc. . . Geralmente, o código é mais difícil de ler do que escrever. Portanto, aprenda a gastar um pouco mais de esforço na escrita para facilitar a leitura (porque você lerá mais o código do que escreve).
Aprenda técnicas eficazes para depurar (uso inteligente de log e depurador) e testar (como escrever código que pode ser facilmente testado em unidade e como automatizar esses testes).
Então, você precisará de um histórico geral de tecnologia. Estou falando de um conhecimento muito amplo, como o funcionamento de um processador (falta de cache ou previsão de ramificação é um bom começo), sobre sistemas UNIX, sobre protocolos de rede como IP, TCP e Ethernet, etc. . .
No final, aprenda a aprender. Se você souber aprender, poderá se adaptar.
Você precisará de algum conhecimento forte em tecnologias específicas para conseguir um emprego, mas elas estão desatualizadas muito rapidamente (pense no COBOL, por exemplo, ou na programação da Web no momento da guerra do IE / Netscape). Portanto, não confie neles para ser à prova de futuro. Eles serão essenciais para serem contratados, mas definitivamente não o que faz um ótimo programador e o que tornará suas habilidades duráveis ao longo do tempo.
Edição: Se você está apenas começando, você definitivamente deve fazer alguma coisa. Qualquer coisa, mesmo. Um jogo como Tetris ou cobra é um bom começo e divertido. Se você não fizer as coisas, gastará muito tempo aprendendo e realmente não terá a experiência necessária para entender completamente o que aprendeu.
Vamos dar um exemplo com padrões de design. Os padrões de design são ótimos e você deve usá-los definitivamente. Mas, se forem usados em excesso, eles tornarão seu código complicado e difícil de entender. Você terá que enfrentar o problema que um padrão de design resolve e perder algum tempo tentando resolvê-lo ou seus efeitos colaterais para entender completamente do que se trata o padrão de design. Os padrões de design devem ser usados como pequenas refatorações ao longo do tempo, quando o código cresce. E você saberá quando um padrão de design é necessário quando o benefício for maior que a complexidade do código induzida por seu uso. Isso requer experiência.
Então, definitivamente, faça as coisas, elas aprendem com seus erros. Não posso insistir mais: FAÇA AS COISAS !