Рост обычно идет так:
Сперва школьное образование, учебники, вступительные курсы - самая база.
Дальше обычно идут задачки, онлайн-курсы - для простенького закрепления и освоения.
Но нормальное становление идет так:
Просто пишешь программы. Много. Или много мелких или одну крупную. Решаешь конкретные задачи. Написал свой калькулятор. Написал себе программу, которая выводит расписание в html, написал сайт по сбору статистики матчей в дотку и работаешь с этой статистикой чтобы прикинуть порядок сборки или еще какие-то моменты. Написал свой скрипт бэкапа важных документов. Написал свой конвертер-ресайзер фоток.
Главное чтобы конечный результат выполнения программы был понятен лично тебе, и ты мог сам решать когда он тебя устраивает, а когда допилить.
Между написанием программ читаешь различные книжки, и уже тогда, когда у тебя есть ПРАКТИЧЕСКИЙ опыт написания программ, ты в книжках можешь наткнуться на более удачное решение проблемы, с которой ты сталкивался и уже писал велосипед.
Быстрых методов стать хорошим программистом, прочитав книжку - не выйдет, ибо без личного опыта долбления лбом об стену, тебе будет непонятно что именно ты прочитал и насколько это важно.
Правильный совет тебе уже дали в первом ответе - что нет какой-либо суперовой книжки. Все книжки - относительные, и не смогут сделать за 2 месяца из новичка олимпиадника. Поэтому просто пробуй программить и парралельно читать просто популярные книжки по тому языку, который ты сейчас используешь.