Можешь почитать
"Алгоритмы. Руководство по разработке". Сам читал, база нормальная.
Но то, о чем ты сказал (разбивать задачи на подзадачи и т.д.) - это называется "научиться мыслить аналитически". Этому нельзя научиться читая книжки - только через опыт получаешь насмотренность и набиваешь шишки. Поэтому одновременно с книгой/курсом решай задачи на условном литкоде.
P.S. я считаю что математика нужна, т.к. она и позволяет получить вот это аналитическое мышление через призму функций, мат. абстракций, которые после переносятся на базовые конструкции ЯП (функции, переменные)