Я бы начал все же с теории программирования, нежели сразу лезть в совсем уж фундаментальную математику. Если только вы не учитесь в ВУЗе. Тогда это имеет свой смысл, поскольку математику в ВУЗе вам будет изучить гораздо легче чем потом самому, если понадобится. Есть предмет информатика. Там упрощенно и адаптированно к реалиям программирования по сути и даются специфичные разделы математики. В достаточном большинству программистов объеме. Это ну трудно назвать "пониманием логики программирования", но это совершенно необходимая база. Более глубокая математика уже специфична для конкретных областей программирования. Так некоторым программистам ведь и вирусология пригодится может. Но это не значит что всем с нее надо начинать вхождение в специальность программиста.
Более близко к "пониманию логики программирования" дисциплина "алгоритмы и структуры данных". Там тоже есть математика но обычно она в достаточном объеме объясняется при разборе алгоритмов.
И наконец совсем уж о "понимании". Есть такая вещь как "парадигмы программирования". На сегодняшний день самые популярные три: процедурная, объектно-ориентированная и с некоторым отставанием по популярности от первых двух, но тоже функциональная. Вот и изучить что это такое и зачем это нужно при создании реальных систем. Все это по сути о "декомпозиции", т.е. о разделении сложной и необозримой целиком задачи на простые либо уже решенные до вас подзадачи. Вот это наверное и можно уже назвать "пониманием логики программирования". На словах просто но на деле это сложные технологии шлифовавшиеся уже несколько десятилетий. И это только фундамент. Когда вы выберите свою первую отрасль программирования вы узнаете что там есть так называемые паттерны. А первый язык программирования - узнаете что такое Best Practice. Вот без всего перечисленного простая задачка из учебника будет работать прекрасно и даже проще чем со всем этим. Привет школьным олимпиадам. Но сложная система скорее всего "обрушится под весом собственной сложности" еще до окончания разработки. А если и будет чудом сделана, это будет никому не нужный мертворожденный монстр который невозможно поддерживать и развивать.
Ну и главное. Понимание (а это не то же самое что знания) и навыки этого всего приходят с опытом. Вот и набираться.