Начните с изучения ассемблера. Так вы поймете, как работают программы на уровне машинного кода. Без этих знаний вы не сможете полностью понять, как работает код, написанный на языке более высокого уровня. Параллельно стоит изучить и опробовать наиболее распространенные алгоритмы (сортировка, поиск, обработка строк и т.д.) и структуры данных. В качестве ЯП для экспериментов я бы рекомендовал python, хотя это дело вкуса.
Это,на мой взгляд, то, с чего стоит начать. После освоения основ, имеет смысл определиться с тем, какое именно направление в программировании вас интересует и приступить к изучению соответствующего стека технологий.
Не надо Подбельского и прочих русских авторов. По C/C++ лучше всего рассказали Керниган&Ритчи (Си), Лафоре по C++.