Слишком обширное понятие программирование. Определитесь с областью под которую собираетесь программировать. Web, мобильная разработка, разработка прикладного ПО, системное программирование, итд. Каждая из этих областей имеет свой подвиды, свой подводные камни. Именно поэтому важно определиться. Определились, изучили теорию (сильно не зацикливайтесь на ней, только основы), дальше нужна практика, как можно практики. Пишите то что вам нравится, чего не хватает. Участвуйте в open source проектах. Отвечайте на вопросы других (stackoverflow, gitter, reddit итд). Это более практичный путь изучения программирования.
Также есть академический подход. Изучение computer science, архитектуры компьютера, алгоритмов итд. Очень много книг для их изучения. Посмотрите на SICP, книгу Кормена по алгоритмам (основам), ну или самый хардкорный вариант "искусство программирования" Дональда Кнута. Удачи и терпения.