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