Então, algum tempo atrás me deparei com o mesmo problema, e resolvi de forma simples: estudando estruturas de dados e algoritmos. Acredito que muitos programadores se concentram em frameworks e novas funcionalidades de uma linguagem, mas considero muito importante focar em algoritmos e estruturas de dados, caso você ainda não domine esses conceitos.
O site que utilizo para praticar é o: https://leetcode.com/
Nesse site, você pode realizar diversos exercícios de lógica e treinar algoritmos. Comece pelo modo fácil (easy mode), pois o modo médio (medium) ou difícil (hard) é bastante desafiador se você não estudou a fundo sobre estruturas de dados e algoritmos.
Videos bons para computer science: https://www.youtube.com/watch?v=tpIctyqH29Q&list=PL8dPuuaLjXtNlUrzyH5r6jN9ulIgZBpdo
é um curso completo para aprender ciências da computação.
Videos bons para data structure: https://www.youtube.com/watch?v=bum_19loj9A&list=PLBZBJbE_rGRV8D7XZ08LK6z-4zPoWzu5H
veja um pouco dos dois ao mesmo tempo e tenta ir fazendo uns exercicios do leetcode que vc vai longe vlw.