Как эффективно изучать программирование?

Всем привет, хотелось бы услышать рекомендации по эффективному изучению языка C++. Изучаю его по книге Дейтелов, пишу и разбираю примеры из книги. Прошёл 7 глав, а дальше уже очень сложно понимать информацию. Осознаю, что теория это хорошо, но не хватает практических навыков.

1) Может нужно учить какие-то алгоритмы или разделы математики? Посоветуйте литературу.

2) Подскажите книгу, где есть базовые задания с решениями.

3) Что может быть полезным на Coursera?

4) Разбор олимпиадных задач.

Расскажите как вы видите изучения программирования. Какую литературу и ресурсы использовать.

Заранее благодарен.