В книгах в основном теория, а разбор задач там как правило всегда по минимуму. Есть, правда, специальные задачники, однако и своих собственных задач (а также pet-проектов) должно быть предостаточно для практики. Усваивать всегда всё лучше как раз на практике, но никогда не следует забывать, что нет ничего практичнее хорошей теории. Так, скажем, пара книг (базовый языковой курс и хороший учебник алгоритмики) при должном усердии вполне могут стать наиболее эффективным средством обучения. Для С/С++ это, например, учебник Стивена Праты и "Фундаментальные алгоритмы на С++" Роберта Седжвика. А дальше - само обучение, а потом ещё углубление!
для набора первоначальных знаний и понимания базовых элементов можно начинать по простым книгам "для чайников". Переходить к практике лучше под присмотром наставника.
Эффективней всего (но крайне затратно по ресурсам) будет такой путь: физ-мат школа класса с пятого + школьные олимпиады + ежедневные занятия с репетитором; после школы - либо зарубежные вузы вплоть до MIT, либо на худой конец, математические факультеты МГУ/СпбГУ, параллельно со студенческими олимпиадами по спортивному программированию и активной работой с тренером. Дальше аспирантура/докторантура, на выходе имеем живого титана духа и тела, уже имеющего определённые научные достижения в вычислительной математике.
Программирование вполне изучаемо самостоятельно по книгам, поэтому да, смысл есть, почему бы и нет?