Что значит "понимать логику программирования"? Чтобы научиться программировать, нужно... программировать. То есть изучать теорию, лучше просто читать учебник, от начала до конца, но умение будет нарабатываться только во время практики.
Самое лучшее, если есть учитель, который будет помогать разбираться, давать и проверять задания, следить, чтобы не было прокрастинации или наоборот, "перегорания".
Если вместо программирования бесконечно читать книги, смотреть ролики, изучать дискретную математику или что там еще вам кажется, что нужно знать, то толку будет немного.
Как правило, программист осваивает что-то для себя новое, когда в реальном проекте ему это требуется. После этого, он даже если забудет (а он забудет), как эту задачу решать, он будет смотреть в своих кодах.
По вопросу, чтобы научиться качественно программировать, нужно чтобы вас научили принципам качественного программирования, т.е. опять-таки учитель нужен.