Um conselho que poderia te passar é o seguinte: desenvolva projetos a qual você se sinta a vontade de aplicar os conhecimentos aprendidos. Por exemplo: Talvez tudo isso que você esteja vendo faça sentido quando aplicados em um contexto a qual você se sinta mais a vontade. Acredito que o único problemas com exercício é que eles limitam aquilo que de fato pode ser aplicado, são interessantes, em um primeiro momento para aprendizado por repetição. No entanto, nunca vão substituir o contexto real ou a imaginação.
Talvez Programação Orientada a Objetos faça sentido quando você estiver desenvolvendo um jogo legal ou talvez Estrutura de Dados finalmente tenha alguma sentido quando você estiver lidando com um problema em seu projeto onde você precisa otimizar o tempo de resposta do usuário. Desafios e exercícios são essenciais, não estou falando que não importantes, mas o melhor aprendizado vem do surgimento de um problema em seu estado natural onde você identifica ele, formula e aplica a solução!