Ранее уже говорили о фундаментальном труде Дональда Э. Кнута "Искусство программирования" там изложены фундаментальные основы программирования.
Вопрос в другом. Если вы хотите заниматься спортивным программирование это одно. Если вы хотите создавать что-то маленькое или глобальное, т.е. коммерческое то эти навыки вам не пригодятся. Ничего не поделаешь, но весь мир живёт при капитализме. И там основная задача - извлечение прибыли. Спортивное и Коммерческое программирование это очень разные вещи.
Основная разница в качестве решения задачи.
Спортивное программирование - написать поограмму с правильным ответом быстрее всех.
Коммерческое программирование - написать надёжный код на ограниченном железе с максимальной производительностью продукта для массового пользователя.
Так что вы определитесь, что вы хотите. Если спорт: то изучайте "Искусство программирования" Д. Э. Кнута и "Алгоритмы и структуры данных" Николауса Вирта. Этого вам хватит.