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