Научиться программировать самостоятельно «по книжкам», имхо, вполне реально. Но нужен реальный (или близкий к нему) проект, а не отрывочные учебные задачи, какие обычно предлагаются в книгах. То есть после начального вхождения в язык ставим себе задачу и начинаем её реализовывать. Важно реализовать до пригодного в продакшен вида (пускай не будет каких-то интересных фич, но те, что есть должны быть закончены, а не «всё равно никто никогда не увидит, потому входные данные проверять, а выходные экранировать не буду»). Очень желательно иметь качественный фидбэк на свой код (вариантов — тьма).
Для начального обучения хорошо подходят, по-моему, Python (+Django если говорить о вебе) или Ruby (+RoR в вебе), на худой конец PHP. Компилируемые языки со статической типизацией, по-моему, приводят начинающего программиста в ситуации, когда за деревьями не видно леса — заставляя уделять много внимания формальной правильности они способствуют снижению внимания на логическую правильность.