Для алгоритмов стоит изучать алгоритмы, и как сказали выше - практиковаться. Необходимо понять что есть абстракция и декомпозиция как минимум, а потом этим научиться пользоваться.
В любом техническом вузе есть сотни книг для курса программирования, главное понять суть, а потом уже расширять знание умением.
Не потянул Кормена, попробуй другого: Вирт, Скиена, Голдаев, Левитин... их можно перечислять до бесконечности, они все об одном и том же разными словами, а порой и теми же.
Почитай про паттерны, постарайся осмыслить и проанализировать. Главное тяга.
upd:
Ну или вон в соседней ветке рекомендуют
aliev.me/runestone