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.

leetcode > tudo, tem também o antigo uri online que virou o https://www.beecrowd.com.br/judge/pt/login.