Existem formas no campo teórico e no campo prático. No campo teórico, recomendo estudar Estrutura de Dados e Matemática Discreta. Nesses estudos não subestime o poder da literatura. Alguns livros são caros, mas valem muito mais do que alguns cursos ainda mais caros. São eles:
- Lógica de Programação e Estruturas de Dados - Sandra Puga e Gerson Rissetti;
- Matemática discreta: Uma introdução - Edward Scheinerman;
- Entendendo Algoritmos: Um Guia Ilustrado Para Programadores e Outros Curiosos - Aditya Y. Bhargava.
Quando estava na universidade fazia muitas leituras e isso simplesmente deslanchou meu estudos. Até hoje continuo lendo. Muitos dos cursos que estão pela internet tem a fundamentação teórica que estão nos livros, outros seguem vozes da minha cabeça. Por isso é importante saber escolhe-los também.
No campo prático, a melhor forma é fazendo desafios. A plataforma que eu recomendo é a BeeCrowd. Ela tem centenas de desafios para todos os níveis e você pode resolvê-los em qualquer linguagem. Ela é toda em português e extremamente fácil de utilizar. O foco dela é justamente você resolver problemas construindo algoritmos e nada melhor que a prática para melhorar sua lógica. Ao final ela dá a resposta para você.
O que eu não recomendo é subir um projeto, fazer um clone disso ou daquilo, porque embora tenha muita lógica agregada, são processos indiretos e servem para melhorar suas habilitades com a stack completa e não com algoritmos.